Board logo

标题: 对大量文本文件的批量处理(合并,统计) [打印本页]

作者: oxus     时间: 2006-10-4 23:36    标题: 对大量文本文件的批量处理(合并,统计)

我有一系列的文本文件(596个),想对其作以下处理: 1、将指定的文件(比如001到180)内容进行合并(最好根据输入,比如“请输入您想合并的文件”),写入新文件new001.txt中; 2、统计new001中所有汉字(最好包括标点符号)出现的频率,将结果写入result001.txt中。 本人是菜鸟,麻烦高手指点一二。

作者: electronixtar     时间: 2006-10-4 23:58
让人感到很反感的一点是:很多一次性非重复的工作也用批处理来做是不是有点浪费了? 个人觉得楼主的问题用 Word 就可以很好的解决。非得在cmd那个黑框框里处理才舒服么?

作者: NaturalJ0     时间: 2006-10-5 00:12
所有汉字出现的频率 = =b 想知道下,你统计这有啥用。

作者: pengfei     时间: 2006-10-5 00:25
要符合楼主的要求, 也不是不行, 你想过滤这么多字符, 效率可想而知. 代码也会很冗长, 费神呀~~~!

作者: namejm     时间: 2006-10-5 00:27
  对于你的第一个问题,可以用如下代码来实现:
@echo off
:: 请保证每个文本文件中没有CMD下的敏感字符
:: 180可以修改为你想要的596
:: 想获得合并指定文件的功能,请自行修改以下代码
del /a /q /f new001.txt 2>nul
setlocal enabledelayedexpansion
for /l %%i in (1,1,180) do (
    set num=%%i
    if %%i lss 10 set num=00%%i
    if %%i geq 10 if %%i lss 100 set num=0%%i
    for /f "delims=" %%j in (!num!.txt) do >>new001.txt echo%%j
)
start new001.txt
  统计汉字出现的出现频率,hitme曾经做过,不过好象结果不是很准确,把他的代码贴出来,各位可以讨论一下
闲来无聊,瞎搞一个,测试 
                功能:统计每个单词在文本中出现的次数 
                用法: 
                cmd下 
                word_num 文件名 
                统计结果样式: 
                0152 fixed 
                0108 added 
                0094 in 
                0091 to 
                0070 will 
                0069 not 
                0062 problem 
                0059 the 
                0056 bar 
                0054 support 
                0054 at 
                0053 and 
                0050 for 
                0047 menu 
           0046 tab 
           0042 when 
           0041 new 
           0040 option 
           0040 changed 
           0038 myie2 
           0037 plugin 
           0036 favorite 
           0035 toolbar 
           0035 on 
           代码 
           @echo off 
           cls 
           echo. 
           echo.----------------------------- 
           echo....统计中.....请少等... 
           echo.----------------------------- 
           echo. 
           if "%*"  "" goto :syntax 
           if "%*"  "/?" goto :syntax 
           if "%*"  "/" goto :syntax 
           if "%*"  "?" goto :syntax 
           if /i "%*"  "/help" goto :syntax 
           :: /* 拆解文本为每行一单词 */ 
           setlocal ENABLEDELAYEDEXPANSION 
           del end.txt tmp*.txt 2>nul 
           set /a m=0 

           :loop 
           set /a m+=1 
           for /f "tokens=%m% delims=.,:;/[]()!'@=\<> " %%i in (%*) do ( 
           set n=%%i 
           set n=!n:"=! 
           echo.1 !n!>>tmp.txt 
           ) 
           if "%m%"  "200" goto:add 
           goto:loop 
           endlocal 
           :add 
           :: /* 分类汇总 */ 
           setlocal ENABLEDELAYEDEXPANSION 
           for /f "tokens=1,2" %%i in ('sort tmp.txt^|findstr /r "^1\ [a-z][A- 
           Z]"') do ( 
           if /i "!y!"  "%%j" ( 
           set /a x+=1) else (if "!x!" neq "" ( 
           if !x! lss 10 (echo.000!x! !y!>>tmp1.txt) else ( 
           if !x! lss 100 (echo.00!x! !y!>>tmp1.txt) else ( 
           if !x! lss 1000 (echo.0!x! !y!>>tmp1.txt)))) 
           set y=%%j 
           set x=%%i) 
           ) 
           if !x! lss 10 (echo.000!x! !y!>>tmp1.txt) else ( 
           if !x! lss 100 (echo.00!x! !y!>>tmp1.txt) else ( 
           if !x! lss 1000 (echo.0!x! !y!>>tmp1.txt))) 
           endlocal 
           sort /r tmp1.txt>tmp2.txt 
           :ex 
           :: /* 大写转小写 */ 
           setlocal ENABLEDELAYEDEXPANSION 
           for /f "delims=" %%i in (tmp2.txt) do ( 
           set ex=%%i 
           set ex=!ex:A=a! 
           set ex=!ex:B=b! 
           set ex=!ex:C=c! 
           set ex=!ex:D=d! 
           set ex=!ex:E=e! 
           set ex=!ex:F=f! 
           set ex=!ex:G=g! 
           set ex=!ex:H=h! 
           set ex=!ex:I=i! 
           set ex=!ex:J=j! 
           set ex=!ex:K=k! 
           set ex=!ex:L=l! 
           set ex=!ex:M=m! 
           set ex=!ex:N=n! 
           set ex=!ex:O=o! 
           set ex=!ex:P=p! 
           set ex=!ex:Q=q! 
           set ex=!ex:R=r! 
           set ex=!ex:S=s! 
           set ex=!ex:T=t! 
           set ex=!ex:U=u! 
           set ex=!ex:V=v! 
           set ex=!ex:W=w! 
           set ex=!ex:X=x! 
           set ex=!ex:Y=y! 
           set ex=!ex:Z=z! 
           echo.!ex!>>end.txt 
           ) 
           del tmp*.txt 
           start end.txt 

           :syntax 
           cls 
           echo. 
           echo.word_num.cmd 
           echo. 
           echo.written by hitme 2005.9.2 
           echo.用法: 
           echo.word_num 文件名 
           echo. 
           echo.例如: 
           echo.word_num License.txt 
           echo. 
                                                   统计中文字的,用法同顶楼,想 

           办法搞成竖排一列,试试 
           代码: 
           @echo off 
           setlocal ENABLEDELAYEDEXPANSION 
           for /f "delims=" %%i in (%1) do ( 
                       set n=%%i    
                       echo.!n!>tmp.txt 
                       echo.x>>tmp.txt 
                       for /f "tokens=1 delims=:" %%a in ('findstr /o "x" tmp.txt') do set lenth=%%a 
                       for /l %%a in (0,1,!lenth!) do ( 
                               set m=!n:~%%a,1! 
                               if "!m!" neq "" echo.1 !m!>>tmp1.txt 
                       ) 
           ) 

            :add 
           for /f "tokens=1,2" %%i in ('sort tmp1.txt') do ( 
                       if "!y!"  "%%j" ( 
                               set /a x+=1) else (    if "!x!" neq "" ( 
                                           if !x! lss 10 (echo.000!x! 
            !y!>>tmp2.txt) else ( 
                                          if !x! lss 100 (echo.00!x! 
            !y!>>tmp2.txt) else ( 
                                           if !x! lss 1000 (echo.0!x! 
            !y!>>tmp2.txt)))) 
                                           set y=%%j 
                                           set x=%%i) 
           ) 
           if !x! lss 10 (echo.000!x! !y!>>tmp2.txt) else ( 
           if !x! lss 100 (echo.00!x! !y!>>tmp2.txt) else ( 
           if !x! lss 1000 (echo.0!x! !y!>>tmp2.txt))) 
           endlocal 
           sort /r tmp2.txt>end.txt 
           del tmp*.txt 
           start end.txt 

作者: redtek     时间: 2006-10-5 10:34
Originally posted by oxus at 2006-10-4 23:36: 我有一系列的文本文件(596个),想对其作以下处理: 1、将指定的文件(比如001到180)内容进行合并(最好根据输入,比如“请输入您想合并的文件 ...
你希望: A、帮你做完你所遇到的工作上的任务?(全帮你干了) B、帮你掌握你要完成工作所要具备的知识?(帮你掌握批处理知识,你自己学着做)