Board logo

标题: [文本处理] [求助]批处理排列很规则的文本,按条件去除部分内容 [打印本页]

作者: 灯塔彭于晏    时间: 2021-2-3 09:54     标题: [求助]批处理排列很规则的文本,按条件去除部分内容

祝您新年快乐,牛年大吉。想请您帮忙解决2个小需求。

现有文本tt.txt,内容如下:(排列很规则,每一组文字中间空2行。但每组文字的行数不一,3 4 5个都有!)
  1. 铅笔画,
  2. 迪士尼,
  3. 手绘,
  4. 黑白,
  5. 血源诅咒,
  6. 雨,
  7. 伞,
  8. 女孩,
  9. 夜景,
  10. 爱德蒙·唐泰斯,
  11. Fate/GrandOrder,
  12. FGO,
  13. 香烟,
  14. 岩窟王,
  15. Fate/GrandOrder,
  16. FGO,
  17. 迦尔纳,
  18. 水彩,
  19. 女孩,
  20. 手绘,
  21. 苏菲·诺伊恩缪拉,
  22. 索菲的工作室,
  23. 炼金,
  24. 卷发,
  25. 少女,
  26. 美女,
  27. 长发,
  28. 波浪,
复制代码
最终需求是: 每组文字中,不管有几行,都只保留一行。
保留的这一行,不能是存在特殊符号的那一行。比如tt.txt中,有的文字组中,存在符号 · 和 / 。存在符号的话,就不能保留这一行的文字。 英文逗号除外,毕竟是结尾的分隔符号,要保留。

效果:
  1. 铅笔画
  2. FGO
  3. FGO
  4. 水彩
  5. 索菲的工作室
  6. 卷发
复制代码

作者: qixiaobin0715    时间: 2021-2-3 10:10

回复 1# 灯塔彭于晏
你认为何为特殊符号,要列出来。
作者: 灯塔彭于晏    时间: 2021-2-3 10:17

回复 2# qixiaobin0715


    目测来看,是除了英文逗号以外都是特殊符号了。
作者: flashercs    时间: 2021-2-3 12:02

本帖最后由 flashercs 于 2021-2-3 12:32 编辑

保存为 保留指定行.bat
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. $srcfile = "tt.txt"
  10. $dstfile = "ttNEW.txt"
  11. $stack = 0
  12. Get-Content -Path $srcfile -OutBuffer 100 | ForEach-Object {
  13.   $line = $_
  14.   switch ($stack) {
  15.     0 {
  16.       if ($line -ne '') {
  17.         if ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
  18.           $stack = 2
  19.           $line.Replace(',', '')
  20.         } else {
  21.           $stack = 1
  22.         }
  23.       } else {
  24.         $line
  25.       }
  26.     }
  27.     1 {
  28.       if ($line -eq '') {
  29.         $stack = 0
  30.         $line
  31.       } elseif ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
  32.         $stack = 2
  33.         $line.Replace(',', '')
  34.       }
  35.     }
  36.     2 {
  37.       if ($line -eq '') {
  38.         $stack = 0
  39.         $line
  40.       }
  41.     }
  42.   }
  43. } | Set-Content -Path $dstfile
复制代码

作者: WHY    时间: 2021-2-3 12:11

本帖最后由 WHY 于 2021-2-3 16:32 编辑
  1. PowerShell "$a=@(gc tt.txt) -notMatch '[\p{P}-[,]]' | forEach{if($_ -ne '' -and [string]::isNullOrEmpty($s)){$_}; $s=$_}; sc bb.txt ($a -replace ',' -join \"`r`n`r`n`r`n\")"
复制代码





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