标题: [文本处理] [已解决]批处理如何替换重复的字符 [打印本页]
作者: xudaweb 时间: 2014-5-7 16:49 标题: [已解决]批处理如何替换重复的字符
本帖最后由 xudaweb 于 2014-5-19 10:05 编辑
- TX13P,,,,,,,,A7,,,,,,,,,,,Serdes_Driver,,,,,,SIG,,,,,,,,,,,,,,,,----
- GND,,,,,,,,,,A8,,,,,,,,,,,----,,,,,,,,,,,,,,,GND,,,,,,,,,,,,,,,,----
- TDI,,,,,,,,,,A9,,,,,,,,,,,CMOS,,,,,,,,,,,,,,,TST,,,,,,,,,,,,,,,,1.8V
复制代码
想要把重复的多个逗号,替换成一个逗号,如何实现?
作者: CrLf 时间: 2014-5-7 17:42
- @echo off
- (for /f "delims=" %%a in (a.txt) do (
- set str=%%a
- setlocal enabledelayedexpansion
- for %%b in (",,,,,,,," ",,,," ",," ",,") do set "str=!str:%%~b=,!"
- echo !str!
- endlocal
- ))>b.txt
复制代码
作者: DAIC 时间: 2014-5-9 08:29
- sed "s/,\+/,/g" a.txt > b.txt
复制代码
作者: terse 时间: 2014-5-9 13:59
- @ECHO OFF
- (mshta "javascript:with(new ActiveXObject('Scripting.FileSystemObject')){GetStandardStream(1).Write(GetStandardStream(0).readall().replace(/(\,)+/g,'$1'));close()}"|more)<a.txt>b2.txt
- pause
复制代码
作者: hu_contact 时间: 2014-5-9 16:50
本帖最后由 hu_contact 于 2014-5-9 16:52 编辑
我搞的太复杂了。。。不过更深体会到了变量延迟的内容- @echo off
- echo 【提示】代码用“畱”作为段落标识符,如果文中有该字,应改为文中没有的符号!
- for /f %%w in (test.txt) do call set all=%%all%%畱%%w
- :continue
- for /f "delims=畱 tokens=1,*" %%p in ("%all%") do (
- set line=%%p
- set all=%%q
- )
- if "%line%"=="" (call :over) else (call :lineDispose)
-
- :lineDispose
- :continueDispose
- for /f "delims=, tokens=1,*" %%i in ("%line%") do (
- call set newLine=%%newLine%%,%%i
- set line=%%j
- )
- if "%line%"=="" (echo %newLine:~1%&set newLine=&goto continue) else (goto continueDispose)
- pause>nul
-
- :over
- echo 工作已经完成,按任意键退出。&pause>nul&exit
复制代码
作者: CrLf 时间: 2014-5-9 17:30
回复 4# terse
竟然还有这好东西 GetStandardStream(),看来太小看 fso 了...
作者: xudaweb 时间: 2014-5-12 14:11
能简单解释一下这句么?为什么挑8,4,2,2作为判断准则?- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |