找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27435|回复: 8

[文本处理] [已解决]批处理如何提取文本1、2、3栏含三个指定数据的行

[复制链接]
发表于 2012-9-7 18:18:14 | 显示全部楼层 |阅读模式
a.txt内容共四栏,行数二万多。

例如:a.txt内容如下:
xx,xx,99,xx,xx,xx,xx,xx,        66,xx,xx,xx,                          xx,xx,xx,xx,00,xx,                 xx,xx,xx,xx,xx,xx,xx,
xx,xx,xx,xx,xx,88,xx,xx,        xx,xx,xx,xx,xx,xx,77,xx,        xx,xx,xx,44,xx,xx,xx,xx,        xx,xx,xx,xx,xx,
22,xx,                                   xx,xx,xx,22,xx,xx,xx,             xx,xx,xx,22,                         xx,xx,xx,xx,xx,xx,xx,xx,
xx,xx,xx,xx,xx,55,                 xx,33,xx,xx,xx,                      xx,xx,xx,xx,xx,xx,xx,xx,        xx,
xx,xx,xx,xx,22,xx,xx,xx,        xx,xx,xx,xx,xx,xx,xx,22,        xx,22,xx,xx,xx,xx,xx,            xx,xx,xx,xx,xx,xx,xx,xx,


提取出来后b.txt效果如下:
例一:1栏指定数据(22,)、2栏指定数据(22,)、3栏指定数据(22,)。
22,xx,                                   xx,xx,xx,22,xx,xx,xx,             xx,xx,xx,22,                         xx,xx,xx,xx,xx,xx,xx,xx,
xx,xx,xx,xx,22,xx,xx,xx,        xx,xx,xx,xx,xx,xx,xx,22,        xx,22,xx,xx,xx,xx,xx,            xx,xx,xx,xx,xx,xx,xx,xx,

例二:1栏指定数据(99,)、2栏指定数据(66,)、3栏指定数据(00,)。
xx,xx,99,xx,xx,xx,xx,xx,        66,xx,xx,xx,                          xx,xx,xx,xx,00,xx,                 xx,xx,xx,xx,xx,xx,xx,


注:不去重复,不改变顺序。


希望各位大大帮帮忙!!在此先谢谢大家~~~。

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-9-7 18:52:42 | 显示全部楼层
  1. @echo off
  2. set v1=99
  3. set v2=66
  4. set v3=00
  5. (for /f "tokens=1-4 delims= " %%a in (a.txt) do (
  6.         set a1=%%a&set a2=%%b&set a3=%%c&set a4=%%d
  7.         set /a n=0
  8.         setlocal enabledelayedexpansion
  9.         set "b1=!a1:%v1%=!"
  10.         set "b2=!a2:%v2%=!"
  11.         set "b3=!a3:%v3%=!"
  12.         if not "!b1!"=="!a1!" set /a n+=1
  13.         if not "!b2!"=="!a2!" set /a n+=1
  14.         if not "!b3!"=="!a3!" set /a n+=1
  15.         if !n! equ 3 echo !a1! !a2! !a3! !a4!
  16.         endlocal
  17. ))>b.txt
复制代码
发表于 2012-9-7 19:41:59 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set v1=99
  3. set v2=66
  4. set v3=00
  5. (for /f "tokens=1-3*" %%a in (a.txt) do (
  6.         set s1=%%a&set s2=%%b&set s3=%%c
  7.         if "!s1:%v1%,=!" neq "%%a" if "!s2:%v2%,=!" neq "%%b" if "!s3:%v3%,=!" neq "%%c" (
  8.             echo,%%a %%b %%c %%d
  9.        )
  10. ))>c.txt
  11. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-9-7 20:01:56 | 显示全部楼层
本帖最后由 a000000_82 于 2012-9-7 20:18 编辑

十分感谢FOR、terse 的帮忙!

请您帮忙再修改一下,让栏对齐。
试用效果:
22,xx, xx,xx,xx,22,xx,xx,xx, xx,xx,xx,22, xx,xx,xx,xx,xx,xx,xx,xx,
xx,xx,xx,xx,22,xx,xx,xx, xx,xx,xx,xx,xx,xx,xx,22, xx,22,xx,xx,xx,xx,xx, xx,xx,xx,xx,xx,xx,xx,xx,

要求效果:
22,xx,                                   xx,xx,xx,22,xx,xx,xx,             xx,xx,xx,22,                     xx,xx,xx,xx,xx,xx,xx,xx,
xx,xx,xx,xx,22,xx,xx,xx,        xx,xx,xx,xx,xx,xx,xx,22,        xx,22,xx,xx,xx,xx,xx,        xx,xx,xx,xx,xx,xx,xx,xx,

注:要求栏对齐是为了复制第4栏。

另:如果可能的话将提取后的第4栏直接提取出来。
发表于 2012-9-7 21:00:31 | 显示全部楼层
对齐是件极其啰唆的事,要知道你整个文本中最长的一列有多少字符,还要考虑其中的全角字符,对于你这么大的文档来说,效率是不敢恭维的。
 楼主| 发表于 2012-9-7 21:12:01 | 显示全部楼层
请教一下,能否在不对齐的情况下将第四栏提取出来。
发表于 2012-9-7 21:58:47 | 显示全部楼层
请教一下,能否在不对齐的情况下将第四栏提取出来。
a000000_82 发表于 2012-9-7 21:12


4.txt 为第四栏的结果
  1. @echo off
  2. set v1=99
  3. set v2=66
  4. set v3=00
  5. for /f "tokens=1-4 delims= " %%a in (a.txt) do (
  6.         set a1=%%a&set a2=%%b&set a3=%%c&set a4=%%d
  7.         set /a n=0
  8.         setlocal enabledelayedexpansion
  9.         set "b1=!a1:%v1%=!"
  10.         set "b2=!a2:%v2%=!"
  11.         set "b3=!a3:%v3%=!"
  12.         if not "!b1!"=="!a1!" set /a n+=1
  13.         if not "!b2!"=="!a2!" set /a n+=1
  14.         if not "!b3!"=="!a3!" set /a n+=1
  15.         if !n! equ 3 (
  16.                 echo !a1! !a2! !a3! !a4!>>b.txt
  17.                 echo !a4!>>4.txt
  18.         )
  19.         endlocal
  20. )
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2012-9-7 22:38:19 | 显示全部楼层
非常好用,麻烦您了,非常感谢!!!
发表于 2012-9-10 20:07:32 | 显示全部楼层
高手如云啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 12:50 , Processed in 0.018632 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表