下午看到一个求助关于两个文本间行替换的问题,刚调试好了代码,不过发现该贴子被锁,不能回复了。可能是因为帖子标题的问题吧。我就另开一个帖子来作为回复吧。原帖引用如下:
个批处理替换的问题
最近遇到一个批处理替换的问题,不知如何解决,特到坛子里来向大家请教。
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行进行替换,并且范围也给出了,就是不能超过两个文本的最大行数。至于文本内容,可以随便写,只要满足要求即可吧(不知说的对不,如有错还请指出)。
我的代码如下:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1-2 delims=:" %%i in ('findstr /n .* p.txt q.txt') do (
- if "%%i" equ "p.txt" ( set m=%%j ) else set n=%%j
- )
- cd.>_q.txt
- echo p.txt共%m%行,q.txt共%n%行
- set /p "p=请输入p.txt中要进行替换操作的行(格式a-b,0<a<b<%m%):"
- set /p "q=请输入q.txt中被替换的行(格式a-b,0<a<b<%n%):"
- for /f "tokens=1-4 delims=-" %%i in ("%p%-%q%") do set pa=%%i&set pb=%%j&set qa=%%k&set
-
- qb=%%l
- set flag=0
- for /f "tokens=1-2 delims=:" %%i in ('findstr /n .* q.txt') do (
- if %%i gtr %qb% set flag=0
- if !flag! equ 0 (
- if %%i gtr 0 (
- if %%i lss %qa% ( echo %%j>>_q.txt ) else if %%i leq %qb% (
- for /f "tokens=1-2 delims=:" %%k in ('findstr /n .* p.txt') do (
- if %%k geq %pa% if %%k leq %pb% echo %%l>>_q.txt&set flag=1
- )
- ) else echo %%j>>_q.txt
- )
- )
- )
- move _q.txt q.txt
- echo 替换成功完成&start q.txt
- 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 编辑 ] |