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

[文本处理] 【练习-047】对文本内容按要求排序并计算数值和的批处理

&&有a.txt,内容如下:
  1. 张三        33
  2. 李四        32
  3. 李四        62
  4. 赵六        91
  5. 赵六        64
  6. 张三        35
  7. 王五        82
  8. 张三        52
  9. 王五        66
  10. 张三        42
  11. 李四        78
  12. 张三        75
  13. 李四        21
  14. 王五        53
  15. 赵六        78
  16. 张三        85
  17. 李四        96
  18. 王五        87
  19. 张三        8
  20. 李四        13
  21. 李四        32
  22. 张三        13
  23. 赵六        30
  24. 王五        0
  25. 王五        18
  26. 赵六        66
  27. 王五        54
复制代码
  要求用批处理将文本按张三、李四、王五、赵六的顺序进行排序,并计算各人的数值和,同时在前面加上行号,生成b.txt如下:
  1. 1        张三        33
  2. 2        张三        35
  3. 3        张三        52
  4. 4        张三        42
  5. 5        张三        75
  6. 6        张三        85
  7. 7        张三        8
  8. 8        张三        13
  9. 9        合计        343
  10. 10        李四        32
  11. 11        李四        62
  12. 12        李四        78
  13. 13        李四        21
  14. 14        李四        96
  15. 15        李四        13
  16. 16        李四        32
  17. 17        合计        334
  18. 18        王五        82
  19. 19        王五        66
  20. 20        王五        53
  21. 21        王五        87
  22. 22        王五        0
  23. 23        王五        18
  24. 24        王五        54
  25. 25        合计        360
  26. 26        赵六        91
  27. 27        赵六        64
  28. 28        赵六        78
  29. 29        赵六        30
  30. 30        赵六        66
  31. 31        合计        329
复制代码
  本题满分15分,视情况加分,以思路为重(请版主们暂不解答)

[ 本帖最后由 batman 于 2009-6-24 17:37 编辑 ]
***共同提高***

一定要按 张三、李四这样的顺序吗? 李四、张三这样应该也可以吧?
另外你的练习应该是 046 了  (^_^)
http://www.bathome.net/viewthread.php?tid=4284&highlight=%A1%BE%C1%B7%CF%B0

[ 本帖最后由 随风 于 2009-6-6 16:41 编辑 ]
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2009-6-6 16:34 发表
一定要按 张三、李四这样的顺序吗? 李四、张三这样应该也可以吧?
另外你的练习应该是 046 了  (^_^)
http://www.bathome.net/viewthread.php?tid=4284&highlight=%A1%BE%C1%B7%CF%B0

呵呵,本题就是要按指定的顺序,不然一个sort不就完事了。
***共同提高***

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (a.txt) do set %%a=!%%a!,%%b
  3. set n=1
  4. (for %%? in (张三 李四 王五 赵六) do (
  5.   for %%a in (!%%?!) do (
  6.     echo !n!        %%?        %%a
  7.     set /a n+=1,%%?+=%%a
  8.   )
  9.   echo !n!        合计        !%%?!
  10. ))>b.txt
复制代码

[ 本帖最后由 tireless 于 2009-6-6 17:37 编辑 ]

TOP

楼上的有错误
***共同提高***

TOP

  1. @echo off&Setlocal Enabledelayedexpansion
  2. for %%a in (张三 李四 王五 赵六) do (
  3.    set num=0
  4.    for /f "tokens=1,2" %%i in ('type a.txt') do (
  5.       if /i "%%a"=="%%i" (
  6.          set /a n+=1,num+=%%j
  7.          echo.!n!   %%i   %%j
  8.       )
  9.    )
  10.    set /a n+=1
  11.    echo.!n!   合计   !num!
  12. )
  13. echo.&pause
复制代码
1

评分人数

    • batman: 效率是个大问题PB + 8

TOP

给出我的第一种方法(和tireless思路一样):
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (a.txt) do set "_%%a=!_%%a! %%b"
  3. for %%a in (张三 李四 王五 赵六) do (
  4.      for %%b in (!_%%a!) do set /a num+=%%b,n+=1&echo !n! %%a %%b>>b.txt
  5.      set /a n+=1&echo !n! 合计 !num!>>b.txt&set /a num=0
  6. )      
  7. start b.txt
复制代码
***共同提高***

TOP

try

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1-2 delims= " %%i in (1.txt) do (
  4. set /a num1+=1
  5. if !num1! lss 10 (set num=000!num1!) else (
  6. if !num1! lss 100 (set num=00!num1!) else (
  7.   if !num1! lss 1000 (set num=0!num1!)
  8. )
  9. )
  10. set  #%%i_!num!=%%j
  11. )
  12. for /f "tokens=1-3 delims=#_=" %%i in ('set #') do (
  13. set /a #%%i_a+=%%k
  14. )
  15. for /f "tokens=1-3 delims=#_=" %%i in ('set #') do (
  16. set /a n+=1
  17. if "%%j" equ "a" (echo  !n! 合计 %%k) else (echo  !n! %%i %%k)
  18. )
  19. pause>nul
复制代码

[ 本帖最后由 curious 于 2009-6-6 19:47 编辑 ]

TOP

楼上的好像没看清楚题意吧,你的排序在哪里?
***共同提高***

TOP

try

兄弟:最好把代码运行一下,现在和您的要求完全一样了。

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::构建变量
  4. for /f "tokens=1-2 delims= " %%i in (1.txt) do (
  5. set /a num1+=1
  6. if !num1! lss 10 (set num=000!num1!) else (
  7. if !num1! lss 100 (set num=00!num1!) else (
  8.   if !num1! lss 1000 (set num=0!num1!)
  9. )
  10. )
  11. set  #%%i_!num!=%%j
  12. )
  13. ::求和
  14. for /f "tokens=1-3 delims=#_=" %%i in ('set #') do (
  15. set /a #%%i_a+=%%k
  16. )
  17. ::输出
  18. for /f "tokens=1-3 delims=#_=" %%i in ('set #') do (
  19. set /a n+=1
  20. if "%%j" equ "a" (echo  !n! 合计 %%k) else (echo  !n! %%i %%k)
  21. )
  22. pause>nul
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. (for %%i in (张三 李四 王五 赵六) do (
  3.     for /f "tokens=1,2" %%a in ('findstr "%%i" "a.txt"') do (
  4.         set/a n+=1,sn+=%%b
  5.         echo !n!        %%a        %%b
  6.     )
  7.     set/a n+=1 &echo !n!        合计        !sn!
  8.     set/a sn=0
  9. ))>b.txt
复制代码
1

评分人数

    • batman: 这也就是第二种方法PB + 15

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. if defined 张三 goto :skip
  3. for %%a in (张三 李四 王五 赵六) do (set/a n+=1&set %%a=!n!)
  4. set ver=
  5. set/a 合计=0,n=1
  6. (for %%a "tokens=2,3" in ('%0^|sort') do (
  7.     set /a 合计+=%%b
  8.     if defined ver if !ver! neq %%a echo !n! 合计 !合计!&set/a n+=1&set/a 合计=0
  9.     echo !n! %%a %%b
  10.     set ver=%%a
  11.     set/a n+=1
  12. )
  13. echo !n! 合计 !合计!)>b.txt
  14. start b.txt
  15. exit/b
  16. :skip
  17. for /f "tokens=1,2" %%a in (a.txt) do echo !%%a! %%a %%b
  18. goto :eof
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1,2" %%a in (a.txt) do set "%%a=!%%a! %%b"&set/a .%%a+=%%b
  3. set n=0
  4. for %%a in (张三 李四 王五 赵六) do (
  5. for %%b in (!%%a!) do set/a n+=1&echo !n! %%a %%b
  6. set/a n+=1
  7. echo !n! 合计 !.%%a!
  8. )
  9. pause
复制代码
1

评分人数

TOP

我的跟6楼的一样,但是6楼因为使用了echo. 所以效率有点低。
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (张三 李四 王五 赵六) do (
  3.     set sum=0
  4.     for /f "tokens=1,2" %%a in (a.txt) do (
  5.         if "%%i" equ "%%a" (
  6.             set /a n+=1
  7.             set /a sum+=%%b
  8.             echo !n!        %%a        %%b
  9. )
  10. )
  11. set /a n+=1
  12. echo !n!        合计        !sum!
  13. )
  14. pause
复制代码
(*^_^*)

TOP

返回列表