[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理如何替换文本中的空行为指定字符?

test.txt
示例如下:
新增:

修改:
TABLE1
TABLE2
……

希望test.txt变更为
新增:


修改:
TABLE1
TABLE2

兼容处理如下情况,如源test.txt为
新增:
TABLE1
TABLE2

修改:

变更test.txt为
新增:
TABLE1
TABLE2

修改:


指定关键字“新增”或“修改”的下一行如果为空行,替换空行成“无”,然后再加个空行,求各路大神指点。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 ivor 于 2016-3-8 21:48 编辑

回复 1# enoone1
  1. # coding:utf-8
  2. a = False
  3. wFile = open('new.txt', 'w')
  4. with open('111.txt', 'r') as file:
  5.     for i in file:
  6.         if a == True:
  7.             a = False
  8.             if i == '\n':
  9.                 print('无', file=wFile)
  10.         if i == '新增:\n' or i == '修改:\n':
  11.             a = True
  12.             print(i, end='',file=wFile)
  13.         else:
  14.             print(i, end='',file=wFile)
  15. wFile.close()
复制代码
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

本帖最后由 happy886rr 于 2016-3-8 22:32 编辑

回复 1# enoone1

纯正批处理,不含一点脚本语言。自动识别空行、换行,即使新增下面不是空行,是空格也能智能往下识别,直到遇到修改。
附赠自动排版功能
跟你的test.txt放一个目录。直接点击批处理,自动打开修改好的new.txt
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set n=0
  4. (for /f "delims=" %%a in (test.txt) do (
  5. set str=%%a
  6. set str=!str: =!
  7. if !n! equ 1 (
  8. if "%%a"=="修改:" (
  9. echo 无
  10. echo.
  11. echo 修改:
  12. set n=0
  13. ) else (
  14. if "!str!"=="" (
  15. set n=1
  16. ) else (
  17. set n=0
  18. echo.%%a
  19. )
  20. )
  21. ) else (
  22. if "%%a"=="修改:" (
  23. echo.
  24. echo 修改:
  25. ) else (
  26. if not "!str!"=="" (
  27. echo.%%a
  28. )
  29. )
  30. )
  31. if "%%a"=="新增:" (set n=1)
  32. if "%%a"=="修改:" (set n=1)
  33. ))>new.txt
  34. if !n! equ 1 (
  35. echo 无>>new.txt
  36. echo.>>new.txt
  37. )
  38. start new.txt
复制代码

TOP

  1. mshta http://bathome.net/s/hta/ "type(""test.txt"").replace(/(新增:)(?:\r?\n){2,}|(修改:)(\r?\n)*$/g,'$1$2\r\n空\r\n\r\n')"|more
复制代码

TOP

回复 3# happy886rr


测试通过 多种情况都兼容 厉害  这条件判断用的巧妙 高

TOP

回复 4# CrLf


    不明觉厉,限于自身知识面太窄,mshta没接触过,后面再学习下

TOP

回复 2# ivor


    虽然不是BAT,但是意思看懂了,多谢回复。

TOP

本帖最后由 WHY 于 2016-3-9 09:43 编辑

我也来个 "纯正的批处理"
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('type a.txt ^| findstr /n .* ^& echo;/') do (
  4.     set "s2=%%i"
  5.     if defined s1 (
  6.         set "s1=!s1:*:=!"
  7.         set "s2=!s2:*:=!"
  8.         echo;!s1!
  9.         if "!s2!" == "" if "!s1!" == "新增:" (
  10.             echo;无
  11.         ) else if "!s1!" == "修改:" (
  12.             echo;无
  13.         )
  14.     )
  15.     set "s1=%%i"
  16. )
  17. pause
复制代码

TOP

返回列表