Board logo

标题: [文本处理] [已解决]求助批处理选出文本中,第一列为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

  1. 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个码时,要提取出来需要怎么弄?谢谢

刚试了下,如下这样可识别字母类字符,但特殊字符要怎么弄,需要一个个都输在[]里面吗?
  1. 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


  
  1. 2/29,20240905,57.00
  2. 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


  1. @echo off
  2. cd /d "%~dp0"
  3. (for /f "useback delims=" %%a in ("a.txt") do (
  4. set str=%%a
  5. setlocal enabledelayedexpansion
  6. if "!str:~4,1!" equ "," (
  7. set "_str=!str:~0,4!"
  8. if "!_str:,=!" equ "!_str!" (
  9. echo=!str!
  10. )
  11. )
  12. endlocal
  13. )) > b.txt
  14. 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
  1. @echo off &(for /f "delims=" %%a in (a.txt) do (
  2. set "s=%%a" &setlocal enabledelayedexpansion
  3. if "!s:~4,1!"=="," echo,!s:~,4!
  4. endlocal
  5. ))>b.txt
  6. 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. 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编码(单字节)字符的话:
  1. findstr /b "[^,][^,][^,][^,]," a.txt>b.txt
复制代码





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