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

【练习-042】批处理将文本数值按尾数分类

&&有一文本文件a.txt,内容如下:
  1. 530 862 477 448
  2. 407 68 191 157 929
  3. 76 866 730 445 665
  4. 591 99 285 868
  5. 352 64 196 755 220
  6. 922 245 966 294 118
  7. 839 757 564 701 391
  8. 629 794
  9. 110 349 604 962 868
  10. 846 20 637 11 782
复制代码
  要求用批处理将这些数值按尾数分类排出如下:
  1. 0  530 730 220 110 20
  2. 1  191 591 701 391 11
  3. 2  862 352 922 962 782
  4. 4  64 294 564 794 604
  5. 5  445 665 285 755 245
  6. 6  76 866 196 966 846
  7. 7  477 407 157 757 637
  8. 8  448 68 868 118 868
  9. 9  929 99 839 629 349
复制代码
  本题满分10分,视情况加分(以思路为重)。
  如成功解答后请加大难度,加入数值排序,输出如下:
  1. 0 20 110 220 530 730
  2. 1 11 191 391 591 701
  3. 2 352 782 862 922 962
  4. 4 64 294 564 604 794
  5. 5 245 285 445 665 755
  6. 6 76 196 846 866 966
  7. 7 157 407 477 637 757
  8. 8 68 118 448 868 868
  9. 9 99 349 629 839 929
复制代码
  如成功完成,本人将给予额外的加分,分值视情况而定。
  注:所有数值都在3位数内,排序时请考虑数值会出现相等的情况

[ 本帖最后由 batman 于 2009-4-13 17:39 编辑 ]
***共同提高***

如果a.txt里面没有以5结尾的数字,结果应该如何显示?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

TO二楼,文本中本就没有以3结尾的数字。。。
***共同提高***

TOP

先抛砖 感觉可以少个FOR
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3.    for %%j in (%%i) do (
  4.        set str=%%j
  5.        for /l %%a in (0,1,9) do (
  6.        if "!str:~-1!"=="%%a" set _%%a=!_%%a! %%j
  7. )))
  8. for /l %%a in (0,1,9) do if not "!_%%a!"=="" echo;%%a !_%%a!
  9. pause
复制代码

[ 本帖最后由 terse 于 2009-4-13 17:12 编辑 ]
2

评分人数

    • 随风:PB + 5
    • batman: 这题对兄弟来说感觉。。。PB + 10

TOP

这个不是应该放到新手练习区么

TOP

TO 楼上,这题对新手有点难,不适宜放在新手练习区的。
***共同提高***

TOP

如果用设置变量的方法,恐怕站长前辈又会说好的程序员应注意内存的占用问题。
在想有无别的方法?~ 肯定会有的。。
心绪平和,眼藏静谧。

TOP

我一直就喜欢用变量赋值法(原因已多次说明过),但以往总是没有处理数值相同的情
况,现在已经想到解决办法了。

[ 本帖最后由 batman 于 2009-4-13 17:42 编辑 ]
***共同提高***

TOP

  1. @echo off
  2. set "n0=0 "
  3. set "n1=1 "
  4. set "n2=2 "
  5. set "n3=3 "
  6. set "n4=4 "
  7. set "n5=5 "
  8. set "n6=6 "
  9. set "n7=7 "
  10. set "n8=8 "
  11. set "n9=9 "
  12. for /f "delims=" %%a in (1.txt) do (
  13. for %%b in (%%a) do (
  14. setlocal ENABLEDELAYEDEXPANSION
  15. set num=%%b
  16. set re=n!num:~-1!
  17. call set "!re!=!!re!! %%b"
  18. ENDLOCAL
  19. )
  20. )
  21. echo %n0%
  22. echo %n1%
  23. echo %n2%
  24. echo %n3%
  25. echo !n4!
  26. echo !n5!
  27. echo !n6!
  28. echo !n7!
  29. echo !n8!
  30. echo !n9!
复制代码
问下这个为什么不行  变量嵌套的还是用不好

TOP

回复 9楼 的帖子

楼主出这个题目,意图应该不仅仅是考察截取最后一位字符的方法,你可以先尝试一下其它思路,比如:取余。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "tokens=*" %%a in (a.txt) do (
  3.   for %%i in (%%a) do set "var=00%%i" & echo !var:~-3!
  4. ))>a_tmp.txt
  5. for /f "tokens=* delims=0" %%a in ('sort a_tmp.txt') do (
  6.   set var=%%a
  7.   for %%i in (#!var:~-1!) do set %%i=!%%i! %%a
  8. )
  9. for /l %%a in (0 1 9) do if defined #%%a echo %%a!#%%a!
  10. del a_tmp.txt & pause
复制代码

[ 本帖最后由 tireless 于 2009-4-14 11:50 编辑 ]

TOP

下面是我做的, 分类 + 排序,
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. del b.txt&del 1.txt&del 2.txt
  4. for /f "usebackq delims=" %%i in (`more a.txt`) do (
  5.   for %%j in (%%i)do (
  6.     set "number=   %%j"
  7.     echo !number:~-4!>>1.txt
  8.   )
  9. )
  10. for /f "usebackq" %%i in (`sort 1.txt`) do (
  11.   echo %%i>>2.txt
  12. )
  13. del 1.txt
  14. for /l %%i in (0,1,9) do (
  15. set /a input=0
  16. for /f "delims=" %%j in (2.txt) do (
  17. set /a num=%%j
  18. set /a flag=!num:~-1,1!
  19. if !flag! equ %%i (
  20. if !input! equ 0 (
  21. set /p=!flag! <nul>>b.txt
  22. )
  23. set /a input=1
  24. set /p=!num! <nul >>b.txt
  25. )
  26. )
  27. if !input! equ 1 (
  28. echo. >>b.txt
  29. )
  30. )
  31. start b.txt
  32. del 1.txt&del 2.txt
  33. exit
复制代码
1

评分人数

    • batman: 代码可大幅优化PB + 3

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.   for %%b in (%%a) do (
  4.     call :p %%b
  5.   )
  6. )
  7. for /l %%i in (0,1,9) do (
  8.   if defined f%%i (
  9.     call :sortstr str%%i newstr
  10.     echo !newstr!
  11.   )
  12. )
  13. pause
  14. goto :eof
  15. :p
  16. set s=%1
  17. for /l %%i in (0,1,9) do (
  18.   if "!s:~-1!"=="%%i" (
  19.     if not defined f%%i2 set f%%i2=1&set str%%i=%%i
  20.     set str%%i=!str%%i! %%b
  21.     if not defined f%%i set f%%i=1
  22.     goto :eof
  23.   )
  24. )
  25. goto :eof
  26. :sortstr
  27. setlocal
  28. for %%a in (!%1!) do (
  29. set/ajj+=1
  30. set s!jj!=%%a
  31. )
  32. call :sort s %jj%
  33. for /l %%a in (1,1,%jj%) do (
  34. set ss=!ss! !s%%a!
  35. )
  36. endlocal&set %2=%ss%&goto :eof
  37. :sort arrname %ubound%
  38. set a=%1&set u=%2&set i=2
  39. :sort_1
  40. if %i% gtr %u% goto :eof
  41. set /a %a%0=%a%%i%,j=i-1
  42. :sort_2
  43. if !%a%0! lss !%a%%j%! (
  44. set /a k=j+1
  45. set /a %a%!k!=%a%%j%,j-=1
  46. goto sort_2
  47. )
  48. set /a k=j+1
  49. set /a %a%%k%=%a%0,i+=1
  50. goto sort_1
复制代码
1

评分人数

    • batman: 简洁和效率上欠妥PB + 3

TOP

js有个sort方法

TOP

这个题目已经不是新手题了啊。
各位版主也出出手吧,是否应该考虑把terse兄的帖子也打开呢
batman 版主也把自己的代码晒晒吧。
11 楼 tireless 的代码产生了临时文件、效率还行、但不能处理重复数字。
12 楼 gohai 的代码同上。
rat 版主的代码是否能提高下效率。

[ 本帖最后由 随风 于 2009-4-14 04:24 编辑 ]
技术问题请到论坛发帖求助!

TOP

返回列表