Board logo

标题: [文本处理] [已解决]批处理如何替换重复的字符 [打印本页]

作者: xudaweb    时间: 2014-5-7 16:49     标题: [已解决]批处理如何替换重复的字符

本帖最后由 xudaweb 于 2014-5-19 10:05 编辑
  1. TX13P,,,,,,,,A7,,,,,,,,,,,Serdes_Driver,,,,,,SIG,,,,,,,,,,,,,,,,----
  2. GND,,,,,,,,,,A8,,,,,,,,,,,----,,,,,,,,,,,,,,,GND,,,,,,,,,,,,,,,,----
  3. TDI,,,,,,,,,,A9,,,,,,,,,,,CMOS,,,,,,,,,,,,,,,TST,,,,,,,,,,,,,,,,1.8V
复制代码
想要把重复的多个逗号,替换成一个逗号,如何实现?
作者: CrLf    时间: 2014-5-7 17:42

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3.    set str=%%a
  4.    setlocal enabledelayedexpansion
  5.    for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
  6.    echo !str!
  7.    endlocal
  8. ))>b.txt
复制代码

作者: DAIC    时间: 2014-5-9 08:29

  1. sed "s/,\+/,/g" a.txt > b.txt
复制代码

作者: terse    时间: 2014-5-9 13:59

  1. @ECHO OFF
  2. (mshta "javascript:with(new ActiveXObject('Scripting.FileSystemObject')){GetStandardStream(1).Write(GetStandardStream(0).readall().replace(/(\,)+/g,'$1'));close()}"|more)<a.txt>b2.txt
  3. pause
复制代码

作者: hu_contact    时间: 2014-5-9 16:50

本帖最后由 hu_contact 于 2014-5-9 16:52 编辑

我搞的太复杂了。。。不过更深体会到了变量延迟的内容
  1. @echo off
  2. echo 【提示】代码用“畱”作为段落标识符,如果文中有该字,应改为文中没有的符号!
  3. for /f %%w in (test.txt) do call set all=%%all%%畱%%w
  4. :continue
  5. for /f "delims=畱 tokens=1,*" %%p in ("%all%") do (
  6. set line=%%p
  7. set all=%%q
  8. )
  9. if "%line%"=="" (call :over) else (call :lineDispose)
  10. :lineDispose
  11. :continueDispose
  12. for /f "delims=, tokens=1,*" %%i in ("%line%") do (
  13. call set newLine=%%newLine%%,%%i
  14. set line=%%j
  15. )
  16. if "%line%"=="" (echo %newLine:~1%&set newLine=&goto continue) else (goto continueDispose)
  17. pause>nul
  18. :over
  19. echo 工作已经完成,按任意键退出。&pause>nul&exit
复制代码

作者: CrLf    时间: 2014-5-9 17:30

回复 4# terse


    竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...
作者: xudaweb    时间: 2014-5-12 14:11

能简单解释一下这句么?为什么挑8,4,2,2作为判断准则?
  1. for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
复制代码
回复 2# CrLf
作者: CrLf    时间: 2014-5-12 16:59

回复 7# xudaweb


    二分法,大致思路是每次将 , 的数量减半。最后如果出现 ,,, 被替换成 ,, 的情况,用 set "str=!str:,,=,!" 可以再将其替换为 ,
作者: terse    时间: 2014-5-12 17:41

回复 7# xudaweb

假设文本里含连续62个 ","
第一次循环每8个替换成一个 "," 替换后为13个连续 ","
第二次循环每4个替换成一个 "," 替换后为4个连续 ","
第三次循环每2个替换成一个 "," 替换后为2个连续 ","
第四次循环每2个替换成一个 "," 最终为1个  ","
作者: cjy000    时间: 2014-5-13 21:18

竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...




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