标题: [文本处理] [已解决]批处理如何替换文本中的空行为指定字符? [打印本页]
作者: enoone1 时间: 2016-3-8 20:00 标题: [已解决]批处理如何替换文本中的空行为指定字符?
test.txt
示例如下:
新增:
修改:
TABLE1
TABLE2
……
希望test.txt变更为
新增:
无
修改:
TABLE1
TABLE2
兼容处理如下情况,如源test.txt为
新增:
TABLE1
TABLE2
修改:
变更test.txt为
新增:
TABLE1
TABLE2
修改:
无
即指定关键字“新增”或“修改”的下一行如果为空行,替换空行成“无”,然后再加个空行,求各路大神指点。
作者: ivor 时间: 2016-3-8 21:44
本帖最后由 ivor 于 2016-3-8 21:48 编辑
回复 1# enoone1 - # coding:utf-8
-
- a = False
- wFile = open('new.txt', 'w')
- with open('111.txt', 'r') as file:
- for i in file:
- if a == True:
- a = False
- if i == '\n':
- print('无', file=wFile)
- if i == '新增:\n' or i == '修改:\n':
- a = True
- print(i, end='',file=wFile)
- else:
- print(i, end='',file=wFile)
- wFile.close()
复制代码
作者: happy886rr 时间: 2016-3-8 22:29
本帖最后由 happy886rr 于 2016-3-8 22:32 编辑
回复 1# enoone1
纯正批处理,不含一点脚本语言。自动识别空行、换行,即使新增下面不是空行,是空格也能智能往下识别,直到遇到修改。
附赠自动排版功能
跟你的test.txt放一个目录。直接点击批处理,自动打开修改好的new.txt- @echo off
- setlocal enabledelayedexpansion
- set n=0
- (for /f "delims=" %%a in (test.txt) do (
- set str=%%a
- set str=!str: =!
- if !n! equ 1 (
- if "%%a"=="修改:" (
- echo 无
- echo.
- echo 修改:
- set n=0
- ) else (
- if "!str!"=="" (
- set n=1
- ) else (
- set n=0
- echo.%%a
- )
- )
- ) else (
- if "%%a"=="修改:" (
- echo.
- echo 修改:
- ) else (
- if not "!str!"=="" (
- echo.%%a
- )
- )
- )
- if "%%a"=="新增:" (set n=1)
- if "%%a"=="修改:" (set n=1)
- ))>new.txt
- if !n! equ 1 (
- echo 无>>new.txt
- echo.>>new.txt
- )
- start new.txt
复制代码
作者: CrLf 时间: 2016-3-8 22:49
- 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
复制代码
作者: enoone1 时间: 2016-3-8 23:18
回复 3# happy886rr
测试通过 多种情况都兼容 厉害 这条件判断用的巧妙 高
作者: enoone1 时间: 2016-3-8 23:20
回复 4# CrLf
不明觉厉,限于自身知识面太窄,mshta没接触过,后面再学习下
作者: enoone1 时间: 2016-3-8 23:22
回复 2# ivor
虽然不是BAT,但是意思看懂了,多谢回复。
作者: WHY 时间: 2016-3-9 09:34
本帖最后由 WHY 于 2016-3-9 09:43 编辑
我也来个 "纯正的批处理"- @echo off
- setlocal enabledelayedexpansion
-
- for /f "delims=" %%i in ('type a.txt ^| findstr /n .* ^& echo;/') do (
- set "s2=%%i"
- if defined s1 (
- set "s1=!s1:*:=!"
- set "s2=!s2:*:=!"
- echo;!s1!
- if "!s2!" == "" if "!s1!" == "新增:" (
- echo;无
- ) else if "!s1!" == "修改:" (
- echo;无
- )
- )
- set "s1=%%i"
- )
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |