VBScript将字符串转换为整数

时间:2011-05-11 21:52:35

标签: scripting vbscript

我有一个函数读取包含两行的文本文件,它读取第二行并尝试将字符串转换为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

2 个答案:

答案 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)那么 ...