Board logo

标题: [文本处理] {已解决}批处理如何提取第4、5个字符为0的行? [打印本页]

作者: 172788876    时间: 2016-3-4 18:43     标题: {已解决}批处理如何提取第4、5个字符为0的行?

本帖最后由 172788876 于 2017-1-31 10:16 编辑

如题:从一个文本里面提取指定的内容,建立新的列表
文本内容
2180  "重击"
2190  "警觉"
2200  "勇气"
52790  "秘法·逐鹿九州"
52780  "秘法·千变玄机"
47490  "秘法·百无禁忌"
47491  "秘法·百无禁忌"
47492  " 
47470  "秘法·九霄
提取第四列,第五列为 0 的这一行建立新的txt列表
新列表
2180  "重击"
2190  "警觉"
2200  "勇气"
52790  "秘法·逐鹿九州"
52780  "秘法·千变玄机"
47490  "秘法·百无禁忌"
47470  "秘法·九霄

谢谢大神了。。。
作者: 172788876    时间: 2016-3-4 20:31

回复 1# 172788876
噢噢,么有下次了。。
作者: sishentibu    时间: 2016-3-4 20:52

  1. @echo off
  2. echo.>3.txt
  3. setlocal enabledelayedexpansion
  4. for /f "delims=;" %%i in (1.txt) do (
  5. set a=%%i
  6. set b=!a:~3,1!
  7. if !b!==0 echo !a!>>3.txt
  8. set c=!a:~4,1!
  9. if !c!==0 echo !a!>>3.txt)
复制代码
1.txt为原文件,3.txt为按你要求提取后的文件
这个代码可以可以达到你的要求。

但for里面的语句我感觉应该还可以再精简的,但我自己减了直接运行出错了。。希望有大侠能指点下
作者: sishentibu    时间: 2016-3-4 22:38

回复 4# codegay


    findstr不熟悉,我要再多试试
    我for代码中截断语句用了3行来完成。能不能跟在非循环语句中一样,直接一句搞定?
作者: codegay    时间: 2016-3-5 08:26

findstr -rc:"^[0-9][0-9][0-9][0-9]*0" 1.txt
作者: 172788876    时间: 2016-3-5 09:23

回复 3# sishentibu
谢谢!!!
作者: 172788876    时间: 2016-3-5 09:23

回复 5# codegay
谢谢!!!
作者: 172788876    时间: 2016-3-5 09:30

回复 3# sishentibu
不知道咋回事,还是无效。。执行命令出来,是空白的文档
作者: codegay    时间: 2016-3-5 10:08

python
  1. [open("2.txt","a+").write(r) for r in open("1.txt",encoding="utf-8").readlines() if len(r.split(" ")[0])>=4 and r.split(" ")[0].endswith("0")]
复制代码

作者: 172788876    时间: 2016-3-5 11:38

回复 9# codegay
噢噢,谢了
作者: 172788876    时间: 2016-3-5 11:45

回复 9# codegay
可以不用第三方插件吗???
谢了,
帮忙做个。。。
作者: sishentibu    时间: 2016-3-5 11:59

回复 8# 172788876

我今天又测试了下,是可以的啊
能否详细描述下你的操作?
作者: 172788876    时间: 2016-3-5 16:15

回复 12# sishentibu
那我发给你文档吧。。
http://pan.baidu.com/s/1jGPEZPG
谢谢了
作者: sishentibu    时间: 2016-3-5 19:48

本帖最后由 sishentibu 于 2016-3-5 19:49 编辑

回复 13# 172788876


    把你的文档转码下就可以读取了、
我自己用代码运行完了后,发现好多的干扰项
按我的理解,你想要的是类似需要的,然后序号末尾是0的项吧?
然后我又加了个判断
  1.     @echo off
  2.     echo.>3.txt
  3.     setlocal enabledelayedexpansion
  4.     for /f "delims=;" %%i in (1.txt) do (
  5.     set a=%%i
  6.     set b=!a:~3,1!
  7. set c=!a:~4,1!
  8. set d=!a:~5,1!
  9.      if !b!==0 (if !c!==^  echo !a!>>3.txt)
  10.      if !c!==0 (if !d!==^  echo !a!>>3.txt))
复制代码
http://pan.baidu.com/s/1bogixm3
作者: pcl_test    时间: 2016-3-5 20:58

本帖最后由 pcl_test 于 2016-7-18 13:37 编辑
  1. mshta http://bathome.net/s/hta/ type('A.txt').match(/^\d{3,4}0\s+.+/g).join('\r\n')>B.txt
复制代码

作者: WHY    时间: 2016-3-5 21:32

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

作者: wskwfkbdn    时间: 2016-3-6 08:58

findstr就够了
作者: 172788876    时间: 2016-3-6 12:59

回复 14# sishentibu

嗯嗯,谢谢
作者: 172788876    时间: 2016-3-6 13:00

回复 15# pcl_test
版主,居然惊动你了,太惊喜了
作者: 172788876    时间: 2016-3-6 13:01

回复 16# WHY
嗯嗯,谢谢,太感谢了,批处理之家比贴吧有爱多了,这么多大神帮忙解决问题
作者: 172788876    时间: 2016-3-6 13:04

回复 15# pcl_test
版主,我测试了你那个命令,但是,排版乱了。。
作者: 172788876    时间: 2016-3-6 13:06

回复 21# 172788876
我用UE打开它,排版居然正常了
作者: 172788876    时间: 2016-3-6 13:13

回复 22# 172788876
然后我再复制进txt,排版又不正常了,最后没办法,我用Excel重新排版了下
作者: pcl_test    时间: 2016-3-6 13:25

回复 21# 172788876


.join('\n')
作者: CrLf    时间: 2016-3-6 14:09

回复 15# pcl_test


    ^,双引号
作者: WHY    时间: 2016-3-6 20:52

楼主既然有UE,直接用UE好了,不一定非得用脚本实现(前提是要会点正则)

“搜索”菜单——查找——查找内容输入:^\d{3,4}0\s.*$——勾选正则表达式:Perl——显示行
复制结果就OK了
作者: CommandBatCmd    时间: 2017-1-31 20:31

本帖最后由 CommandBatCmd 于 2017-2-1 14:51 编辑

如果楼主的最终结果是,只要数字末尾是0的所有行,取余就可以获得了。

回来附上代码
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /f "tokens=1,2*" %%I in (a.txt) do Set/A A=%%I%%10&if "!A!"=="0" echo,%%I  %%J
  3. pause
复制代码





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