中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 续求:修改代码支持报错信息
作者:
标题: 续求:修改代码支持报错信息 上一主题 | 下一主题
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
状态 离线
『第 10 楼』:  

谢谢HAT关心,剩下的10% 多是由于人为输入的乱码(比如半个汉字)造成的。

http://www.cn-dos.net/forum/view ... ighlight=%2Byouaoyi

这个帖子中的问题如果能做到应该能解决,不过暂时还没有解决办法。

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
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: