![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 17:59 |
共 47,811 主题排行 / 349,896 发帖 / 今日 1 篇 / 48,254 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 续求:修改代码支持报错信息 |
| 可打印版本 944 / 10 |
| 第1楼 youaoyi | 发表于 2008-09-06 22:16 |
| 初级用户 发帖 67 积分 154 | |
|
续求:修改代码支持报错信息 原问题:如何将文本中指定列的数值累加求得合计数?
huahua0919 朋友提供的代码附后,可以满足需求并且计算速度也很快。 但在实测中发现在某列数据计算出现问题时无法查找原因所在, 比如下面的样本,第五行和第十三行,合计第七列时会导致报错, 如果文本中数据量很大,极难查找问题到底出现在哪一行。 特再次求助:修改代码使遇到错误时,能显示出是哪行出现了错误。 样本.txt 1|0757 | 合同 | 其它 | 殷晏 | 200837015029392 | 4000.0 | 2|0752 | 合同 | 经济原因 | 葛宝 | 200000026251 | 10232.35 | 3|2810 | 合同 | 经济原因 | 王传 | 2002810000013079 | 479.0 | 4|2810 | 合同 | 经济原因 | 王传 | 20028000013079 | 479.0 | 5|2810 | 合同 | 经济原因 | 王传 | 200231000013079dashan | 6|2810 | 合同 | 经济原因 | 王传 | 200237281000013079 | 23.72 | 7|2810 | 合同 | 经济原因 | 王传 | 200237810000013079 | 260.28 | 8|0808 | 合同 | 经济原因 | 梁汝 | 2005300005411 | 280.0 | 9|1104 | 合同 | 其它 | 张成 | 2008374015010838 | 1630.0 | 10|1104 | 合同 | 其它 | 张成 | 200830015010838 | 36.0 | 11|1104 | 合同 | 其它 | 张成 | 200837015010845 | 10.0 | 12|1104 | 合同 | 其它 | 张成 | 20083715010845 | 10.0 | 13|1104 | 合同 | 其它 | 张成 | 20083602015010845 | 四湖 | ======================================= huahua0919 朋友提供的代码, 经 HAT 帮忙现修改如下: @echo off @title 求某列数据的合计数 echo. echo. set /p file= 请将要处理的文本拖放到这里: echo. echo 请输入您准备合计计算的数值位于第几列。 echo. set /p lie= 待合计的数据在文本中所处的列为: set /a lie-=1 set file=%file:"=% echo. cls echo. echo. echo. echo 正在计算,请稍候...... echo. echo. echo. echo. cd.>temp.vbs >temp.vbs echo dim sum >>temp.vbs echo sum=0 >>temp.vbs echo set Fso=createobject^("scripting.filesystemobject"^) >>temp.vbs echo set fs=Fso.opentextfile^("%file%",1^) >>temp.vbs echo Do While fs.atEndOfLine ^<^> true >>temp.vbs echo x=split^(fs.readline,"|"^) >>temp.vbs echo sum=sum+x^(%lie%^) >>temp.vbs echo loop >>temp.vbs echo wscript.echo " 所选列数据合计为:"^&Formatnumber(sum,2) cscript//nologo temp.vbs echo. @del temp.vbs>nul2>nul echo. echo. pause [ Last edited by youaoyi on 2008-9-13 at 10:57 PM ] |
|
| 第2楼 HAT | 发表于 2008-09-06 22:32 |
| 版主 发帖 5,017 积分 9,023 | |
| 第3楼 slore | 发表于 2008-09-06 22:42 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
。。。为什么不直接VBS汗。
|
|
| 第4楼 youaoyi | 发表于 2008-09-06 22:46 |
| 初级用户 发帖 67 积分 154 | |
|
因为VBS自己一窍不通,为了这个问题大汗淋漓研究了一天都没解决.....
还有很多其它方面的工作都是在一个批处理中完成的。 多谢 HAT 帮忙,现又发现一个麻烦的问题,继续求助 : [ Last edited by youaoyi on 2008-9-13 at 10:46 PM ] |
|
| 第5楼 youaoyi | 发表于 2008-09-13 22:48 |
| 初级用户 发帖 67 积分 154 | |
|
huahua0919 朋友提供的代码, 经 HAT 帮忙现修改成一楼的样子。
实测中发现在某列数据计算出现问题时无法查找原因所在, 比如一楼的样本,第五行和第十三行,在合计第七列数据时会导致报错, 如果文本中数据量很大,极难查找问题到底出现在哪一行。 特再次求助:修改代码使遇到错误时,能显示出是哪行出现了错误。 [ Last edited by youaoyi on 2008-9-13 at 10:50 PM ] |
|
| 第6楼 slore | 发表于 2008-09-14 12:47 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
isnumeric
|
|
| 第7楼 slore | 发表于 2008-09-14 13:32 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
再次修改 sum = 0
If WSH.Arguments.Count < 1 Then MsgBox "缺少统计文本!",vbCritical,"错误" WSH.Quit End If vbFile = WSH.Arguments(0) col = InputBox("请输入要统计的列:","输入列号",7) - 1 If col = "" Then WSH.Quit Set objFso = CreateObject("Scripting.FileSystemObject") Set objFile = objFso.OpenTextFile(vbFile,1) Do Until objFile.AtEndOfStream n = n + 1 x = Split(objFile.ReadLine,"|") If col > UBound(x) Then ExsitErr = True ErrLine = ErrLine & n & "," Else If IsNumeric(x(col)) Then If Not ExsitErr Then sum = sum + x(col) Else ExsitErr = True ErrLine = ErrLine & n & "," End If End If Loop If ExsitErr Then ErrLine = Left(ErrLine,Len(ErrLine) - 1) MsgBox "第" & ErrLine & "行有错误数据请修正!",vbInformation,"错误" Else MsgBox "所选列数据合计为:" & FormatNumber(sum,2) End If Set objFile = Nothing Set objFso = Nothing [ Last edited by slore on 2008-9-14 at 02:05 PM ] |
|
| 第8楼 youaoyi | 发表于 2008-09-14 14:17 |
| 初级用户 发帖 67 积分 154 | |
|
佩服 ! 截止至目前 , 在大家的帮助下,
此类文本处理的相关问题 已解决 90% 以上。 在此深表感谢! |
|
| 第9楼 HAT | 发表于 2008-09-14 15:16 |
| 版主 发帖 5,017 积分 9,023 | |
|
剩下的10%呢?
|
|
| 第10楼 youaoyi | 发表于 2008-09-14 17:36 |
| 初级用户 发帖 67 积分 154 | |
|
谢谢HAT关心,剩下的10% 多是由于人为输入的乱码(比如半个汉字)造成的。
http://www.cn-dos.net/forum/viewthread.php?tid=42703&fpage=1&highlight=%2Byouaoyi 这个帖子中的问题如果能做到应该能解决,不过暂时还没有解决办法。 |
|
| 第11楼 slore | 发表于 2008-09-14 17:47 |
| 铂金会员 发帖 2,478 积分 5,212 | |
|
VBS可以逐个检查字符,不过你那么大的文本估计也很慢。
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |