标题: [文本处理] 批处理如何在文本里以空白行分割的每一小段内容的每一行末尾添加特定字符串 [打印本页]
作者: 1e3e 时间: 2014-1-22 14:53 标题: 批处理如何在文本里以空白行分割的每一小段内容的每一行末尾添加特定字符串
已知:
a县项目汇总.txt内容如下:
weewewe wwww sdsdsdssd eeeeee
eweweweewe dsdsd wewewew dsdsd
sdsdsdsdsd sdsdsd sdsdsdsd dsdsdsdsads
sdadadaerer dsadfafa ffasdfasdf da**sfasf
dadfasf sadfafasf a**fafasf fafasfdsafsaf
**fasfsafsafd fafasfasfsafsaf fasfasfasfasf
**f胗 fafasfasfeweewf fasfarrf
现在按照其空白顺序(如图所示)依次在行尾加上使其内容如下:
weewewe wwww sdsdsdssd eeeeee 项目规划地1部分
eweweweewe dsdsd wewewew dsdsd 项目规划地1部分
sdsdsdsdsd sdsdsd sdsdsdsd dsdsdsdsads 项目规划地2部分
sdadadaerer dsadfafa ffasdfasdf da**sfasf 项目规划地2部分
dadfasf sadfafasf a**fafasf fafasfdsafsaf 项目规划地3部分
**fasfsafsafd fafasfasfsafsaf fasfasfasfasf 项目规划地3部分
**f胗 fafasfasfeweewf fasfarrf 项目规划地3部分
说明:地1部分我没有打成“第1部分”,是因为处理文本的需要选择了“地”而非“第”
作者: xxpinqz 时间: 2014-1-22 15:41
- @echo off&setlocal enabledelayedexpansion
- set n=1
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "a.txt"') do (
- if "%%b" == "" (
- if defined y set y=&set/an+=1
- echo,
- ) else (
- echo,%%b 项目规划地!n!部分
- set y=.
- )
-
- ))>b.txt
复制代码
作者: 1e3e 时间: 2014-1-22 15:55
回复 2# xxpinqz
谢谢,我试试去
作者: 1e3e 时间: 2014-1-22 16:04
回复 2# xxpinqz
非常感谢,试验确实可行,现在一个文件夹下有145个这样文本都要这样处理,怎么办?
作者: terse 时间: 2014-1-22 16:24
回复 4# 1e3e
外包一个FOR 循环 试
作者: 1e3e 时间: 2014-1-22 16:27
回复 2# xxpinqz
现在我还发现一个悲剧的问题:就是比如现在我上传的附件运行不正常,是因为行未有空白吗?我去除行未空白似乎是正常的,3县.txt这个根本运行不了,你的代码可以再完善一下吗?
作者: DAIC 时间: 2014-1-22 16:53
回复 6# 1e3e
2县.txt试试这个代码
作者: DAIC 时间: 2014-1-22 17:14
回复 6# 1e3e
3县.txt这个文件时unicode编码,你可以把它另存为ANSI编码。
或者,把
('findstr /n .* "3县.txt"')
改成
('type "3县.txt" ^| findstr /n .*')
作者: xxpinqz 时间: 2014-1-22 17:42
本帖最后由 xxpinqz 于 2014-1-22 17:55 编辑
回复 4# 1e3e
处理当前文件夹下所有txt文档,生成文件到目录new下。- @echo off&setlocal enabledelayedexpansion
- md new 2>nul
- for %%i in (*.txt) do (
- set n=1
- set "y="
- (for /f "tokens=1* delims=:" %%a in ('type "%%i" ^|findstr /n .*') do (
- set "str=%%b"
- if "%%b" == "" (
- if defined y set y=&set/an+=1
- ) else (
- for /f "tokens=*" %%a in ("%%b") do (
- if not "%%a"=="" set "str=%%b 项目规划地!n!部分"
- )
- set y=.
- )
- echo,!str!
- ))>"new\%%~ni(新).txt"
- )
复制代码
作者: 1e3e 时间: 2014-1-23 08:15
如附件:有a县项目汇总.txt,b县项目汇总.txt,现在汇总成a县+b县项目汇总.txt。
实际上就是按照项目规划地1部分的项目汇总到一块,项目规划地2部分的项目汇总到一块,…………
作者: xxpinqz 时间: 2014-1-23 12:18
本帖最后由 xxpinqz 于 2014-1-23 12:24 编辑
回复 10# 1e3e
用上面的改改,大约如此- @echo off&setlocal enabledelayedexpansion
- set /a num=f=10000
- (for %%i in (*.txt) do (
- set /a m=n=10000,f+=1
- set "y="
- for /f "tokens=1* delims=:" %%a in ('type "%%i"^|findstr /n .*') do (
- set "str=%%b"
- if "%%b" == "" (
- if defined y set y=&set/an+=1
- ) else (
- for /f "tokens=*" %%a in ("%%b") do (
- set/a m+=1
- if not "%%a"=="" echo,!n!:!f!!m!:%%b
- )
- set y=.
- )
- )
- ))>tmp
- (for /f "tokens=1-2* delims=:" %%a in ('type tmp^|sort') do (
- if %%a neq !num! set/a num+=1&echo,
- echo,%%c
- ))>all.txt
- del tmp
- start all.txt
复制代码
如果也要按顶楼要求,改下序号- @echo off&setlocal enabledelayedexpansion
- set /a num=f=10001
- (for %%i in (*.txt) do (
- set /a m=n=10001,f+=1
- set "y="
- for /f "tokens=1* delims=:" %%a in ('type "%%i"^|findstr /n .*') do (
- set "str=%%b"
- if "%%b" == "" (
- if defined y set y=&set/an+=1
- ) else (
- for /f "tokens=*" %%a in ("%%b") do (
- set/a m+=1,nn=n%%10000
- if not "%%a"=="" echo,!n!:!f!!m!:%%b 项目规划地!nn!部分
- )
- set y=.
- )
- )
- ))>tmp
- (for /f "tokens=1-2* delims=:" %%a in ('type tmp^|sort') do (
- if %%a neq !num! set/a num+=1&echo,
- echo,%%c
- ))>all.txt
- del tmp
- start all.txt
复制代码
作者: PowerShell 时间: 2014-1-23 15:29
从第一行开始,取一行,去掉行尾空格,然后插入 " 项目规划地1部分"
下一行如果是空行," 项目规划地1部分" 变成" 项目规划地2部分"
如此继续,
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |