VBScript преобразовать строку в целое число - PullRequest
1 голос
/ 12 мая 2011

У меня есть функция, которая читает текстовый файл, содержащий две строки, она читает вторую строку и пытается преобразовать строку в длинное целое число. Моя проблема в том, что она не преобразует строку, код функции выглядит следующим образом:

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"), оно работает нормально. Я не уверен, что мне не хватает, любая помощь приветствуется.

UPDATE

Хорошо, поэтому я попытался запустить скрипт снова, на этот раз заменив значение в текстовом файле, которое было 20110511123500, на что-то более короткое 2011, и это сработало. Похоже, это была проблема точности. Это приводит ко второму вопросу: какое наибольшее число VBScript может обрабатывать в отношении преобразования? Указанное числовое значение представляет собой объем дискового пространства на жестком диске, поэтому мне нужно иметь возможность читать большие числа. Спасибо за подсказку Пепто.

ОБНОВЛЕНИЕ 2

Использование двойного сделал трюк, спасибо G Mastros .

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Возвращаясь сюда немного назад, но не нужно вообще ничего конвертировать.Все переменные в VBScript имеют тип Variant.Язык не поддерживает истинные преобразования.Вот почему можно сравнивать значения разных типов.Вы можете просто проверить значение с помощью IsNumeric () и затем продолжить.

Вам также следует объединить вложенные операторы If.Поскольку во внешней ветви нет оператора Else, их можно объединить:

Если не IsEmpty (valString) и IsNumeric (valString), то ...

1 голос
/ 12 мая 2011

Максимальные числовые значения приведены в списке ниже:

Int16: от -32768 до 32767

Int32: от -2147483648 до 2147483647

Int64: от -9223372036854775808 до 9223372036854775807

Double: -1,79769313486232E + 308 до 1,77969313486232E + 308

Long: от -9223372036854775808 до 9223372036854775807

Short: от -32768 до 32767

В пространстве имен System.Numerics также есть новый тип данных, представленный в .NET 4.0, называемый BigInteger (System.Numerics.BigInteger), который может хранить невероятно большие числа.

Более подробную информацию можно найти здесь

CDbl добился цели, потому что для преобразования требовался правильный тип данных на основе общего размера чисел.

...