[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] (已解决)批处理如何提取文本中的电话号码并及删除重复号

本帖最后由 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
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  1. @echo off
  2. for /f "delims=" %%i in ('findstr /i "电话:" a.txt') do (
  3.     for /f "tokens=2-5 delims=:(),- " %%a in ("%%i") do (
  4.         set #%%a%%b=.
  5.         set #%%c%%d=.
  6.     )
  7. )
  8. for /f "delims=#=." %%a in ('set #') do echo,%%a
  9. pause
复制代码
1

评分人数

    • 非常感谢: 感谢您的代码,继续等待...........技术 + 1
初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 2# xxpinqz

电话:         (0471)4444444
电话:         (0471)4444444
电话:(0833)55555555
电话:(0833)55555555
没想到主题里面有上面号码的话,批处理后:0833正常,0471不正常。
        0471
01011111111
010222222222
0103333333
0207777777
02088888888
02099999999
083355555555
4444444

TOP

回复 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

TOP

本帖最后由 非常感谢 于 2013-11-11 00:51 编辑

回复 2# xxpinqz

自己研究了一下,大概下面这几个格式会出现零碎的数字排列。因为逗号后面的数字有些不带区号,纵向排列后,分不清楚是哪的了。
电话:(0452)2415555, 4006579989
电话:(023)67456745, 67259555
电话:025-84620871, 65018888
电话:         (0471)4444444
是否可以这样,先将保留的电话那一行,逗号后半部分删除,然后对逗号前半部分删除中文和符号?至于0471那个格式,希望还是保留号码,,,谢谢了。

TOP

那逗号后面的号码要吗?
还有 电话:(022)26419999-8656  后面的 8656 怎么处理
如能把问题一次说清楚 至少可以减少更改代码的次数

TOP

本帖最后由 非常感谢 于 2013-11-11 04:25 编辑

回复 6# terse
1.逗号后面的号码全部不要了,缺了区号,失去意义了
2.8656 留着好了。
没能看全文件里的号码格式的多样性,抱歉了,不过上面的代码对我学习还是有帮助的,,,上传的附件是一部分,希望您参考!谢谢您!

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%i in ('findstr /i "电话:" a.txt') do (
  3.     set str=%%j
  4.     set "str=!str:(=!"
  5.     for %%a in (!str:(^=!) do (
  6.         set "str=%%a"
  7.         if "!str:)=!" neq "!str!" (
  8.            set "str=!str:)=!"
  9.            echo !str!
  10.         ) else if "!str:-=!" == "!str!" (
  11.                if "!str:~10!" neq "" echo !str!
  12.           ) else echo !str:-=!
  13.     )
  14. )
  15. pause
复制代码
1

评分人数

TOP

回复 8# terse
简单测试了一下,貌似少了重复行过滤,下面是我测试后的数据。
0103333333
0207777777
02088888888
02099999999
01011111111
010222222222
01011111111
010222222222
01011111111
010222222222
04714444444
04714444444
083355555555
083355555555
02361560471

TOP

回复 9# 非常感谢
恩 没有对重复项处理 修改之
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%i in ('findstr /i "电话:" a.txt') do (
  3.     set s=&set str=%%j
  4.     set "str=!str:(=!"
  5.     for %%a in (!str:(^=!) do (
  6.         set "str=%%a"
  7.         if "!str:)=!" neq "!str!" (
  8.            set "s=!str:)=!"
  9.         ) else if "!str:-=!" == "!str!" (
  10.                if "!str:~10!" neq "" set "s=!str!"
  11.           ) else set "s=!str:-=!"
  12.             if "!s!" neq "" if not defined $!s! echo !s!&set $!s!=$
  13.     )
  14. )
  15. pause
复制代码
1

评分人数

TOP

回复 10# terse

7楼有一句:8656 留着好了。
我想知道您代码的那一行决定着它的去留?如果要去掉它,是否只需改动一行代码,想学习和了解一下。

TOP

回复 11# 非常感谢


    你对比一下8楼和10楼的代码就看到了吧

TOP

本帖最后由 terse 于 2013-11-11 14:46 编辑

回复 11# 非常感谢
代码前11行都处理好了
如果要去掉这个貌似分机号的 可以11行后加上
  1. for /f %%j in ("!s:-= !") do set s=%%j
复制代码
1

评分人数

TOP

回复10楼
第5行往下能解释一下吗,没太看明白
谢谢

TOP

返回列表