|
youaoyi
初级用户
积分 154
发帖 67
注册 2007-10-31
状态 离线
|
『楼 主』:
续求:修改代码支持报错信息
原问题:如何将文本中指定列的数值累加求得合计数?
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 ]
|
|
2008-9-6 22:16 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
2 楼』:
@echo off&setlocal enabledelayedexpansion
set /p file=请将要处理的文本拖放到这里:
echo.&set /p lie= 待合计的数据所处的列为:
set /a lie-=1
set file=%file:"=%
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 sum
cscript//nologo temp.vbs
pause
|
|
|
2008-9-6 22:32 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
3 楼』:
。。。为什么不直接VBS汗。
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2008-9-6 22:42 |
|
|
youaoyi
初级用户
积分 154
发帖 67
注册 2007-10-31
状态 离线
|
『第
4 楼』:
因为VBS自己一窍不通,为了这个问题大汗淋漓研究了一天都没解决.....
还有很多其它方面的工作都是在一个批处理中完成的。
多谢 HAT 帮忙,现又发现一个麻烦的问题,继续求助 :
[ Last edited by youaoyi on 2008-9-13 at 10:46 PM ]
|
|
2008-9-6 22:46 |
|
|
youaoyi
初级用户
积分 154
发帖 67
注册 2007-10-31
状态 离线
|
『第
5 楼』:
huahua0919 朋友提供的代码, 经 HAT 帮忙现修改成一楼的样子。
实测中发现在某列数据计算出现问题时无法查找原因所在,
比如一楼的样本,第五行和第十三行,在合计第七列数据时会导致报错,
如果文本中数据量很大,极难查找问题到底出现在哪一行。
特再次求助:修改代码使遇到错误时,能显示出是哪行出现了错误。
[ Last edited by youaoyi on 2008-9-13 at 10:50 PM ]
|
|
2008-9-13 22:48 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
6 楼』:
isnumeric
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2008-9-14 12:47 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
7 楼』:
再次修改
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 ]
此帖被 +10 点积分 点击查看详情 评分人:【 moniuming 】 | 分数: +8 | 时间:2008-9-14 14:27 | 评分人:【 BC 】 | 分数: +2 | 时间:2008-9-14 17:47 |
|
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2008-9-14 13:32 |
|
|
youaoyi
初级用户
积分 154
发帖 67
注册 2007-10-31
状态 离线
|
『第
8 楼』:
佩服 ! 截止至目前 , 在大家的帮助下,
此类文本处理的相关问题 已解决 90% 以上。
在此深表感谢!
|
|
2008-9-14 14:17 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
9 楼』:
剩下的10%呢?
|
|
|
2008-9-14 15:16 |
|
|
youaoyi
初级用户
积分 154
发帖 67
注册 2007-10-31
状态 离线
|
|
2008-9-14 17:36 |
|
|
slore
铂金会员
积分 5212
发帖 2478
注册 2007-2-8
状态 离线
|
『第
11 楼』:
VBS可以逐个检查字符,不过你那么大的文本估计也很慢。
|
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore |
|
2008-9-14 17:47 |
|