标题: [文本处理] 如何用批处理让文本内容按条件删除数据? [打印本页]
作者: czvde 时间: 2022-4-2 11:42 标题: 如何用批处理让文本内容按条件删除数据?
本帖最后由 czvde 于 2022-4-5 13:17 编辑
文件夹有多个txt文件
a.txt
b.txt
c.txt
d.txt
例如:a.txt的文本内容- ----------
- 111111
- AAAAAA
- ----------
- 111111
-
- BBBBBBBB
- ----------
- ABC
- 111111
- ABC
- CCCCC
复制代码
排序,输出a-1.txt、b-1.txt、c-1.txt、d-1.txt
a-1.txt的文本内容- ----------
- 111111
-
- BBBBBBBB
- ----------
- ABC
- CCCCC
复制代码
补充说明要求:
根据文本中的“----------”行内容与第1次重复“----------”行内容作为判断,进行删除(效果看a-1.txt)
根据文本中的“ABC”行内容与第1次重复“ABC”行内容作为判断,进行删除(效果看a-1.txt)
作者: buyiyang 时间: 2022-4-3 11:52
本帖最后由 buyiyang 于 2022-4-3 12:58 编辑
你又来啦,这个问题我有一个思路,但水平太菜,代码撸不出,不过我觉得分享讨论一下思路也不错(符合本版的”注意“)
1.首先用for和findstr找出"----------"所在的行号,- for %%i in (*.txt) do (
- for /f "tokens=1* delims=:" %%a in ('findstr /n /r /c:"----------" "%%i"') do (……)
复制代码
2.将上述相邻的的一对行号作为一对变量,%m%和%n%,并分别对应,
比如a.txt的例子,行号有1、4、8,当%m%=1时%n%=4,当%m%=4时%n%=8,
我想到的是将找出的所有行号变成一串字符,再用set截取变成两组变量的值,再用for进行提取并用for的嵌套使%m%和%n%分别对应,比如1=4=8=截取为1=4和4=8(加上=是方便for提取)- for /f "tokens=1* delims=:" %%a in ('findstr /n /r /c:"----------" "%%i"') do >>by.txt echo,%%a
- for /f "delims=" %%a in (by.txt) do (set /p=%%a=<nul>>byy.txt)
- for /f "delims=" %%a in (byy.txt) do set "str=%%a"
- set "str1=!str:~0,-3!
- set "str2=!str:~2,-1!
- for %%a in (!str1!) do (
- set "m=%%a"
- for %%a in (!str2!) do (
- set "n=%%a"
复制代码
3.最后再根据%m%获得----------下一行的行号%x%,再根据%x用for和%findstr找出----------下一行的内容%str3%,再找出%str3%在文本中的所有行号%y%,
如果%y%geq%m%,当%y%gtr%n%,则删除%m%到%n%-1行的内容,
当%y%lss%n%,则输出%m%行,%y%到%n%-1行的内容或删除%m+1%到%y%-1的内容。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |