标题: [文本处理] 批处理怎样实现多字符串的按TXT行数的规则替换? [打印本页]
作者: w1983912 时间: 2011-5-21 23:59 标题: 批处理怎样实现多字符串的按TXT行数的规则替换?
X文本 有字符串:A101 - A200 如何把所有 A101 - A200 替换成 对应TXT文本 101行 到200行的数据呢?
以下演示一下: 把所有的A101-A110 变成A.txt文本第101-110行的数据 应该算是多字符串的替换
X.txt内容是:
T I `e_a` S('5','0','0','5','e','{c}/e','1','A101','1','1','-1','0','0','{K}','/e/{py}.html','{L}','','','','0','{c}/e','','0','A102','0','','','');
T I `e_a` S('6','0','0','6','A110','{c}/A101','1','index.html','1','1','-1','0','0','{K}','/f/{py}.html','{L}','','','','0','{c}/f','','A105','0','0','','','');
T I `e_a` S('7','0','0','7','A106','{c}/g','1','index.html','1','1','-1','0','A110','{K}','/g/{py}.html','{L}','','','','A103','{c}/g','','A108','0','0','','','');
T I `e_a` S('8','0','0','A107','h','{c}/h','1','index.html','1','A109','-1','0','0','{K}','/h/{py}.html','{L}','','','','0','{c}/h','','A104','0','0','','','');
A.txt 101-110行的内容是:
游戏
音 乐
电影
唱歌
跳舞
赛 车
汽车
酒 吧
娱乐
比 赛
得到新的bbb.txt: 所有的"A101" 变成 "游戏" 其他的都不变化
T I `e_a` S('5','0','0','5','e','{c}/e','1','游戏','1','1','-1','0','0','{K}','/e/{py}.html','{L}','','','','0','{c}/e','','0','音 乐','0','','','');
T I `e_a` S('6','0','0','6','比 赛','{c}/游戏','1','index.html','1','1','-1','0','0','{K}','/f/{py}.html','{L}','','','','0','{c}/f','','跳舞','0','0','','','');
T I `e_a` S('7','0','0','7','赛 车','{c}/g','1','index.html','1','1','-1','0','比 赛','{K}','/g/{py}.html','{L}','','','','电影','{c}/g','','酒 吧','0','0','','','');
T I `e_a` S('8','0','0','汽车','h','{c}/h','1','index.html','1','娱乐','-1','0','0','{K}','/h/{py}.html','{L}','','','','0','{c}/h','','唱歌','0','0','','','');
刚刚是10个字符串的文本替换 供演示用 现在我需要替换的那个文本是 100个变量
100个变量 A101--A200 换成第101行--第200行对应的数据
如果更多的变量 能否设定一个范围呢? 比如A101--A400 换成第101行--第400行对应的数据
希望大家帮帮忙 谢谢了
以下 附上一个 单字符串的替换 想要的功能 改来改去还是不行。。。。- @echo off&setlocal enabledelayedexpansion
- (for /f %%a in (a.txt) do (
- for /f "delims=" %%b in (1.txt) do set "str=%%b"&echo !str:胃癌=%%a!
- ))>>111.txt
复制代码
作者: techon 时间: 2011-5-22 00:28
!str:胃癌=%%a!
变量替换用反了
如替换字符串str 中的 A101 为 %%A
set str=!str:A101=%%A!
用批处理做比较复杂的字符串替换还是有点麻烦的 不如用word 的替换功能方便 如果你会用word的宏 就更方便了
作者: w1983912 时间: 2011-5-22 00:29
本帖最后由 w1983912 于 2011-5-22 00:45 编辑
谢谢楼上朋友 代码改后没有变化 并不能把字符串用其他TXT的指定行的数据覆盖
我要的是多个字符串替换并且是用TXT的指定行覆盖 不是单行的全部覆盖。。。。。。。。。。
如果可以单字符串(所有相同的) 用指定txt的指定行数据覆盖也可以啊 , 100个替换就用100个命令就可以了
深夜继续求助
作者: batman 时间: 2011-5-22 00:54
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%a in ('findstr /n .* a.txt') do set "_%%a=%%b"
- (for /f "tokens=1* delims=A" %%a in (x.txt) do (
- set "str=%%b"&set "a=!str:~,3!"
- for %%c in (!a!) do echo %%a!_%%c!!str:~3!
- ))>bbb.txt
- start bbb.txt
复制代码
作者: techon 时间: 2011-5-22 00:56
。。。主要你这不是一一对应的关系 每行里不一定有几个要替换的 比如第一行
T I `e_a` S('5','0','0','5','e','{c}/e','1','A101','1','1','-1','0','0','{K}','/e/{py}.html','{L}','','','','0','{c}/e','','0','A102','0','','','');
有A101 又有A102 。。。处理起来稍微麻烦点 ,要是不讲究效率的话就给你看看
作者: batman 时间: 2011-5-22 01:19
本帖最后由 batman 于 2011-5-22 01:24 编辑
开始看错题意,下面代码只考虑了一行最多要替换4个的情况,如不够请自行修改:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=:" %%a in ('findstr /n .* a.txt') do set "_%%a=%%b"
- (for /f "tokens=1-5 delims=A" %%a in (x.txt) do (
- set "var="
- call :lp "%%b" "%%c" "%%d" "%%e"
- echo %%a!var!
- ))>bbb.txt
- start bbb.txt&goto :eof
- :lp
- set "str=%~1"&set "a=!str:~,3!"
- for %%a in (!a!) do set "var=!var!!_%%a!!str:~3!"
- if "%~2" neq "" shift&goto lp
复制代码
作者: w1983912 时间: 2011-5-22 01:40
谢谢 实现了
一行换4个以上重复的 倒 请问 不够的话 修改哪呢??
作者: batman 时间: 2011-5-22 01:43
7# w1983912
1 tokens=1-5
2 call :lp "%%b" "%%c" "%%d" "%%e"
作者: batman 时间: 2011-5-22 02:19
本帖最后由 batman 于 2011-5-22 02:39 编辑
vbs版(好麻烦):- Dim a(10000)
- Set fso = CreateObject("scripting.filesystemobject")
- fso.OpenTextFile("a.txt", 8, 1).WriteLine vbcrlr & "end"
- Set otext = fso.OpenTextFile("a.txt", 1, 1)
- Do Until a(i) = "end"
- i = i + 1
- a(i) = otext.ReadLine()
- Loop
- otext.Close
- Set otext = fso.OpenTextFile("x.txt", 1, 1)
- vbstr = otext.ReadAll()
- For i = 0 To UBound(Split(vbstr, "A"))
- If InStr("123456789", Left(Split(vbstr, "A")(i), 1)) Then
- vbvar = vbvar & a(Left(Split(vbstr, "A")(i), 3)) & Right(Split(vbstr, "A")(i), Len(Split(vbstr, "A")(i))-3)
- Else
- vbvar = vbvar & Split(vbstr, "A")(i)
- End If
- Next
- otext.Close
- fso.OpenTextFile("bbb.txt", 2 ,1).Write vbvar
- Set fso = Nothing
复制代码
作者: w1983912 时间: 2011-5-22 03:01
谢谢 可以了
刚刚我自己也用php代码也实现了。。。多文本中的多字符串 用指定的多txt的指定行 替换 显示并写入
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |