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

[文本处理] [回复]对文本的行进行替换

下午看到一个求助关于两个文本间行替换的问题,刚调试好了代码,不过发现该贴子被锁,不能回复了。可能是因为帖子标题的问题吧。我就另开一个帖子来作为回复吧。原帖引用如下:
个批处理替换的问题
最近遇到一个批处理替换的问题,不知如何解决,特到坛子里来向大家请教。
P.TXT文件有m行,Q.TXT文件有n行,想用P.TXT的a到b行替换Q.TXT的c到d行,已知0<a<b<m,0<c<d<n;
请问这样的批处理如何编写?

下面wxcute兄说让楼主晒出文本内容,我觉得他这个帖子内容还算比较清楚吧。就是讲把文本q.txt中的c-d行用p.txt中的a-b行进行替换,并且范围也给出了,就是不能超过两个文本的最大行数。至于文本内容,可以随便写,只要满足要求即可吧(不知说的对不,如有错还请指出)。
我的代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-2 delims=:" %%i in ('findstr /n .* p.txt q.txt') do (
  3.    if "%%i" equ "p.txt" ( set m=%%j ) else set n=%%j
  4. )
  5. cd.>_q.txt
  6. echo p.txt共%m%行,q.txt共%n%行
  7. set /p "p=请输入p.txt中要进行替换操作的行(格式a-b,0<a<b<%m%):"
  8. set /p "q=请输入q.txt中被替换的行(格式a-b,0<a<b<%n%):"
  9. for /f "tokens=1-4 delims=-" %%i in ("%p%-%q%") do set pa=%%i&set pb=%%j&set qa=%%k&set
  10. qb=%%l
  11. set flag=0
  12. for /f "tokens=1-2 delims=:" %%i in ('findstr /n .* q.txt') do (
  13.   if %%i gtr %qb% set flag=0
  14.   if !flag! equ 0 (
  15.      if %%i gtr 0 (
  16.         if %%i lss %qa% ( echo %%j>>_q.txt ) else if %%i leq %qb% (
  17.            for /f "tokens=1-2 delims=:" %%k in ('findstr /n .* p.txt') do (
  18.                if %%k geq %pa%  if %%k leq %pb%   echo %%l>>_q.txt&set flag=1
  19.            )
  20.         ) else echo %%j>>_q.txt
  21.      )
  22.   )
  23. )
  24. move _q.txt q.txt
  25. echo 替换成功完成&start q.txt
  26. pause>nul
复制代码
思想很简单:就是取出q.txt中的1-(c-1)行,p.txt中的a-b行,q.txt中的(d+1)-最后行,组成一个新的文本。不知道有没有更有效率的方法。
代码写的可能比较乱,简单介绍一下:
1、开始先取出p.txt与q.txt的行数。
2、把a b c d分别赋给pa pb pc pd
3、也就是上面的思想。其中设置flag是为了使p.txt中的a-b行在q.txt中只显示一次。大家可以去掉flag试一下。

如有错请指出!

[ 本帖最后由 lhjoanna 于 2008-11-22 16:04 编辑 ]

楼主如果给出测试文本,就省去了想帮助他的人临时生成文件的麻烦。

如 A 问:我有一块木料,怎么做成桌子阿?
可是 A 既不提供工具也不提供木料,B 只好自己借工具自己买木料,我想一般人是不愿当这个 B 的。

如果 A 提供了这块木料的话,也许马上就能看见木屑纷飞,漂亮的桌子完工了。

[ 本帖最后由 wxcute 于 2008-11-22 18:21 编辑 ]

TOP

呵,比喻很形象,原来是这个原因。为刚才的话致歉啊~~所以大家以后发求助帖时一定要把问题描述的清楚点,资料提供的详细点。这样方便自己也方便他人!!

TOP

返回列表