找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 79440|回复: 57

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

[复制链接]
发表于 2009-4-13 15:56:41 | 显示全部楼层 |阅读模式
&&有一文本文件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 编辑 ]
发表于 2009-4-13 16:22:12 | 显示全部楼层
如果a.txt里面没有以5结尾的数字,结果应该如何显示?
 楼主| 发表于 2009-4-13 16:39:00 | 显示全部楼层
TO二楼,文本中本就没有以3结尾的数字。。。
发表于 2009-4-13 17:10:58 | 显示全部楼层
先抛砖 感觉可以少个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 编辑 ]

评分

参与人数 2PB +15 收起 理由
随风 + 5
batman + 10 这题对兄弟来说感觉。。。

查看全部评分

发表于 2009-4-13 17:21:21 | 显示全部楼层
这个不是应该放到新手练习区么
 楼主| 发表于 2009-4-13 17:30:38 | 显示全部楼层
TO 楼上,这题对新手有点难,不适宜放在新手练习区的。
发表于 2009-4-13 17:37:43 | 显示全部楼层
如果用设置变量的方法,恐怕站长前辈又会说好的程序员应注意内存的占用问题。
在想有无别的方法?~ 肯定会有的。。
 楼主| 发表于 2009-4-13 17:41:03 | 显示全部楼层
我一直就喜欢用变量赋值法(原因已多次说明过),但以往总是没有处理数值相同的情
况,现在已经想到解决办法了。

[ 本帖最后由 batman 于 2009-4-13 17:42 编辑 ]
发表于 2009-4-13 18:12:31 | 显示全部楼层
  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!
复制代码
问下这个为什么不行  变量嵌套的还是用不好
发表于 2009-4-13 18:22:04 | 显示全部楼层

回复 9楼 的帖子

楼主出这个题目,意图应该不仅仅是考察截取最后一位字符的方法,你可以先尝试一下其它思路,比如:取余。
发表于 2009-4-13 19:57:45 | 显示全部楼层
  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 编辑 ]
发表于 2009-4-13 20:10:52 | 显示全部楼层
下面是我做的, 分类 + 排序,

  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
复制代码

评分

参与人数 1PB +3 收起 理由
batman + 3 代码可大幅优化

查看全部评分

发表于 2009-4-14 00:39:29 | 显示全部楼层
  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
复制代码

评分

参与人数 1PB +3 收起 理由
batman + 3 简洁和效率上欠妥

查看全部评分

发表于 2009-4-14 01:18:56 | 显示全部楼层
js有个sort方法
发表于 2009-4-14 04:03:15 | 显示全部楼层
这个题目已经不是新手题了啊。
各位版主也出出手吧,是否应该考虑把terse兄的帖子也打开呢
batman 版主也把自己的代码晒晒吧。
11 楼 tireless 的代码产生了临时文件、效率还行、但不能处理重复数字。
12 楼 gohai 的代码同上。
rat 版主的代码是否能提高下效率。

[ 本帖最后由 随风 于 2009-4-14 04:24 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:02 , Processed in 0.019401 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表