标题: [文本处理] [已解决]批处理如何批量添加标点符号? [打印本页]
作者: 每天几分 时间: 2012-9-21 03:16 标题: [已解决]批处理如何批量添加标点符号?
感谢楼下几位高手的帮助!
有些小说的段落缺少标点符号,请问要怎样批量添加句号。
要求:1、章节所在行不要添加标点符号。如 第一章 出世 (后面本来就是没有标点符号的)
2、行尾有标点符号的不要添加句号如。……!?——”这6种符号。
下面的批处理可以做到一部分,还是不够完美,省略号、章节所在行后面还是有句号。- setlocal EnableDelayedExpansion
- FOR /F "delims=" %%t IN (text.txt) DO (
- set a=%%t
- set b=!a:~-1!
- call :AAA
- )
- start "" ok.txt
- exit
-
- :AAA
- if not "%b%"=="”" (if not "%b%"=="。" (if not "%b%"=="!" (if not "%b%"=="?" echo %a%。>>ok.txt & goto :EOF)))
- echo %a%>>ok.txt
- goto :EOF
复制代码
作者: 全天占线 时间: 2012-9-21 03:45
- sed "/^.\{,10\}[第]*[^,。]\{1,20\}[章节]\{,40\}$/!s/[^…!?—”]$/&。/g" test.txt>ok.txt
复制代码
作者: 每天几分 时间: 2012-9-21 10:07
回复 2# 全天占线
好像不行,&。是表示添加句号的吗?没反应啊……- 第一章 反复
- 反反复复反反复复反反复复反反复复反反复复。
- 反反复复反反复复?
- 反反复复反反复复反反复复!
- 反反复复反反复复反反复复反反复复反反复复……
- 反反复复反反复复——
- 反反复复反反复复反反复复反反复复”
- 反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复
- 反反复复反反复复反反复复
- 反反复复反反复复反反复复反反复复
- 反反复复反反复复反反复复
复制代码
作者: forfiles 时间: 2012-9-21 10:47
回复 3# 每天几分
你用的sed.exe是什么版本?
作者: 每天几分 时间: 2012-9-21 12:15
回复 4# forfiles
俺没有sed.exe啊,俺的是windows。太复杂的命令不懂……发个帖俺还要用计算器计一下……
作者: apang 时间: 2012-9-21 12:37
本帖最后由 apang 于 2012-9-22 08:39 编辑
只是练习。。。- Set FSO = CreateObject("Scripting.FileSystemObject")
- Set File = FSO.OpenTextFile("1.txt",1)
- Do Until File.AtEndOfStream
- strLine = File.ReadLine
- Set Re = New RegExp
- Re.Pattern = "[。…!?—”]$|第.*章"
- Re.Global = True
- If Not Re.Test(strLine) Then strLine = strLine & "。"
- strOut = strOut & strLine & vbCrLf
- Loop
- FSO.CreateTextFile("2.txt",True).Write strOut
- Msgbox "OK"
复制代码
作者: 每天几分 时间: 2012-9-21 13:19
回复 6# apang
你们个个都是高手……有没有用记事本写的,简单明了即可……
只要告诉我怎么将第*章行后面的句号过滤掉就行了。- setlocal EnableDelayedExpansion
- FOR /F "delims=" %%t IN (test.txt) DO (
- set a=%%t
- set b=!a:~-1!
- call :AAA
- )
- start "" ok.txt
- exit
-
- :AAA
- if not "%b%"=="”" (if not "%b%"=="。" (if not "%b%"=="!" (if not "%b%"=="?" (if not "%b%"=="…" (if not "%b%"=="
-
- —" (if not "%b%"==")" echo %a%。>>ok.txt & goto :EOF))))))
- echo %a%>>ok.txt
- goto :EOF
复制代码
章后面的句号俺不懂怎么解决啊,是不是要加一个if not "%b%"=="第.*?章.*?\r\n"此类的。。。。- 第一章 反复。
- 反反复复反反复复反反复复反反复复反反复复。
- 反反复复反反复复?
- 反反复复反反复复反反复复!
- 反反复复反反复复反反复复反反复复反反复复……
- 反反复复反反复复——
- 反反复复反反复复反反复复反反复复”
- 反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复。
- 反反复复反反复复反反复复。
- 反反复复反反复复反反复复反反复复。
- 反反复复反反复复反反复复。
复制代码
作者: apang 时间: 2012-9-21 13:50
回复 7# 每天几分
6#代码保存为vbs文件,如test.vbs,与源文件(1.txt)放在一起。双击test.vbs,看看生成的2.txt
作者: forfiles 时间: 2012-9-21 21:55
回复 5# 每天几分
下载一个就有了
http://www.bathome.net/thread-1114-1-1.html
作者: apang 时间: 2012-9-22 09:00
6#搞错了,不是"第?章",貌似应该为"第.*章"
太菜了,vbs头疼中。。。
作者: batman 时间: 2012-9-28 00:10
批能很好地解决啊。。。- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in (a.txt) do (
- set "flag=。"
- set "str=%%a"&set "str=!str: =!"&set "str=!str: =!"
- if "!str:~,1!" equ "第" if "!str:章=!" neq "!str!" set "flag="
- for %%b in (。 ” ? ! …… ——) do (
- if "!str:~-1!" equ "%%b" set "flag="
- if "!str:~-2!" equ "%%b" set "flag="
- )
- echo,%%a!flag!
- ))>$
- move $ a.txt
- start a.txt
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |