标题: [文本处理] [已解决]求助批处理选出文本中,第一列为4码的行 [打印本页]
作者: KLL 时间: 2024-9-28 10:04 标题: [已解决]求助批处理选出文本中,第一列为4码的行
求助 將 A.txt文本中 选出,第一列为4码的行到 B.txt
a文本:
0055,20240905,28.32
00632,20240905,3.58
6929,20240905,54.00
XJF00,20240905,143.48
9941A,20240905,50.00
B0861,20240905,6.66
9928,20240905,20.10,20.40
IDX11,20240905,156.39
Y001B,20240905,8.58
2329,20240905,57.00
b文本:
0055,20240905,28.32
6929,20240905,54.00
9928,20240905,20.10,20.40
2329,20240905,57.00
谢谢
作者: qixiaobin0715 时间: 2024-9-28 10:10
- findstr /b "[0-9][0-9][0-9][0-9]," a.txt>b.txt
复制代码
作者: KLL 时间: 2024-9-28 10:23
运行后, 赞 , 谢谢您协助
作者: fzp070 时间: 2024-9-28 19:01
本帖最后由 fzp070 于 2024-9-28 19:26 编辑
回复 2# qixiaobin0715
大佬,如果第一列中含有字母或特殊字符、刚好也是4个码时,要提取出来需要怎么弄?谢谢
刚试了下,如下这样可识别字母类字符,但特殊字符要怎么弄,需要一个个都输在[]里面吗?- findstr /b "[0-9、a-z][0-9、a-z][0-9、a-z][0-9、a-z]," "%cd%\a.txt">b.txt
复制代码
例如下这样的:
0055,20240905,28.32
00632,20240905,3.58
6929,20240905,54.00
XJF00,20240905,143.48
9941A,20240905,50.00
B0861,20240905,6.66
9928,20240905,20.10,20.40
IDX11,20240905,156.39
Y001B,20240905,8.58
2329,20240905,57.00
2j29,20240905,57.00
2J29,20240905,57.00
2@29,20240905,57.00
2、29,20240905,57.00
2 29,20240905,57.00
2 29,20240905,57.00
2·29,20240905,57.00
2~29,20240905,57.00
2!29,20240905,57.00
2!29,20240905,57.00
2@29,20240905,57.00
2#29,20240905,57.00
2¥29,20240905,57.00
2$29,20240905,57.00
2%29,20240905,57.00
2%29,20240905,57.00
2^29,20240905,57.00
2……29,20240905,57.00
2&29,20240905,57.00
2*29,20240905,57.00
2(29,20240905,57.00
2(29,20240905,57.00
2)29,20240905,57.00
2)29,20240905,57.00
2——29,20240905,57.00
2_29,20240905,57.00
2-29,20240905,57.00
2+29,20240905,57.00
2=29,20240905,57.00
2{29,20240905,57.00
2}29,20240905,57.00
2{29,20240905,57.00
2}29,20240905,57.00
2[29,20240905,57.00
2]29,20240905,57.00
2【29,20240905,57.00
2】29,20240905,57.00
2:29,20240905,57.00
2:29,20240905,57.00
2;29,20240905,57.00
2‘29,20240905,57.00
2'29,20240905,57.00
2“29,20240905,57.00
2”29,20240905,57.00
2"29,20240905,57.00
2"29,20240905,57.00
2,29,20240905,57.00
2,29,20240905,57.00
2《29,20240905,57.00
2<29,20240905,57.00
2>29,20240905,57.00
2》29,20240905,57.00
2。29,20240905,57.00
2.29,20240905,57.00
2/29,20240905,57.00
2/29,20240905,57.00
2?29,20240905,57.00
2?29,20240905,57.00
2\29,20240905,57.00
作者: 77七 时间: 2024-9-28 19:39
回复 4# fzp070
- 2/29,20240905,57.00
- 2/29,20240905,57.00
复制代码
这两个需要保留哪个?
作者: fzp070 时间: 2024-9-28 19:45
回复 5# 77七
是的!
如上仅只是举个例说,有可能 是任何字符,包含所有特殊字符。我上面特殊字符有些还没列全呢,比如有些英中文标点、半角全角区分。
作者: 77七 时间: 2024-9-28 19:51
回复 6# fzp070
全保留?
作者: fzp070 时间: 2024-9-28 19:55
本帖最后由 fzp070 于 2024-9-28 20:13 编辑
回复 7# 77七
只是讨论学习下哈!有没有可能做到?弄不了也没事的,谢谢!
刚想了下,用for先将第一段提出来,再筛选出4个字符的行,应该能做到。有时间再研究下
作者: 77七 时间: 2024-9-28 20:16
本帖最后由 77七 于 2024-9-28 20:19 编辑
回复 8# fzp070
- @echo off
- cd /d "%~dp0"
- (for /f "useback delims=" %%a in ("a.txt") do (
- set str=%%a
- setlocal enabledelayedexpansion
- if "!str:~4,1!" equ "," (
- set "_str=!str:~0,4!"
- if "!_str:,=!" equ "!_str!" (
- echo=!str!
- )
- )
- endlocal
- )) > b.txt
- pause
复制代码
试下这个
作者: fzp070 时间: 2024-9-28 20:32
回复 9# 77七
不错,基本完美,只是遇到如下这样的不好办
232,,20240905,57.00
作者: aloha20200628 时间: 2024-9-28 20:35
本帖最后由 aloha20200628 于 2024-9-28 20:38 编辑
回复 8# fzp070 - @echo off &(for /f "delims=" %%a in (a.txt) do (
- set "s=%%a" &setlocal enabledelayedexpansion
- if "!s:~4,1!"=="," echo,!s:~,4!
- endlocal
- ))>b.txt
- pause&exit/b
复制代码
作者: fzp070 时间: 2024-9-28 20:42
回复 11# aloha20200628
不错,解决了10楼提出的问题!感谢指教,学习了
作者: 77七 时间: 2024-9-28 20:48
回复 10# fzp070
这个是代码中设定特意排除的情况。如- ,,,,,
- 1,2,,
- 1,,2,
复制代码
是希望保留这3个?那还有列的概念吗...
作者: fzp070 时间: 2024-9-28 21:04
本帖最后由 fzp070 于 2024-9-28 21:19 编辑
回复 13# 77七
你说得对,是我没定义清楚。不然11楼的也会遇到问题。
你9楼没问题。11楼的也可以。问题结束!感谢各位大佬!
作者: qixiaobin0715 时间: 2024-9-29 08:22
回复 4# fzp070
如果都ASCII编码(单字节)字符的话:- findstr /b "[^,][^,][^,][^,]," a.txt>b.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |