标题: [文本处理] [求助]批处理排列很规则的文本,按条件去除部分内容 [打印本页]
作者: 灯塔彭于晏 时间: 2021-2-3 09:54 标题: [求助]批处理排列很规则的文本,按条件去除部分内容
祝您新年快乐,牛年大吉。想请您帮忙解决2个小需求。
现有文本tt.txt,内容如下:(排列很规则,每一组文字中间空2行。但每组文字的行数不一,3 4 5个都有!)- 铅笔画,
- 迪士尼,
- 手绘,
- 黑白,
- 血源诅咒,
-
-
- 雨,
- 伞,
- 女孩,
- 夜景,
-
-
- 爱德蒙·唐泰斯,
- Fate/GrandOrder,
- FGO,
- 香烟,
- 岩窟王,
-
-
- Fate/GrandOrder,
- FGO,
- 迦尔纳,
-
-
- 水彩,
- 女孩,
- 手绘,
-
-
- 苏菲·诺伊恩缪拉,
- 索菲的工作室,
- 炼金,
-
-
- 卷发,
- 少女,
- 美女,
- 长发,
- 波浪,
复制代码
最终需求是: 每组文字中,不管有几行,都只保留一行。
保留的这一行,不能是存在特殊符号的那一行。比如tt.txt中,有的文字组中,存在符号 · 和 / 。存在符号的话,就不能保留这一行的文字。 英文逗号除外,毕竟是结尾的分隔符号,要保留。
效果:- 铅笔画
-
-
- 雨
-
-
- FGO
-
-
- FGO
-
-
- 水彩
-
-
- 索菲的工作室
-
-
- 卷发
复制代码
作者: 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- <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- $srcfile = "tt.txt"
- $dstfile = "ttNEW.txt"
- $stack = 0
- Get-Content -Path $srcfile -OutBuffer 100 | ForEach-Object {
- $line = $_
- switch ($stack) {
- 0 {
- if ($line -ne '') {
- if ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
- $stack = 2
- $line.Replace(',', '')
- } else {
- $stack = 1
- }
- } else {
- $line
- }
- }
- 1 {
- if ($line -eq '') {
- $stack = 0
- $line
- } elseif ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
- $stack = 2
- $line.Replace(',', '')
- }
- }
- 2 {
- if ($line -eq '') {
- $stack = 0
- $line
- }
- }
- }
- } | Set-Content -Path $dstfile
复制代码
作者: WHY 时间: 2021-2-3 12:11
本帖最后由 WHY 于 2021-2-3 16:32 编辑
- 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 |