我有一个函数读取包含两行的文本文件,它读取第二行并尝试将字符串转换为Long整数。我的问题是它没有转换字符串,函数的代码如下:
Function getLastUsed (txtFilePath)
'Read timestamp created by full backup script
Const ForReading = 1
'Error Handling
On Error Resume Next
Err.Clear
Set objFile = Fso.OpenTextFile(txtFilePath, ForReading)
'Read if file was successfully opened, else return 0
If Err.Number = 0 Then
'Value will be on the second line, so readLine twice
Dim valString
valString = objFile.Readline
valString = objFile.Readline
objFile.Close
'If not empty continue, else return 0
If Not IsEmpty(valString) Then
'Return value is IsNumeric, else return 0
If IsNumeric(valString) Then
Dim valInt
valInt = CLng(valString)'<--Won't convert, variable valInt is empty after this line
getLastUsed = valInt
Else
getLastUsed = 0
End If
Else
getLastUsed = 0
End If
Else
getLastUsed = 0
End If
End Function
我正在使用Visual Studio进行调试,查看'valInt'变量,在调用CLng或CInt后它是空的。但是,如果我对某个值进行硬编码,例如valInt = CLng("18")
则可以正常工作。我不确定我缺少什么,感谢任何帮助。
更新
好的,所以我尝试再次运行脚本,这次将文本文件中的值替换为20110511123500
更短的2011
并且它有效。所以这似乎是一个精确的问题。这导致了第二个问题,就转换而言,VBScript可以处理的最大数量是多少?指示的数值是硬盘驱动器上的磁盘空间量,因此我需要能够读取大量数据。感谢提示Pepto。
更新2
使用double做了诀窍,谢谢 G Mastros 。
答案 0 :(得分:1)
下面列出的最大数值大小:
Int16:-32768至32767
Int32:-2147483648至2147483647
Int64:-9223372036854775808至9223372036854775807
双倍:-1.79769313486232E + 308至1.79769313486232E + 308
长:-9223372036854775808至9223372036854775807
短:-32768到32767
在System.Numerics命名空间中还有一个在.NET 4.0中引入的新数据类型,称为BigInteger(System.Numerics.BigInteger),它可以存储非常大的数字。
可以找到更多信息here
CDbl成功了,因为转换需要基于数字总大小的正确数据类型。
答案 1 :(得分:1)
在这里向后退一点,但根本不需要进行任何转换。 VBScript中的所有变量都是Variant类型。该语言不支持真正的转换。这就是为什么可以在不同类型的值之间进行比较的原因。您只需使用IsNumeric()检查该值,然后继续。
您还应该组合嵌套的If语句。由于外部分支中没有Else语句,因此可以将它们组合在一起:
如果不是IsEmpty(valString)和IsNumeric(valString)那么 ...