标题: [文本处理] [已解决]批处理如何提取文本1、2、3栏含三个指定数据的行 [打印本页]
作者: a000000_82 时间: 2012-9-7 18:18 标题: [已解决]批处理如何提取文本1、2、3栏含三个指定数据的行
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,
注:不去重复,不改变顺序。
希望各位大大帮帮忙!!在此先谢谢大家~~~。
作者: FOR 时间: 2012-9-7 18:52
- @echo off
- set v1=99
- set v2=66
- set v3=00
- (for /f "tokens=1-4 delims= " %%a in (a.txt) do (
- set a1=%%a&set a2=%%b&set a3=%%c&set a4=%%d
- set /a n=0
- setlocal enabledelayedexpansion
- set "b1=!a1:%v1%=!"
- set "b2=!a2:%v2%=!"
- set "b3=!a3:%v3%=!"
- if not "!b1!"=="!a1!" set /a n+=1
- if not "!b2!"=="!a2!" set /a n+=1
- if not "!b3!"=="!a3!" set /a n+=1
- if !n! equ 3 echo !a1! !a2! !a3! !a4!
- endlocal
- ))>b.txt
复制代码
作者: terse 时间: 2012-9-7 19:41
- @echo off&setlocal enabledelayedexpansion
- set v1=99
- set v2=66
- set v3=00
- (for /f "tokens=1-3*" %%a in (a.txt) do (
- set s1=%%a&set s2=%%b&set s3=%%c
- if "!s1:%v1%,=!" neq "%%a" if "!s2:%v2%,=!" neq "%%b" if "!s3:%v3%,=!" neq "%%c" (
- echo,%%a %%b %%c %%d
- )
- ))>c.txt
- pause
复制代码
作者: a000000_82 时间: 2012-9-7 20:01
本帖最后由 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栏直接提取出来。
作者: FOR 时间: 2012-9-7 21:00
对齐是件极其啰唆的事,要知道你整个文本中最长的一列有多少字符,还要考虑其中的全角字符,对于你这么大的文档来说,效率是不敢恭维的。
作者: a000000_82 时间: 2012-9-7 21:12
请教一下,能否在不对齐的情况下将第四栏提取出来。
作者: FOR 时间: 2012-9-7 21:58
请教一下,能否在不对齐的情况下将第四栏提取出来。
a000000_82 发表于 2012-9-7 21:12
4.txt 为第四栏的结果- @echo off
- set v1=99
- set v2=66
- set v3=00
- for /f "tokens=1-4 delims= " %%a in (a.txt) do (
- set a1=%%a&set a2=%%b&set a3=%%c&set a4=%%d
- set /a n=0
- setlocal enabledelayedexpansion
- set "b1=!a1:%v1%=!"
- set "b2=!a2:%v2%=!"
- set "b3=!a3:%v3%=!"
- if not "!b1!"=="!a1!" set /a n+=1
- if not "!b2!"=="!a2!" set /a n+=1
- if not "!b3!"=="!a3!" set /a n+=1
- if !n! equ 3 (
- echo !a1! !a2! !a3! !a4!>>b.txt
- echo !a4!>>4.txt
- )
- endlocal
- )
复制代码
作者: a000000_82 时间: 2012-9-7 22:38
非常好用,麻烦您了,非常感谢!!!
作者: sm00789 时间: 2012-9-10 20:07
高手如云啊
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |