标题: [文本处理] (已解决)批处理如何提取文本中的电话号码并及删除重复号 [打印本页]
作者: 非常感谢 时间: 2013-11-10 16:00 标题: (已解决)批处理如何提取文本中的电话号码并及删除重复号
本帖最后由 pcl_test 于 2016-7-15 17:59 编辑
文件夹下有一些txt文本,内容大同小异,需要批量处理,谢谢大家帮忙!
批处理前:思路是先只保留电话那一行,对其按类纵向排列,然后去掉中文和符号,及重复行过滤。请看批处理后的结果。
25 公里
? 2013 - GS(2012)6003号 - Data ? NavInfo & CenNavi & 道道通
共有593条结果
地址:
电话:010-3333333
电话:(020)7777777, (020)88888888
加入收藏夹
地址:钟村镇
电话:(020)99999999
加入收藏夹
首页<上一页891011下一页>
地址:广场街1
地址:十八甫北路17
电话:010-11111111, 010-222222222
电话:010-11111111, 010-222222222
电话:010-11111111, 010-222222222
批处理后:
01011111111
010222222222
0103333333
0207777777
02088888888
02099999999
作者: xxpinqz 时间: 2013-11-10 21:56
- @echo off
- for /f "delims=" %%i in ('findstr /i "电话:" a.txt') do (
- for /f "tokens=2-5 delims=:(),- " %%a in ("%%i") do (
- set #%%a%%b=.
- set #%%c%%d=.
- )
- )
- for /f "delims=#=." %%a in ('set #') do echo,%%a
- pause
复制代码
作者: 非常感谢 时间: 2013-11-10 23:22
回复 2# xxpinqz
电话: (0471)4444444
电话: (0471)4444444
电话:(0833)55555555
电话:(0833)55555555
没想到主题里面有上面号码的话,批处理后:0833正常,0471不正常。
0471
01011111111
010222222222
0103333333
0207777777
02088888888
02099999999
083355555555
4444444
作者: 非常感谢 时间: 2013-11-10 23:38
回复 3# 非常感谢
也有很多零碎的数字出现。为了把问题说清楚,我把附件上传了,谢谢您!
0311
0312
0351
03513012525
0371
0376
0378
03782827566
03782905373
0379
0411
0431
043187938111
0432
0433
04332760188
0452
0453
879169690431
87943099
87959593
87970500
87976067
87981117
88081416
8820120
88598120
88751333
88761319
88786396
88789999
8879688888766107
89176600
89363999
89615660
89671111
作者: 非常感谢 时间: 2013-11-11 00:45
本帖最后由 非常感谢 于 2013-11-11 00:51 编辑
回复 2# xxpinqz
自己研究了一下,大概下面这几个格式会出现零碎的数字排列。因为逗号后面的数字有些不带区号,纵向排列后,分不清楚是哪的了。
电话:(0452)2415555, 4006579989
电话:(023)67456745, 67259555
电话:025-84620871, 65018888
电话: (0471)4444444
是否可以这样,先将保留的电话那一行,逗号后半部分删除,然后对逗号前半部分删除中文和符号?至于0471那个格式,希望还是保留号码,,,谢谢了。
作者: terse 时间: 2013-11-11 01:21
那逗号后面的号码要吗?
还有 电话:(022)26419999-8656 后面的 8656 怎么处理
如能把问题一次说清楚 至少可以减少更改代码的次数
作者: 非常感谢 时间: 2013-11-11 04:23
本帖最后由 非常感谢 于 2013-11-11 04:25 编辑
回复 6# terse
1.逗号后面的号码全部不要了,缺了区号,失去意义了
2.8656 留着好了。
没能看全文件里的号码格式的多样性,抱歉了,不过上面的代码对我学习还是有帮助的,,,上传的附件是一部分,希望您参考!谢谢您!
作者: terse 时间: 2013-11-11 10:45
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%i in ('findstr /i "电话:" a.txt') do (
- set str=%%j
- set "str=!str:(=!"
- for %%a in (!str:(^=!) do (
- set "str=%%a"
- if "!str:)=!" neq "!str!" (
- set "str=!str:)=!"
- echo !str!
- ) else if "!str:-=!" == "!str!" (
- if "!str:~10!" neq "" echo !str!
- ) else echo !str:-=!
- )
- )
- pause
复制代码
作者: 非常感谢 时间: 2013-11-11 12:03
回复 8# terse
简单测试了一下,貌似少了重复行过滤,下面是我测试后的数据。
0103333333
0207777777
02088888888
02099999999
01011111111
010222222222
01011111111
010222222222
01011111111
010222222222
04714444444
04714444444
083355555555
083355555555
02361560471
作者: terse 时间: 2013-11-11 13:21
回复 9# 非常感谢
恩 没有对重复项处理 修改之- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%i in ('findstr /i "电话:" a.txt') do (
- set s=&set str=%%j
- set "str=!str:(=!"
- for %%a in (!str:(^=!) do (
- set "str=%%a"
- if "!str:)=!" neq "!str!" (
- set "s=!str:)=!"
- ) else if "!str:-=!" == "!str!" (
- if "!str:~10!" neq "" set "s=!str!"
- ) else set "s=!str:-=!"
- if "!s!" neq "" if not defined $!s! echo !s!&set $!s!=$
- )
- )
- pause
复制代码
作者: 非常感谢 时间: 2013-11-11 14:26
回复 10# terse
7楼有一句:8656 留着好了。
我想知道您代码的那一行决定着它的去留?如果要去掉它,是否只需改动一行代码,想学习和了解一下。
作者: DAIC 时间: 2013-11-11 14:41
回复 11# 非常感谢
你对比一下8楼和10楼的代码就看到了吧
作者: terse 时间: 2013-11-11 14:44
本帖最后由 terse 于 2013-11-11 14:46 编辑
回复 11# 非常感谢
代码前11行都处理好了
如果要去掉这个貌似分机号的 可以11行后加上- for /f %%j in ("!s:-= !") do set s=%%j
复制代码
作者: suseek 时间: 2013-11-12 22:37
回复10楼
第5行往下能解释一下吗,没太看明白
谢谢
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |