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

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

[复制链接]
发表于 2009-6-8 18:03:51 | 显示全部楼层

回复 15楼 的帖子

对文本进行了多次循环,影响效率,再改改,争取只循环一次 (^_^)
发表于 2009-6-8 18:50:17 | 显示全部楼层

回复 16楼 的帖子

再改,就跟batman的代码一样了,先对整个文本过一遍把数字全部赋给变量。这样只对文本进行一次循环。
看来最佳答案只能类似batman的了。
发表于 2009-6-10 21:11:10 | 显示全部楼层

  1. @echo off
  2. for %%. in (张三 李四 王五 赵六) do call :ca %%.
  3. start b.txt
  4. exit
  5. :ca
  6. setlocal enabledelayedexpansion
  7. if exist b.txt for /f "tokens=1-3 delims= " %%i in (b.txt) do set n=%%i
  8. for /f "tokens=1-3 delims=: " %%a in ('findstr /n %1 a.txt') do (set/a n+=1&set/a m+=%%c&&>>b.txt echo !n! %1 %%c)
  9. set/a n+=1&&echo !n! 合计 %m% >>b.txt
  10. goto :eof
复制代码

[ 本帖最后由 dali 于 2009-6-10 21:12 编辑 ]

评分

参与人数 1PB +5 收起 理由
batman + 5 效率,还是效率问题!

查看全部评分

发表于 2009-6-11 21:22:46 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims= " %%i in (a.txt) do (
  4.         if "%%i"=="张三" set /a zs+=%%j && echo %%i        %%j>>张三.txt
  5.         if "%%i"=="李四" set /a ls+=%%j && echo %%i        %%j>>李四.txt
  6.         if "%%i"=="王五" set /a ww+=%%j && echo %%i        %%j>>王五.txt
  7.         if "%%i"=="赵六" set /a zl+=%%j && echo %%i        %%j>>赵六.txt
  8. )
  9. echo 合计        !zs!>>张三.txt
  10. echo 合计        !ls!>>李四.txt
  11. echo 合计        !ww!>>王五.txt
  12. echo 合计        !zl!>>赵六.txt
  13. (for /f "delims=" %%i in (张三.txt 李四.txt 王五.txt 赵六.txt) do (
  14.         set /a i+=1
  15.         echo !i!        %%i
  16. ))>b.txt
  17. del 张三.txt 李四.txt 王五.txt 赵六.txt
  18. start b.txt
复制代码

评分

参与人数 1PB +5 收起 理由
batman + 5 鼓励鼓励

查看全部评分

发表于 2021-10-9 17:02:01 | 显示全部楼层

  1. @echo off
  2. Setlocal EnableDelayedExpansion
  3. set "str=张三 李四 王五 赵六"
  4. for /f "tokens=1,2" %%i in (a.txt) do ( set "%%i=!%%i! %%j" )
  5. set num=1
  6. for %%i in (%str%) do (
  7.     set sum=0
  8.     for %%j in (!%%i!) do ( echo !num!   %%i        %%j>>b.txt & set /a num+=1 & set /a sum+=%%j )
  9.     echo !num!   总计        !sum!>>b.txt & set /a num+=1
  10. )
复制代码
发表于 2021-10-10 15:36:45 | 显示全部楼层
@echo off&setlocal enabledelayedexpansion
(for %%a in (张三 李四 王五 赵六) do (
   set /a sum=0
   set /a cout=0
   for /f "tokens=1,2 delims= " %%i in (a.txt) do (
      if "%%i"=="%%a" (
      set /a cout+=1
      echo !cout!        %%i        %%j
      set /a sum+=%%j)
   )
set /a cout+=1
echo,!cout!        合计        !sum!
))>b.txt
pause
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 05:41 , Processed in 0.030241 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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