![Board logo](images/default/logo.gif)
标题: [文本处理] [已解决]批处理从多个文本文件中提取特定内容组成一个新的文本 [打印本页]
作者: zzj86673123 时间: 2009-8-7 15:47 标题: [已解决]批处理从多个文本文件中提取特定内容组成一个新的文本
本人对批处理了解的不是太多,老大安排了一个批处理的TOOL要做,是在不知道如何下手啊,请教各位了,十分感谢。时间挺紧的
需求如下:
1.输入folder的路径,里面存有多个文本文件(比如 a.txt,b.txt,c.txt等等)
2.这些txt文件有一个共同特点,都有下面一部分,即两个文件比较的结果
没有区别的显示如下(假设a.txt里面包含的内容是):
Diffcount [文件路径1] and [文件路径2] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Convert all NBNC lines to standard C
Total: 0.00 (standard C lines)
有区别的显示如下(假设b.txt里面包含的内容是):
Diffcount [文件路径3] and [文件路径4] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
Config 4 6 0 10 0 0 10 0.12
XML 707 228 171 935 0 0 935 0.12
-----------------------------------------------------------------------
Convert all NBNC lines to standard C
Total: 113.40 (standard C lines)
(假设C.txt里面包含的内容是):
Diffcount [文件路径5] and [文件路径6] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
JAVA 4 6 0 10 0 0 10 0.12
-----------------------------------------------------------------------
Convert all NBNC lines to standard C
Total: 155.40 (standard C lines)
3.现在我想得到这样的一个新的txt文本(具体路径可以设死,也可以我自己来指定),显示如下
NAME LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
a
b Config 4 6 0 10 0 0 10 0.12
b XML 707 228 171 935 0 0 935 0.12
c JAVA 4 6 0 10 0 0 10 0.12
...
...
-----------------------------------------------------------------------
格式差不多就是这样,具体也可以变动,但要把这些结果显示出来
老弟实在是不知道如何下手,不想在老大面前太丢人了,时间比较紧,期待大家的帮助,谢谢, 在线等大家的帮助,再次感谢已解决
[ 本帖最后由 zzj86673123 于 2009-8-9 12:58 编辑 ]
作者: batman 时间: 2009-8-7 16:25
前前后后看了三遍楼主对问题的描述,终于明白了一些,但还是存在着疑问,还请楼主
附上原始的部分文件,特别是你描述中的a.txt。。。
作者: zzj86673123 时间: 2009-8-7 17:01 标题: 补充
a.txt的意思是[文件路径1] 和 [文件路径2 里面对应的文件是相同版本,没有区别,所以结果在两个横线之间是空
a.txt的源文件:
LANG ADD MOD DEL A&M BLK CMT NBNC STATE BASELINE FILE TARGET FILE
Diffcount [文件路径1] and 文件路径2] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
-----------------------------------------------------------------------
Convert all NBNC lines to standard C
Total: 0.00 (standard C lines)
b.txt的意思是[文件路径3] 和 [文件路径4】 里面对应的文件是不同版本 ,所以有区别
b.txt源文件是:
LANG ADD MOD DEL A&M BLK CMT NBNC STATE BASELINE FILE TARGET FILE
Config 4 6 0 10 0 0 10 MOD 1551_cnh1011163.cfg 1551_cnh1011163.cfg
XML 0 5 0 5 0 0 5 MOD TTY_HCO.xml TTY_HCO.xml
XML 0 7 2 7 0 0 7 MOD TTY_HCO_farfield.xml TTY_HCO_farfield.xml
XML 0 3 0 3 0 0 3 MOD farfield_PHF_ring.xml farfield_PHF_ring.xml
Diffcount [文件路径3] and [文件路径4] result:
LANG ADD MOD DEL A&M BLK CMT NBNC RATE
-----------------------------------------------------------------------
Config 4 6 0 10 0 0 10 0.12
XML 707 228 171 935 0 0 935 0.12
-----------------------------------------------------------------------
Convert all NBNC lines to standard C
Total: 113.40 (standard C lines)
作者: batman 时间: 2009-8-7 17:58
请楼主先测试吧:- @echo off&setlocal enabledealyedexpansion
- set /p _path=请输入要操作的目录全路径(请注意要以\结尾):
- set "fg=-----------------------------------------------------------------------"
- echo NAME LANG ADD MOD DEL A^&M BLK CMT NBNC RATE>d:\new.txt
- echo %fg%>>d:\new.txt
- for /f "delims=" %%a in ('dir /s /b %_path%*.txt') do (
- for /f "skip=2 delims=" %%b in (%%a) do (
- if "%%b" equ "%fg%" (
- set /a n+=1
- ) else (
- if "!n!" equ "1" set "flag=a"&echo %%~na %%b>>d:\new.txt
- )
- )
- if not defined flag echo %%~na>>d:\new.txt
- set /a n=0&set "flag="
- )
- echo %fg%>>d:\new.txt
- start d:\new.txt
复制代码
[ 本帖最后由 batman 于 2009-8-8 13:22 编辑 ]
作者: namejm 时间: 2009-8-7 23:03
说实话,我们连看了好几遍,都没有理解楼主的准确意图。楼主最好不要只是举例说明,而是要用文字说明文件的规律及你的准确意图,让别人帮你总结规律不是好的求助方式:别人往往会把规律总结错的!
另外,请在顶楼以附件的形式上传部分原始文件,涉及隐私的部分可作替换处理——数据的格式对代码的编写至关重要,而帖子正文会把数据格式做一些修改。
作者: Lumiere 时间: 2009-8-8 01:50
什么乱七八糟的,问题提不好让人看了烦躁
作者: zzj86673123 时间: 2009-8-8 10:36 标题: 补充二
谢谢大家的关注,可能是我阐述的不清楚。我下午去单位把文本文件的源码贴过来。
谢谢,batman,但是代码执行结束的结果是
-----------------------------------------------------------------------
a
b
c
-----------------------------------------------------------------------
没有具体的数据。不知道是什么地方出问题了??还请指导啊
作者: terse 时间: 2009-8-8 10:56
貌似楼主想把两横线间的内容提取出来
作者: batman 时间: 2009-8-8 11:02
原帖由 zzj86673123 于 2009-8-8 10:36 发表 ![](http://bbs.bathome.net/images/common/back.gif)
谢谢大家的关注,可能是我阐述的不清楚。我下午去单位把文本文件的源码贴过来。
谢谢,batman,但是代码执行结束的结果是
-----------------------------------------------------------------------
a
b
c
-- ...
估计是%fg%的问题,楼主在测试时最好将我代码的分隔线替换成你源文件上的分隔线。
作者: terse 时间: 2009-8-8 12:15
- @echo off&setlocal enabledelayedexpansion
- set /p ph=请输入目录路径:
- set "fg=-----------------------------------------------------------------------"
- >"%ph%\new.txt" echo NAME LANG ADD MOD DEL A^&M BLK CMT NBNC RATE
- >>"%ph%\new.txt" echo %fg%
- for /f "delims=" %%a in ('dir /s /b /a-d %ph%\*.txt') do (
- for /f "skip=2 usebackq delims=" %%b in ("%%a") do (
- if "%%b"=="%fg%" (
- if defined flag (set flag=&if not defined %%~na >>"%ph%\new.txt" echo %%~na)else set flag=f
- ) else if defined flag >>"%ph%\new.txt" echo;%%~na %%b&set "%%~na=a"
- ))
- >>"%ph%\new.txt" echo %fg%
- start "" "%ph%\new.txt"
复制代码
作者: zzj86673123 时间: 2009-8-9 12:55 标题: 感谢大家
谢谢各位了,已经实现了,十分感谢。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |