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

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

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

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

要求: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
复制代码
1

评分人数

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

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

TOP

回复 2# 全天占线

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

TOP

回复 3# 每天几分


    你用的sed.exe是什么版本?

TOP

回复 4# forfiles

俺没有sed.exe啊,俺的是windows。太复杂的命令不懂……发个帖俺还要用计算器计一下……

TOP

本帖最后由 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"
复制代码

TOP

回复 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.     反反复复反反复复反反复复。
复制代码

TOP

回复 7# 每天几分


    6#代码保存为vbs文件,如test.vbs,与源文件(1.txt)放在一起。双击test.vbs,看看生成的2.txt

TOP

回复 5# 每天几分


下载一个就有了
http://www.bathome.net/thread-1114-1-1.html

TOP

6#搞错了,不是"第?章",貌似应该为"第.*章"
太菜了,vbs头疼中。。。

TOP

批能很好地解决啊。。。
  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
复制代码
***共同提高***

TOP

返回列表