[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 替换超大文本内容的第2行

替换超大文本内容的第2行
几天前看到有一帖提问:
http://www.bathome.net/thread-2360-1-1.html
要求把所有txt文件内容的第2行的666替换为888(文件很大)
又是一个挑战效率的问题。
回家想出代码后,今天发现此帖因违规而被版主关闭了,汗。。
因时间有限,现将代码帖在2楼并屏蔽,等 ggwwhh888 会员把原帖修改合格后再麻烦版主解除屏
蔽。
将当前文件夹内所有txt文本的第2行的666替换为888
测试环境及效果:
   处理 20 个文本文件,每个文件 42万行,大小 12M
   耗时:0 小时 1 分钟 3 秒 82 毫秒
   测试环境:cup 1.0  内存:128M  系统  xp&cmd
此题也可作为一个挑战题目,看看各位能否有更高效的代码。

[ 本帖最后由 随风 于 2008-11-2 17:25 编辑 ]
技术问题请到论坛发帖求助!

将当前文件夹内所有txt文本的第2行的666替换为888
问题的关键在于如何忽略文本的头2行。
对超大文件来说 for 太慢。
more 也不快,且无法处理超过 65535 行的文本。(呵,不知是否我不会用?)
如果规定只能用cmd命令的话就只有 findstr 是最佳选择了。

测试环境及效果:
   处理 20 个文本文件,每个文件 42万行,大小 12M
   耗时:0 小时 1 分钟 3 秒 82 毫秒
   测试环境:cup 1.0  内存:128M  系统:xp@cmd

要求:文本内容不能有 以5个 ##### 开头的行,(若有、可自行修改 set "var=#####")

::
  1. @echo off&md tmp
  2. set "var=#####"
  3. set "find1=(set/p=%var%<nul&findstr ".*" "%%a")"
  4. set "find2=(set/p=%var%<nul&findstr /vb "%var%")"
  5. for /f "delims=" %%a in ('dir/b/a-d *.txt') do (
  6.    call :loop "%%a" "tmp\%%~na_888%%~xa"
  7.   (%find1%|%find2%|findstr /vb "%var%")>>"tmp\%%~na_888%%~xa"
  8. )
  9. start tmp
  10. exit
  11. :loop
  12. set /p n1=<"%~1"
  13. >"%~2" echo.%n1%
  14. for /f "usebackq skip=1 delims=" %%a in ("%~1") do (
  15.    set "n2=%%a"
  16.    >>"%~2" call echo.%%n2:666=888%%
  17.    goto :EOF
  18. )
  19. goto :EOF
复制代码
技术问题请到论坛发帖求助!

TOP

如果只是为了解决问题而解决问题的话,我会选择用sed或者change之类的第三方命令行工具。
BAT如果要考虑特殊字符的话,可能会比较麻烦吧,不过确实是一个锻炼的好机会。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

处理单个17725KB的文件 用时12秒多  也就是最快一分钟处理5个文件
晚上在来看随风兄的精彩代码

TOP

一个 挑战效率的问题 顶上去  怎么样
顺便问一下随风兄  要考虑 文件内相同行吗

TOP

可能 ggwwhh888 已经不再关注这个问题了吧。
毕竟,喜欢代码的人多,喜欢批处理的人少。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5楼 的帖子

我的代码条件是不能有5个#开头的行,(可自定义)
头2行不能有特殊字符。
技术问题请到论坛发帖求助!

TOP

我的代码条件是第一行和第二行不能和后面行有相同
头2行不能有特殊字符
速度20个12Mb的文件 12秒左右
显然不通用了

TOP

返回列表