中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 对大量文本文件的批量处理(合并,统计)
English/Chinese Fix Translation
作者:
标题: 对大量文本文件的批量处理(合并,统计) 上一主题 | 下一主题
oxus
新手上路





积分 6
发帖 1
注册 2006-10-3
状态 离线
『楼 主』:  对大量文本文件的批量处理(合并,统计) 使用 LLM 解释/回答一下

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


2006-10-4 23:36
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

让人感到很反感的一点是:很多一次性非重复的工作也用批处理来做是不是有点浪费了?

个人觉得楼主的问题用 Word 就可以很好的解决。非得在cmd那个黑框框里处理才舒服么?





C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-10-4 23:58
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
NaturalJ0
银牌会员




积分 1181
发帖 533
注册 2006-8-14
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

所有汉字出现的频率 = =b
想知道下,你统计这有啥用。


2006-10-5 00:12
查看资料  发短消息  网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

要符合楼主的要求, 也不是不行, 你想过滤这么多字符, 效率可想而知. 代码也会很冗长, 费神呀~~~!


2006-10-5 00:25
查看资料  发送邮件  发短消息  网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

  对于你的第一个问题,可以用如下代码来实现:

@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\
"') 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




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-5 00:27
查看资料  发短消息  网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

Originally posted by oxus at 2006-10-4 23:36:
我有一系列的文本文件(596个),想对其作以下处理:
1、将指定的文件(比如001到180)内容进行合并(最好根据输入,比如“请输入您想合并的文件 ...



你希望:

A、帮你做完你所遇到的工作上的任务?(全帮你干了)
B、帮你掌握你要完成工作所要具备的知识?(帮你掌握批处理知识,你自己学着做)


2006-10-5 10:34
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: