Board logo

标题: [文本处理] [已解决]批处理如何批量添加标点符号? [打印本页]

作者: 每天几分    时间: 2012-9-21 03:16     标题: [已解决]批处理如何批量添加标点符号?

感谢楼下几位高手的帮助!

有些小说的段落缺少标点符号,请问要怎样批量添加句号。

要求:1、章节所在行不要添加标点符号。如 第一章 出世 (后面本来就是没有标点符号的)
         2、行尾有标点符号的不要添加句号如。……!?——”这6种符号。

下面的批处理可以做到一部分,还是不够完美,省略号、章节所在行后面还是有句号。
  1. setlocal EnableDelayedExpansion
  2. FOR /F "delims=" %%t IN (text.txt) DO (
  3. set a=%%t
  4. set b=!a:~-1!
  5. call :AAA
  6. )
  7. start "" ok.txt
  8. exit
  9. :AAA
  10. if not "%b%"=="”" (if not "%b%"=="。" (if not "%b%"=="!" (if not "%b%"=="?" echo %a%。>>ok.txt & goto :EOF)))
  11. echo %a%>>ok.txt
  12. goto :EOF
复制代码

作者: 全天占线    时间: 2012-9-21 03:45

  1. sed "/^.\{,10\}[第]*[^,。]\{1,20\}[章节]\{,40\}$/!s/[^…!?—”]$/&。/g" test.txt>ok.txt
复制代码

作者: 每天几分    时间: 2012-9-21 10:07

回复 2# 全天占线

好像不行,&。是表示添加句号的吗?没反应啊……
  1.   第一章 反复
  2. 反反复复反反复复反反复复反反复复反反复复。
  3. 反反复复反反复复?
  4. 反反复复反反复复反反复复!
  5. 反反复复反反复复反反复复反反复复反反复复……
  6. 反反复复反反复复——
  7. 反反复复反反复复反反复复反反复复”
  8. 反反复复反反复复反反复复反反复复
  9. 反反复复反反复复反反复复反反复复
  10. 反反复复反反复复反反复复反反复复
  11. 反反复复反反复复反反复复反反复复
  12. 反反复复反反复复反反复复反反复复反反复复反反复复
  13. 反反复复反反复复反反复复反反复复反反复复反反复复
  14. 反反复复反反复复反反复复
  15. 反反复复反反复复反反复复
  16. 反反复复反反复复反反复复反反复复
  17. 反反复复反反复复反反复复
复制代码

作者: 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 编辑

只是练习。。。
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("1.txt",1)
  3. Do Until File.AtEndOfStream
  4.    strLine = File.ReadLine
  5.    Set Re = New RegExp
  6.    Re.Pattern = "[。…!?—”]$|第.*章"
  7.    Re.Global = True
  8.    If Not Re.Test(strLine) Then strLine = strLine & "。"
  9.    strOut = strOut & strLine & vbCrLf
  10. Loop
  11. FSO.CreateTextFile("2.txt",True).Write strOut
  12. Msgbox "OK"
复制代码

作者: 每天几分    时间: 2012-9-21 13:19

回复 6# apang


    你们个个都是高手……有没有用记事本写的,简单明了即可……

只要告诉我怎么将第*章行后面的句号过滤掉就行了。
  1.     setlocal EnableDelayedExpansion
  2.     FOR /F "delims=" %%t IN (test.txt) DO (
  3.     set a=%%t
  4.     set b=!a:~-1!
  5.     call :AAA
  6.     )
  7.     start "" ok.txt
  8.     exit
  9.     :AAA
  10.     if not "%b%"=="”" (if not "%b%"=="。" (if not "%b%"=="!" (if not "%b%"=="?" (if not "%b%"=="…" (if not "%b%"=="
  11. —" (if not "%b%"==")" echo %a%。>>ok.txt & goto :EOF))))))
  12.     echo %a%>>ok.txt
  13.     goto :EOF
复制代码
章后面的句号俺不懂怎么解决啊,是不是要加一个if not "%b%"=="第.*?章.*?\r\n"此类的。。。。
  1.       第一章 反复。
  2.     反反复复反反复复反反复复反反复复反反复复。
  3.     反反复复反反复复?
  4.     反反复复反反复复反反复复!
  5.     反反复复反反复复反反复复反反复复反反复复……
  6.     反反复复反反复复——
  7.     反反复复反反复复反反复复反反复复”
  8.     反反复复反反复复反反复复反反复复。
  9.     反反复复反反复复反反复复反反复复。
  10.     反反复复反反复复反反复复反反复复。
  11.     反反复复反反复复反反复复反反复复。
  12.     反反复复反反复复反反复复反反复复反反复复反反复复。
  13.     反反复复反反复复反反复复反反复复反反复复反反复复。
  14.     反反复复反反复复反反复复。
  15.     反反复复反反复复反反复复。
  16.     反反复复反反复复反反复复反反复复。
  17.     反反复复反反复复反反复复。
复制代码

作者: 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

批能很好地解决啊。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (a.txt) do (
  3.   set "flag=。"
  4.   set "str=%%a"&set "str=!str: =!"&set "str=!str: =!"
  5.   if "!str:~,1!" equ "第" if "!str:章=!" neq "!str!" set "flag="
  6.   for %%b in (。 ” ? ! …… ——) do (
  7.     if "!str:~-1!" equ "%%b" set "flag="
  8.     if "!str:~-2!" equ "%%b" set "flag="
  9.   )
  10.   echo,%%a!flag!
  11. ))>$
  12. move $ a.txt
  13. start a.txt
复制代码





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