Board logo

标题: [文本处理] 批处理如何在文本里的数字两边/两端添加特定字符串 [打印本页]

作者: lzwudi    时间: 2008-10-13 19:02     标题: 批处理如何在文本里的数字两边/两端添加特定字符串

本帖最后由 pcl_test 于 2016-9-29 23:07 编辑

把文本中的数字前面加上两个空格和代码
不知道能不能用纯批处理实现,都用到什么命令?
请把代码贴出来后做详细解答,谢谢!!
有一个文本是这样的:
  1. 知道的:
  2. 我的123
  3. 你的456
  4. 他的789
  5. other000
  6. 不知道的:
  7. 不知道是我的321
  8. 不知道是你的654
  9. 不知道是他的987
  10. other000
复制代码
目的变成这样:
  1. 知道的:
  2. 我的 [url=http://111.com]123[/url]
  3. 你的 [url=http://222.com]456[/url]
  4. 他的 [url=http://333.com]789[/url]
  5. other [url=http://888.com]000[/url]
  6. 不知道的:
  7. 不知道是我的 [url=http://444.com]321[/url]
  8. 不知道是你的 [url=http://555.com]654[/url]
  9. 不知道是他的 [url=http://666.com]987[/url]
  10. other [url=http://888.com]000[/url]
复制代码
[ 本帖最后由 lzwudi 于 2008-10-13 19:03 编辑 ]
作者: pusofalse    时间: 2008-10-13 19:31

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.       set "var=%%a"
  4.       if "!var:~-4!" neq "知道的:" (
  5.           if "!var:~,5!" neq "other" (
  6.               set/a n+=111
  7.               set "var=!var:~,-3! [url=http://!n!.com]!var:~-3![/url]"
  8.               ) else (
  9.               set "e=e"
  10.               set "var=!var:~,-3! [url=http://888.com]!var:~-3![/url]"
  11.       ))
  12.       echo !var!
  13.       if defined e set "e="&echo.
  14. )
  15. pause>nul
复制代码

作者: Batcher    时间: 2008-10-13 19:45

这类问题,最好把真实数据贴出来,不要自己编数据。
否则别人帮你写的代码可能根本无法解决实际问题,浪费彼此的时间。
作者: lzwudi    时间: 2008-10-13 19:50

三楼说的有道理,我正是这个意思,
但是写真实数据实在是有顾及的,请原谅!!!
请再次帮忙,谢谢!
  1. 姓王的:
  2. 王老大147258369
  3. 王老二258369147
  4. 王老三369147258
  5. 姓李的:
  6. 李老大123456789
  7. 李老二456789123
  8. 李老三789123456
  9. 姓赵的:
  10. 赵老大321654987
  11. 赵老二654987321
  12. 赵老三987321654
  13. 姓张的:
  14. 张老大741852963
  15. 张老二852963741
  16. 张老三963741852
复制代码

改成这样:
  1. 姓王的:
  2. 王老大  [url=http://147258369.qzone.qq.com]147258369[/url]
  3. 王老二  [url=http://258369147.qzone.qq.com]258369147[/url]
  4. 王老三  [url=http://369147258.qzone.qq.com]369147258[/url]
  5. 姓李的:
  6. 李老大  [url=http://123456789.qzone.qq.com]123456789[/url]
  7. 李老二  [url=http://456789123.qzone.qq.com]456789123[/url]
  8. 李老三  [url=http://789123456.qzone.qq.com]789123456[/url]
  9. 姓赵的:
  10. 赵老大  [url=http://321654987.qzone.qq.com]321654987[/url]
  11. 赵老二  [url=http://654987321.qzone.qq.com]654987321[/url]
  12. 赵老三  [url=http://987321654.qzone.qq.com]987321654[/url]
  13. 姓张的:
  14. 张老大  [url=http://741852963.qzone.qq.com]741852963[/url]
  15. 张老二  [url=http://852963741.qzone.qq.com]852963741[/url]
  16. 张老三  [url=http://963741852.qzone.qq.com]963741852[/url]
复制代码

[ 本帖最后由 lzwudi 于 2008-10-13 19:53 编辑 ]
作者: pusofalse    时间: 2008-10-13 20:03

  1. @echo off
  2. type a.txt|wfr /exp /r:"\d+" /t:"   [url=http://\0.qzone.qq.com]\0[/url]">tmp.txt
  3. start tmp.txt
复制代码
wfr 下载:http://bbs.bathome.net/thread-1909-1-2.html

[ 本帖最后由 pusofalse 于 2008-10-13 20:09 编辑 ]
作者: 随风    时间: 2008-10-13 20:23

:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo. 1>nul 3>2.txt
  3. for /f "delims=" %%i in (a.txt) do (
  4.    set "str=%%i"
  5.    for /l %%j in (0 1 9) do set str=!str:%%j= %%j!
  6.    if "!str!"=="%%i" (echo %%i) else (
  7.       for /f "tokens=1* delims= " %%a in ("!str!") do (
  8.          set "num=%%b"
  9.          echo %%a [url=http://!num: =!.qzone.qq.com]!num: =![/url]
  10. )))
  11. 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内容只要是 汉字+数字的 格式就可以,不管汉字部分有没有空格都可以。
:
  1. @echo off&setlocal enabledelayedexpansion
  2. echo. 1>nul 3>2.txt
  3. for /f "delims=" %%i in (a.txt) do (
  4.    set var=%%i&set "str=%%i"
  5.    for /l %%j in (0 1 9) do set str=!str:%%j=!
  6.    if "!str!"=="%%i" (echo %%i) else (
  7.       for /f "delims=" %%a in ("!str!") do set "num=%%~nxa"
  8.       call set sun=%%var:!num!=%%
  9.       for /f "tokens=*" %%a in ("!sun!") do (
  10.          echo !num! [url=http://%%a.qzone.qq.com]%%a[/url]
  11.          
  12. )))
  13. start notepad "2.txt"
复制代码
a.txt 内容
  1. 姓 王的:
  2. 王 老大147258369
  3. 王 老 二             258369147
  4. 王老三369147258
  5. 姓 李的:
  6. 李老 大                123456789
  7. 李老二456789123
  8. 李     老  三789123456
  9. 姓 赵 的:
  10. 赵    老  大321654987
  11. 赵 老  二654987321
  12. 赵 老 三987321654
  13. 姓 张的:
  14. 张 老   大741852963
  15. 张 老  二 852963741
  16. 张 老三     963741852
复制代码

作者: namejm    时间: 2008-10-14 12:50

  其实,如果姓名中含有空格的时候,随风在6楼的代码仍然可以使用,只是要把数字前的空格换为其他比较特殊的字符就可以了,比如下划线之类。
作者: pusofalse    时间: 2008-10-14 14:04

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.      for /f "delims=123456789" %%i in ("%%~a") do (
  4.           if "%%i" neq "%%a" (
  5.              set "var=%%a"&set "str=%%i                "
  6.              set "var=!var:%%i=!"
  7.              echo !str:~,10!   [url=http://!var!.qzone.qq.com]!var![/url]
  8.           ) else (
  9.           echo %%a
  10. )))
  11. pause
复制代码

作者: zqz0012005    时间: 2008-10-14 15:48     标题: 来个vbs吧

因为论坛原因,用花括号代替了方括号,复制代码后自己改回
  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. Set objFile = fso.OpenTextFile("a.txt")
  3. Do While objFile.AtEndOfStream <> True
  4.     s = s & RegExpReplace(objFile.ReadLine) & vbCrLf
  5. Loop
  6. objFile.Close
  7. fso.OpenTextFile("a-new.txt",2,true).Write s
  8. Function RegExpReplace(strng)
  9.     Set regEx = New RegExp
  10.     regEx.Pattern = "[0-9]{6,9}"  '匹配长度为6到9位之间的数字字串,因为QQ号码只有6~9位
  11.     Set Matches = regEx.Execute(strng)
  12.     For Each Match in Matches
  13.         RetStr = Match.Value
  14.     Next
  15.     RetStr = regEx.replace(strng,"  {url=http://" & RetStr & ".com}" & RetStr & "{/url}")
  16. RegExpReplace = RetStr
  17. End Function
复制代码

[ 本帖最后由 zqz0012005 于 2008-10-14 15:51 编辑 ]
作者: terse    时间: 2008-10-14 19:35

汉字+数字 这样也一样
  1. @echo off&setlocal enabledelayedexpansion
  2. echo. 1>nul 3>b.txt
  3. for /f "delims=" %%i in (a.txt) do (
  4.     set var=%%i&set "str=%%i"
  5.     for /l %%j in (0 1 9) do set str=!str:%%j=!
  6.     if "!str!"=="%%i" (echo %%i) else (
  7.     call set num=%%var:!str!=%%
  8.     echo !str! [url=http://!num!.qzone.qq.com]!num![/url]   
  9. ))
  10. start notepad "b.txt"
复制代码

作者: lzwudi    时间: 2008-10-15 14:15

很高兴高手们都能回答,但似乎没有帮助信息哦,让我们这些初学者很难接受啊~~~
只有自己慢慢学习了!!!
作者: Batcher    时间: 2008-10-15 14:18

哪句不懂就问哪句,还怕没有人回答么?
如果全部不懂,那还是看教程去吧^_^




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2