标题: [文本处理] {已解决}批处理如何提取第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
- @echo off
- echo.>3.txt
- setlocal enabledelayedexpansion
- for /f "delims=;" %%i in (1.txt) do (
- set a=%%i
- set b=!a:~3,1!
- if !b!==0 echo !a!>>3.txt
- set c=!a:~4,1!
- 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- [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的项吧?
然后我又加了个判断- @echo off
- echo.>3.txt
- setlocal enabledelayedexpansion
- for /f "delims=;" %%i in (1.txt) do (
- set a=%%i
- set b=!a:~3,1!
- set c=!a:~4,1!
- set d=!a:~5,1!
- if !b!==0 (if !c!==^ echo !a!>>3.txt)
- 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 编辑
- 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
- 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的所有行,取余就可以获得了。
回来附上代码- @echo off&setlocal EnableDelayedExpansion
- for /f "tokens=1,2*" %%I in (a.txt) do Set/A A=%%I%%10&if "!A!"=="0" echo,%%I %%J
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |