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

[文本处理] [已解决]批处理如何实现批量求和?

[复制链接]
发表于 2015-8-25 13:15:37 | 显示全部楼层
本帖最后由 aa77dd@163.com 于 2015-8-25 13:40 编辑

回复 15# serena

有 bug, 当求和结果绝对值 < 0.1 时 或者 负数小数 取符号时, 都会触发

5 楼已更新


如楼下所言, 你的数据文件按 用户号排序, 在 EXCEL 里分类汇总就 OK 了, 很简单的
发表于 2015-8-25 13:19:09 | 显示全部楼层
本帖最后由 pcl_test 于 2015-8-25 13:35 编辑

vbs
  1. Set Dict = CreateObject("Scripting.Dictionary")
  2. Set fso = CreateObject("Scripting.FileSystemObject")
  3. Set File1 = fso.OpenTextFile(".\测试.txt", 1)
  4. Set File2 = fso.CreateTextFile(".\结果.txt", 2)
  5. Do While File1.AtEndOfStream <> True
  6.     arr = split(File1.ReadLine,"        ")
  7.         If Dict.Exists(arr(0)) <> True Then
  8.             Dict.Add arr(0), arr(1)
  9.         Else
  10.             tmp = CDbl(Dict.Item(arr(0)))+CDbl(arr(1))
  11.             Dict.Item(arr(0))=tmp
  12.         End If
  13. Loop
  14. objKeys = Dict.Keys
  15. objItems = Dict.Items
  16. For i = 0 To Dict.Count -1
  17.     File2.WriteLine objKeys(i)&"="&formatnumber(objItems(i),2,true)
  18. Next
  19. File1.Close
  20. File2.Close
  21. Dict.RemoveAll
  22. Set Dict = Nothing
  23. Msgbox "完成"
复制代码
用Excel也可很方便合并求和
发表于 2015-8-29 17:47:47 | 显示全部楼层
本帖最后由 回家路上 于 2015-8-30 11:37 编辑

学了set,请教了5楼,也没写好。待改进O(∩_∩)O!

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=. " %%i in ('sort a.txt') do (
  3.         set d=%%j
  4.         if "%%i"=="!flag!" (
  5.                 set /a "neg=^!(!d:~1!+!d!),pos=^!neg,int+=%%j,s=^!((int>>31)-(%%j>>31)),n=^!s,dec-=s*(%%k+0),dec+=n*(%%k+0),int+=dec/10,dec=dec%%10"
  6.         ) else (
  7.                 if defined flag (
  8.                         set /a "dec=(1+2*(dec>>31))*dec"
  9.                         echo;!flag!=!int!.!dec!
  10.                 )
  11.                 set flag=%%i&set int=%%j&set dec=%%k
  12.         )
  13. )
  14. set /a "dec=(1+2*(dec>>31))*dec"
  15. echo;!flag!=!int!.!dec!
  16. pause & exit /b
复制代码

  1. set dec=!dec!00000&set dec=!dec:~,5!&set ndec=%%k00000&set ndec=!ndec:~,5!&set int=!int:*0=!&set nint=%%j&set nint=!nint:*0=!
  2. set /a rst=!nint!!ndec!+!int!!dec!&set int=!rst:~,-5!&set dec=!rst:~-5!
复制代码
发表于 2015-8-29 18:17:19 | 显示全部楼层
再开个bat、JS混编的

  1. @if(0)==(0) echo off&sort "a.txt"|cscript -nologo -e:jscript "%~f0"&pause&exit /b&@end

  2. var content = WScript.StdIn.ReadAll();
  3. var re = {};
  4. content.replace(/([^\s]+)\s+(.*)/g,function($0,$1,$2){
  5.         re[$1] = re[$1]?parseFloat(re[$1])+parseFloat($2):$2;
  6. });
  7. for(var i in re) WSH.Echo(i+"="+re[i]);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 21:07 , Processed in 0.017225 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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