Board logo

标题: [文本处理] 求对文本文件进行整理的批处理 [打印本页]

作者: pwq    时间: 2021-3-6 13:08     标题: 求对文本文件进行整理的批处理

求大师们为小弟解难,求一个对文本文件进行整理的批处理。要求是:删除文本文件中只有阿拉伯数字而不含其它任何字符的行。示例如下:
老槐树上吊着一个人。
这老槐树长在肖家镇的南街口,谁也说不上有多少年代了,它那满是皱纹的干裂了的树皮,就像一个受尽折磨的老人的面孔。
123456
被吊着的人看上去只有二十多岁,穿一身白色的符衣符帽,从这里可以断定他是城东吉祥镇白吉会的人。
45632
原来老孟赶车到过城东的小陈家店,认识陈宝义。这几天他给东家往城里倒腾东西,在城里住了两天,不了解乡里的情况
02560
在肖家镇一跺脚全县地皮要颤三颤的苏金荣!
以上是随便举个示例。各位大师已经看明白了。我要求删除文本文件中只有阿拉伯数字而不含其它任何字符的行。我在网上找了很多关于文本文件的整理软件,好像都没有这种整理动能。我想起了批处理之家,恳求大师们能不能用批处理解决这个问题。谢谢各位了。
作者: qixiaobin0715    时间: 2021-3-6 13:13

  1. @echo off
  2. (for /f "delims=" %%a in ('findstr /bev "[0-9][0-9]*" a.txt') do (
  3. echo,%%a
  4. ))>b.txt
  5. pause
复制代码
回复 1# pwq
作者: WHY    时间: 2021-3-6 13:15

type a.txt | findstr /v "^[0-9][0-9]*$"
作者: qixiaobin0715    时间: 2021-3-6 13:22

不用type,直接findstr应当也行
作者: WHY    时间: 2021-3-6 13:24

本帖最后由 WHY 于 2021-3-6 13:38 编辑

回复 2# qixiaobin0715


    a.txt 最后一行如果是纯数字行,且最后一行不带回车换行,findstr /e 匹配不到这一行。
type + 管道符 + findstr 可以避免这种情况。
作者: qixiaobin0715    时间: 2021-3-6 13:31

是这样。批处理像传说的那样,坑不是一般的多。
作者: pwq    时间: 2021-3-6 14:25     标题: 已解决

本帖最后由 pwq 于 2021-3-6 14:48 编辑

首先谢谢二位大师的帮助。我将二位大师的批处理都下载了并且试了一下。qixiaobin0715大师的批处理能完美解决问题,成功了。WHY大师的批处理无反应,失败了。谢谢二位大师。看来批处理之家有能人,我更喜爱批处理之家了。谢谢二位大师,向你们学习。
作者: qixiaobin0715    时间: 2021-3-6 14:41

回复 7# pwq
那是因为你不会用:3楼代码后面加上
>b.txt
试试
作者: pwq    时间: 2021-3-6 14:59

我将WHY大师的批处理后尾加了>b.txt再试了一下,成功了。感谢二位,我将二位的都收下了,谢谢二位。批处理之家有能人。
作者: terse    时间: 2021-3-6 19:14

  1. findstr /v "^[0-9]*$" a.txt>b.txt
复制代码

作者: qixiaobin0715    时间: 2021-3-7 06:43

回复 10# terse
不妥。空行没保留。
2楼代码也去掉了空行。
作者: pwq    时间: 2021-3-8 20:45

回复各位大师,出了怪事,先前我对二位大师写的删除阿拉伯数字的批处理文件作了成功的结认,今天想使用了突然发现不行了。我截取上来,给大师们试试。(我要删除14)

那刘中正原是黄埔军官学校的学生。据说有次蒋介石到学校
14
训话,见刘中正在太阳底下站了四个钟头一动也不动,很赏识他,当场赞扬了他几句,就因为这样,刘中正一毕业便当上了营长。
作者: pwq    时间: 2021-3-8 21:00

各位:很奇怪。我发上来又复制下来的却又能删除数字,怎么回事。为什么二位大师的批处理对我电脑里的文本文件中的数字删除不了,请大师先在自己电脑的文本文件实验成功再将成功的批处理传上来。我谢谢大家了
作者: Batcher    时间: 2021-3-8 22:09

回复 12# pwq


请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: pwq    时间: 2021-3-8 22:09

我刚才又试了一下,发现有这样的情况:自写的文本文件中数字行(行中不含任何字符)能用三位大师的批处理删除。PDF文件(尤其是扫描版)转换成的txt中数字行删除不了。大家有何不同看法。
作者: flashercs    时间: 2021-3-8 22:17

回复 15# pwq


    pdf转的txt的编码应该是utf-8,所以删不掉;要想无论任何文本都能删掉数字,得需要先检测文本编码然后再删除。
作者: pwq    时间: 2021-3-8 22:17

谢谢管理员先生给我的指导,我都收藏下来了。谢谢!
作者: pwq    时间: 2021-3-8 22:19

谢谢各位,我再试试。
作者: pwq    时间: 2021-3-8 22:40

我刚才将由PDF转换成txt用utf-8编码保存后再用大师们的批处理删除数字行还是不行,还充斥了这样的符号:�?,好了,到此为止,明天再研究吧。谢谢各位。
作者: qixiaobin0715    时间: 2021-3-9 06:21

本帖最后由 qixiaobin0715 于 2021-3-9 12:26 编辑

除了编码问题,可能还存在纯数字行末尾有不可见的空白字符。
  1. 将findstr /bev "[0-9][0-9]*"修改为findstr /r /bev /c:"[0-9][0-9]*[ ]*"试试
复制代码

作者: qixiaobin0715    时间: 2021-3-9 10:55

本帖最后由 qixiaobin0715 于 2021-3-9 12:27 编辑

如果使用UTF-8编码,可将文本文件及批处理文件均另存为UTF-8 无签名编码,运行批处理:
  1. @echo off
  2. chcp 65001
  3. for /f "delims=" %%a in ('findstr /r /bev /c:"[0-9][0-9]*[ ]*" a.txt') do (
  4. echo,%%a
  5. )
  6. pause
复制代码

作者: pwq    时间: 2021-3-9 17:03

回复少尉大师,用您的方法试了,都失败了。用您上次给的批处理能删除文字版PDF转换的TXT中的页数字。删除不了扫描版PDF转换的txt中的页数字。好了,这个问题到此吧。我也是兴趣玩玩而已,谢谢大师们。
作者: Batcher    时间: 2021-3-9 17:16

回复 22# pwq


提个小小的建议,以后遇到类似的问题,比如别人测试能成功,但是你实际执行的时候有问题。可以把你的测试用例、测试代码打包压缩传上来,以便进一步排查问题。
作者: pwq    时间: 2021-3-11 12:19

回各位大师,我用鼠标光标箭头手工测试了一下页数字右边位置处,果然有个空白字符,我用鼠标将其删除,再用大师们给的批处理操作,页数字就完美的删除了,我太高兴了。现在需要一个能删除页数字右边有个空白字符的批处理,哪位大师帮我一下。谢谢大师们。
作者: qixiaobin0715    时间: 2021-3-11 12:30

  1. type a.txt | findstr /r /v /c:"^[0-9][0-9]*[ ]*$">b.txt
复制代码

作者: pwq    时间: 2021-3-11 14:15

回复少尉大师,您最新给我的删除页数字的批处理我已下载并试用,能完美将页数字删除。谢谢您。我还有个想法,因为这些文本文件是由多个PDF文件转换来的。页数字右边究竟有多少个空白字符也吃不准,您这次的批处理是不是对页数字右边任意个空白字符都考虑进了。谢谢您。
作者: qixiaobin0715    时间: 2021-3-11 14:51

是的。[         ]*$表示行尾有0到任意多个空白字符构成。




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