标题: [文本处理] (已解决)批处理:vcf格式 ---- 只保留有效号码? [打印本页]
作者: 非常感谢 时间: 2013-9-10 12:53 标题: (已解决)批处理:vcf格式 ---- 只保留有效号码?
本帖最后由 非常感谢 于 2013-9-11 13:27 编辑
批处理前:
a.txt里的内容
2013年9月10日 +861111111111 00:00:00
2013年9月10日 +862222222222 00:00:00
2013年9月10日 +863333333333 00:00:00
合计无效号码数:3个
合计有效号码数:2个
b.vcf内容里有---有对应的上面三个号码
BEGIN:VCARD
VERSION:3.0
N:tianshanyuehua
X-SKYPE-USERNAME:tianshan
TZ:08:00
EMAIL:donghai@outlook.com
X-SKYPE-PROFILE:1
REV:01130911T004132Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+865555555555
X-SKYPE-PSTNNUMBER:+865555555555
REV:01130911T004134Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+864444444444
X-SKYPE-PSTNNUMBER:+864444444444
REV:01130911T004134Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+863333333333
X-SKYPE-PSTNNUMBER:+863333333333
REV:01130911T004134Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+86111111111
X-SKYPE-PSTNNUMBER:+86111111111
REV:01130911T004134Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+862222222222
X-SKYPE-PSTNNUMBER:+862222222222
REV:01130911T004134Z
END:VCARD
批处理后得出,c.vcf文件。就是下面样子。
BEGIN:VCARD
VERSION:3.0
N:tianshanyuehua
X-SKYPE-USERNAME:tianshan
TZ:08:00
EMAIL:donghai@outlook.com
X-SKYPE-PROFILE:1
REV:01130911T004132Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+865555555555
X-SKYPE-PSTNNUMBER:+865555555555
REV:01130911T004134Z
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:+864444444444
X-SKYPE-PSTNNUMBER:+864444444444
REV:01130911T004134Z
END:VCARD
打算把a.txt和b.vcf放一个文件夹里面,不改文件名,批处理后得出文件为:c.vcf
谢谢!!
作者: Lumiere 时间: 2013-9-10 16:17
回复 1# 非常感谢
所谓批处理并不是处理一个单一的例子,你的题干都没有描述清楚要解决的问题或者说对象的规律,文本的内容除了那些还有其他么?
作者: terse 时间: 2013-9-10 20:30
我也不知道记事本可以打开不- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=2" %%i in (a.txt) do echo %%i)>c.vcf
- findstr /ivg:c.vcf b.vcf >$
- (for /f "tokens=*" %%i in ($) do (
- if /i "%%i" == "END:VCARD" if /i "!s!" neq "BEGIN:VCARD" (
- for %%j in ("!s1!" "!s!" "%%i") do echo;%%~j
- echo;
- )
- set s1=!s!
- set s=%%i
- ))>c.vcf
- del $
- pause
复制代码
作者: weichenxiehou 时间: 2013-9-10 20:38
来个gawk吧,略显复杂。- gawk "BEGIN{while(getline<\"a.txt\">0)arr[$2]=1;RS=\"\";FS=\"\n\"}!(substr($2,index($2,\":\")+1) in arr){print $0 \"\n\"}" b.vcf>c.vcf
复制代码
作者: 非常感谢 时间: 2013-9-10 21:39
回复 5# weichenxiehou
导出的c.vcf是空的。
作者: weichenxiehou 时间: 2013-9-10 21:43
本帖最后由 weichenxiehou 于 2013-9-10 21:45 编辑
回复 6# 非常感谢
不知你的vcf格式文件是否为文本类型的文件,还有,你确定你的可用路径下有gawk.exe吗?我的测试结果:
e:\test>gawk "BEGIN{while(getline<\"a.txt\">0)arr[$2]=1;RS=\"\";FS=\"\n\"}!(subs
tr($2,index($2,\":\")+1) in arr){print $0 \"\n\"}" b.vcf>c.vcf
e:\test>type c.vcf
BEGIN:VCARD
X-SKYPE-PSTNNUMBER:+864444444444
END:VCARD
BEGIN:VCARD
X-SKYPE-PSTNNUMBER:+865555555555
END:VCARD
作者: 非常感谢 时间: 2013-9-10 22:23
回复 8# weichenxiehou
我是在桌面上新建了一个文件夹,在里面放了a.txt,b.vcf,还有您给的代码批处理了一下,不要笑话我哦,gawk.exe怎么做?
作者: weichenxiehou 时间: 2013-9-10 22:28
回复 10# 非常感谢
gawk.exe不是做的,是要下的,下载下来放到那个目录或%path%包含的任一目录即可。
作者: 非常感谢 时间: 2013-9-11 08:53
回复 3# terse
在另外的测试当中出了点状况,主题从新编辑了一下,希望terse有时间的时候帮忙看一下,谢谢~~~!!!
作者: terse 时间: 2013-9-11 11:07
回复 9# 非常感谢
文件小可以批处理处理(不确定你的文件最多有多大)
文件大的话 还是用GAWK吧
作者: terse 时间: 2013-9-11 11:24
- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=2" %%i in (a.txt) do echo :%%i)>#
- (for /f "tokens=*" %%i in (b.vcf) do (
- if /i "%%i" == "END:VCARD" (
- echo !str! "%%i"&set str=
- ) else set str=!str! "%%i"
- ))>$
- (for /f "tokens=*" %%i in ('findstr /ivg:# $ ') do (
- for %%j in (%%i) do echo;%%~j
- echo;
- ))>c.vcf
- del # $
- pause
复制代码
作者: 非常感谢 时间: 2013-9-11 13:27
回复 11# terse
要处理的文件大概不到10k,,,测试成功,,,谢谢了!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |