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

[数值计算] 【练习-058】批处理找出不正确的局向

出题目的:
    加深大家对if多条件判断的理解
    复习补位比较法
解题要求:
    代码简洁、高效、不生成临时文件
    请管理组和技术组暂缓解答,但可跟贴提示
加分原则:
    满分15分,视情况加分以思路为重
题目如下:
    有一个文本文件a.txt(如下),每行两列,其中第二列为交换点名称,第一列为每个交换点的电话号码段(一个交换点有一个
或多个号码段)。有另一文本文件b.txt(如下),每行两列,其中第二列也为交换点名称,第一列为号码局向,局向也就是指的号码
段,其计算方法是将文本中数值后面添加0并补足7位,如72581变成7258100,721变成7210000。现要求对b.txt中所有的局向根据
a.txt进行比对判断出局向不正确的行并输出c.txt(如下)。判断举例:如721 淦田,判断7210000在a.txt哪个号码段中,并判断这个
号码段后的交换点名称是不是淦田,如是的就是正确局向,不是的就是错误局向要输出。
a.txt
  1. 7210000-7219999 古岳峰
  2. 7230000-7239999 古岳峰
  3. 7257000-7257999 淦田
  4. 7258000-7278199 淦田
  5. 7270000-7274999 砖桥
  6. 7275000-7278999 砖桥
  7. 7280000-7289999 砖桥
  8. 7295000-7299999 朱亭
  9. 7347000-7348999 朱亭
  10. 7350000-7359999 朱亭
  11. 7372000-7374999 雷打石
  12. 7375000-7379999 古岳峰
  13. 7453000-7457999 雷打石
  14. 7458000-7459999 雷打石
  15. 7473000-7473999 白关
  16. 7480000-7489999 白关
  17. 7490000-7494999 白关
  18. 7495000-7499999 仙井
  19. 7610000-7619999 县城
  20. 7620000-7629999 县城
  21. 7670000-7676999 仙井
  22. 7677000-7679999 县城
  23. 7680000-7689999 县城
  24. 7690000-7693999 仙井
  25. 7694000-7699999 县城
复制代码
b.txt
  1. 721 古岳峰
  2. 721 淦田
  3. 721 白关
  4. 721 雷打石
  5. 723 砖桥
  6. 723 古岳峰
  7. 7257 仙井
  8. 7257 淦田
  9. 7257 县城
  10. 72581 淦田
  11. 72581 砖桥
  12. 7276 砖桥
  13. 7276 朱亭
  14. 7276 雷打石
  15. 7276 县城
  16. 728 朱亭
  17. 728 白关
  18. 728 砖桥
  19. 7296 朱亭
  20. 7348 淦田
  21. 7348 砖桥
  22. 7348 朱亭
  23. 7348 仙井
  24. 7373 雷打石
  25. 7373 古岳峰
  26. 7373 县城
  27. 7373 白关
  28. 7375 古岳峰
  29. 7375 淦田
  30. 7456 雷打石
  31. 7456 白关
  32. 7456 古岳峰
  33. 7473 淦田
  34. 7473 白关
  35. 7473 仙井
  36. 748 白关
  37. 748 仙井
  38. 7496 仙井
  39. 7496 白关
  40. 7496 县城
  41. 7496 雷打石
  42. 761 仙井
  43. 761 县城
  44. 761 白关
  45. 761 朱亭
  46. 7672 县城
  47. 7672 仙井
  48. 7693 县城
  49. 7693 仙井
复制代码
c.txt
  1. 721 淦田
  2. 721 白关
  3. 721 雷打石
  4. 723 砖桥
  5. 7257 仙井
  6. 7257 县城
  7. 72581 砖桥
  8. 7276 朱亭
  9. 7276 雷打石
  10. 7276 县城
  11. 728 朱亭
  12. 728 白关
  13. 7348 淦田
  14. 7348 砖桥
  15. 7348 仙井
  16. 7373 古岳峰
  17. 7373 县城
  18. 7373 白关
  19. 7375 淦田
  20. 7456 白关
  21. 7456 古岳峰
  22. 7473 淦田
  23. 7473 仙井
  24. 748 仙井
  25. 7496 白关
  26. 7496 县城
  27. 7496 雷打石
  28. 761 仙井
  29. 761 白关
  30. 761 朱亭
  31. 7672 县城
  32. 7693 县城
复制代码

[ 本帖最后由 batman 于 2010-1-22 22:31 编辑 ]
***共同提高***

回复 2楼 的帖子

这个代码出不了正确结果,因为b.txt中任一个局向不可能与a.txt每行都匹配。。。

[ 本帖最后由 batman 于 2010-1-23 22:03 编辑 ]
***共同提高***

TOP

给出本人的解:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=1,2" %%a in (b.txt) do (
  3.     set "str=%%a0000000"&set "str=!str:~,7!"&set "flag="
  4.     for /f "tokens=1-3 delims=- " %%c in (a.txt) do (
  5.         if not defined flag if !str! geq %%c if !str! leq %%d if "%%b" equ "%%e" set "flag=a"
  6.     )
  7.     if not defined flag echo %%a %%b
  8. ))>c.txt
  9. start c.txt
复制代码
***共同提高***

TOP

返回列表