Board logo

标题: [文本处理] [已解决]批处理如何查找排序后数列的缺少项? [打印本页]

作者: januapr    时间: 2009-8-23 18:53     标题: [已解决]批处理如何查找排序后数列的缺少项?

123.txt文件内容如下:
  1. 0001
  2. 0002
  3. 0003
  4. 0004
  5. 0005
  6. 0007
  7. 0009
  8. 0010
  9. 0015
  10. 0016
  11. 0017
  12. 0021
  13. 0023
  14. 0024
  15. 0025
  16. 0028
  17. 0029
  18. 0030
复制代码
这些都是固定的4位数字,把它们从小到大排序后往往有一些数缺少了,
从而造成这个数列并不是连续数的数列,请问如何找出其中缺少了的数?

[ 本帖最后由 januapr 于 2009-8-23 22:47 编辑 ]
作者: 基拉freedom    时间: 2009-8-23 21:14

  1. for /l %%i in (1 1 30) do (
  2. set p=000000%%i
  3. set p=!p:~-4!
  4. find “!p!” 123.txt>nul||echo !p!
  5. )
复制代码
这样吗?

[ 本帖最后由 基拉freedom 于 2009-8-23 21:17 编辑 ]
作者: tireless    时间: 2009-8-23 21:55

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=* delims=0" %%a in (123.txt) do (
  4.     set %%a=.
  5.     set end=%%a
  6. )
  7. set /p start=<123.txt
  8. for /f "tokens=* delims=0" %%a in ("%start%") do set start=%%a
  9. for /l %%b in (%start% 1 %end%) do (
  10.     if not defined %%b (
  11.         set var=000%%b
  12.         echo !var:~-4!
  13.     )
  14. )
  15. pause
  16. exit
复制代码
  1. @echo off
  2. if "%~1"=="echo" goto echo
  3. for /f %%a in ('"%~f0" echo ^| findstr /vg:123.txt') do echo %%a
  4. pause
  5. exit
  6. :echo
  7. setlocal enabledelayedexpansion
  8. set /p start=<123.txt
  9. for /f %%a in (123.txt) do set end=%%a
  10. for /l %%a in (1%start% 1 1%end%) do (
  11.     set var=%%a
  12.     echo !var:~1!
  13. )
复制代码

[ 本帖最后由 tireless 于 2009-8-23 22:23 编辑 ]
作者: januapr    时间: 2009-8-23 22:27     标题: 回复 2楼 的帖子

先谢谢二楼的朋友,你的方法可以解决问题了!
有个小建议,以后把代码写完整嘛,要不新入门的朋友又看不懂了,呵呵!
  1. @echo off
  2. for /l %%i in (1 1 30) do (
  3.   setlocal enabledelayedexpansion
  4.   set p=000000%%i
  5.   set p=!p:~-4!
  6.   find "!p!" 123.txt>nul||echo !p!
  7.   endlocal
  8. )
  9. pause
复制代码
偷偷的告诉你,
“!p!” 123这里你用了两个空格相信是你的手误,嘻嘻!
作者: 基拉freedom    时间: 2009-8-23 22:31

恩 lz的建议会听的^_^
作者: januapr    时间: 2009-8-23 22:44     标题: 回复 3楼 的帖子

非常高效呀!
先谢谢了!
但由于水平有限,我还要慢慢看才能看得明!。。。。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2