标题: [文本处理] 批处理如何在文本里的数字两边/两端添加特定字符串 [打印本页]
作者: lzwudi 时间: 2008-10-13 19:02 标题: 批处理如何在文本里的数字两边/两端添加特定字符串
本帖最后由 pcl_test 于 2016-9-29 23:07 编辑
把文本中的数字前面加上两个空格和代码
不知道能不能用纯批处理实现,都用到什么命令?
请把代码贴出来后做详细解答,谢谢!!
有一个文本是这样的:- 知道的:
- 我的123
- 你的456
- 他的789
- other000
-
- 不知道的:
- 不知道是我的321
- 不知道是你的654
- 不知道是他的987
- other000
复制代码
目的变成这样:- 知道的:
- 我的 [url=http://111.com]123[/url]
- 你的 [url=http://222.com]456[/url]
- 他的 [url=http://333.com]789[/url]
- other [url=http://888.com]000[/url]
-
- 不知道的:
- 不知道是我的 [url=http://444.com]321[/url]
- 不知道是你的 [url=http://555.com]654[/url]
- 不知道是他的 [url=http://666.com]987[/url]
- other [url=http://888.com]000[/url]
复制代码
[ 本帖最后由 lzwudi 于 2008-10-13 19:03 编辑 ]
作者: pusofalse 时间: 2008-10-13 19:31
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- set "var=%%a"
- if "!var:~-4!" neq "知道的:" (
- if "!var:~,5!" neq "other" (
- set/a n+=111
- set "var=!var:~,-3! [url=http://!n!.com]!var:~-3![/url]"
- ) else (
- set "e=e"
- set "var=!var:~,-3! [url=http://888.com]!var:~-3![/url]"
- ))
- echo !var!
- if defined e set "e="&echo.
- )
- pause>nul
复制代码
作者: Batcher 时间: 2008-10-13 19:45
这类问题,最好把真实数据贴出来,不要自己编数据。
否则别人帮你写的代码可能根本无法解决实际问题,浪费彼此的时间。
作者: lzwudi 时间: 2008-10-13 19:50
三楼说的有道理,我正是这个意思,
但是写真实数据实在是有顾及的,请原谅!!!
请再次帮忙,谢谢!
- 姓王的:
- 王老大147258369
- 王老二258369147
- 王老三369147258
- 姓李的:
- 李老大123456789
- 李老二456789123
- 李老三789123456
- 姓赵的:
- 赵老大321654987
- 赵老二654987321
- 赵老三987321654
- 姓张的:
- 张老大741852963
- 张老二852963741
- 张老三963741852
复制代码
改成这样:
- 姓王的:
- 王老大 [url=http://147258369.qzone.qq.com]147258369[/url]
- 王老二 [url=http://258369147.qzone.qq.com]258369147[/url]
- 王老三 [url=http://369147258.qzone.qq.com]369147258[/url]
- 姓李的:
- 李老大 [url=http://123456789.qzone.qq.com]123456789[/url]
- 李老二 [url=http://456789123.qzone.qq.com]456789123[/url]
- 李老三 [url=http://789123456.qzone.qq.com]789123456[/url]
- 姓赵的:
- 赵老大 [url=http://321654987.qzone.qq.com]321654987[/url]
- 赵老二 [url=http://654987321.qzone.qq.com]654987321[/url]
- 赵老三 [url=http://987321654.qzone.qq.com]987321654[/url]
- 姓张的:
- 张老大 [url=http://741852963.qzone.qq.com]741852963[/url]
- 张老二 [url=http://852963741.qzone.qq.com]852963741[/url]
- 张老三 [url=http://963741852.qzone.qq.com]963741852[/url]
复制代码
[ 本帖最后由 lzwudi 于 2008-10-13 19:53 编辑 ]
作者: pusofalse 时间: 2008-10-13 20:03
- @echo off
- type a.txt|wfr /exp /r:"\d+" /t:" [url=http://\0.qzone.qq.com]\0[/url]">tmp.txt
- start tmp.txt
复制代码
wfr 下载:http://bbs.bathome.net/thread-1909-1-2.html
[ 本帖最后由 pusofalse 于 2008-10-13 20:09 编辑 ]
作者: 随风 时间: 2008-10-13 20:23
:- @echo off&setlocal enabledelayedexpansion
- echo. 1>nul 3>2.txt
- for /f "delims=" %%i in (a.txt) do (
- set "str=%%i"
- for /l %%j in (0 1 9) do set str=!str:%%j= %%j!
- if "!str!"=="%%i" (echo %%i) else (
- for /f "tokens=1* delims= " %%a in ("!str!") do (
- set "num=%%b"
- echo %%a [url=http://!num: =!.qzone.qq.com]!num: =![/url]
- )))
- start notepad "2.txt"
复制代码
[ 本帖最后由 随风 于 2008-10-13 20:33 编辑 ]
作者: lzwudi 时间: 2008-10-13 21:17
随风兄就是厉害
我相信pusofalse也是可以写出来地
不过已经帮我写了一次,很累哦!而且浪费了
所以是不是草草了事了?
再次感谢,只是没有学习到什么,因为看不懂哦
慢慢来吧~~~~
作者: namejm 时间: 2008-10-13 21:38
姓名有3个中文的,也有两个中文的,甚至是四个、五个中文,这些姓名之间有没有空格?是纯中文吗?
作者: youxi01 时间: 2008-10-13 21:55
随风的除了空格,其它因素似乎不影响啊(中文名字出现空格时LZ似乎没有给出样本来)
它是根据数字来分割的
作者: namejm 时间: 2008-10-13 22:10
随风是先把所有的数字前面都加上空格,从而把数字和中文分离,最后删除所有的空格,还原数字;若中文名中不存在空格,这个代码无疑是完美的;如果姓名中有空格的话,就会出错。
作者: 随风 时间: 2008-10-14 01:09
:加了下工,a.txt内容只要是 汉字+数字的 格式就可以,不管汉字部分有没有空格都可以。
:- @echo off&setlocal enabledelayedexpansion
- echo. 1>nul 3>2.txt
- for /f "delims=" %%i in (a.txt) do (
- set var=%%i&set "str=%%i"
- for /l %%j in (0 1 9) do set str=!str:%%j=!
- if "!str!"=="%%i" (echo %%i) else (
- for /f "delims=" %%a in ("!str!") do set "num=%%~nxa"
- call set sun=%%var:!num!=%%
- for /f "tokens=*" %%a in ("!sun!") do (
- echo !num! [url=http://%%a.qzone.qq.com]%%a[/url]
-
- )))
- start notepad "2.txt"
复制代码
a.txt 内容- 姓 王的:
- 王 老大147258369
- 王 老 二 258369147
- 王老三369147258
- 姓 李的:
- 李老 大 123456789
- 李老二456789123
- 李 老 三789123456
- 姓 赵 的:
- 赵 老 大321654987
- 赵 老 二654987321
- 赵 老 三987321654
- 姓 张的:
- 张 老 大741852963
- 张 老 二 852963741
- 张 老三 963741852
复制代码
作者: namejm 时间: 2008-10-14 12:50
其实,如果姓名中含有空格的时候,随风在6楼的代码仍然可以使用,只是要把数字前的空格换为其他比较特殊的字符就可以了,比如下划线之类。
作者: pusofalse 时间: 2008-10-14 14:04
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- for /f "delims=123456789" %%i in ("%%~a") do (
- if "%%i" neq "%%a" (
- set "var=%%a"&set "str=%%i "
- set "var=!var:%%i=!"
- echo !str:~,10! [url=http://!var!.qzone.qq.com]!var![/url]
- ) else (
- echo %%a
- )))
- pause
复制代码
作者: zqz0012005 时间: 2008-10-14 15:48 标题: 来个vbs吧
因为论坛原因,用花括号代替了方括号,复制代码后自己改回- Set fso = CreateObject("Scripting.FileSystemObject")
- Set objFile = fso.OpenTextFile("a.txt")
- Do While objFile.AtEndOfStream <> True
- s = s & RegExpReplace(objFile.ReadLine) & vbCrLf
- Loop
- objFile.Close
- fso.OpenTextFile("a-new.txt",2,true).Write s
-
- Function RegExpReplace(strng)
- Set regEx = New RegExp
- regEx.Pattern = "[0-9]{6,9}" '匹配长度为6到9位之间的数字字串,因为QQ号码只有6~9位
- Set Matches = regEx.Execute(strng)
- For Each Match in Matches
- RetStr = Match.Value
- Next
- RetStr = regEx.replace(strng," {url=http://" & RetStr & ".com}" & RetStr & "{/url}")
- RegExpReplace = RetStr
- End Function
复制代码
[ 本帖最后由 zqz0012005 于 2008-10-14 15:51 编辑 ]
作者: terse 时间: 2008-10-14 19:35
汉字+数字 这样也一样- @echo off&setlocal enabledelayedexpansion
- echo. 1>nul 3>b.txt
- for /f "delims=" %%i in (a.txt) do (
- set var=%%i&set "str=%%i"
- for /l %%j in (0 1 9) do set str=!str:%%j=!
- if "!str!"=="%%i" (echo %%i) else (
- call set num=%%var:!str!=%%
- echo !str! [url=http://!num!.qzone.qq.com]!num![/url]
- ))
- start notepad "b.txt"
复制代码
作者: lzwudi 时间: 2008-10-15 14:15
很高兴高手们都能回答,但似乎没有帮助信息哦,让我们这些初学者很难接受啊~~~
只有自己慢慢学习了!!!
作者: Batcher 时间: 2008-10-15 14:18
哪句不懂就问哪句,还怕没有人回答么?
如果全部不懂,那还是看教程去吧^_^
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |