В данной статье я хотел бы рассмотреть, как происходит преобразование типов vbs, и какие функции используются для проверки и преобразования типов данных vbs. Как уже упоминалось, в прошлой статье, при попытке сложить число 100 и строку «100» мы получим результат 200, так как язык VBScript автоматически приводит строку в число. Если сценарий маленький, то такие «тайные» преобразования типов vbs даже полезны, но, если код разрастётся до огромных размеров, то это может сильно помешать. Поэтому, начнём с того, что рассмотрим функции, которые используются для явного приведения типов данных в сценария VBScript.
За приведения одного типа к другому отвечают следующие функции:
CBool(x) – позволяет привести значение переменной x к логическому Bool. В случае, если x равно 0, то функция вернёт False (ложь), иначе True (истина).
'************************ 'CBool.vbs 'пример работы с функцией CBool '************************ Dim A, B B="строка" A = CBool(100) 'Истина MSgBox(A) A = CBool(0) 'Ложь MSgBox(A) A = CBool("True") 'Истина MSgBox(A) A = CBool("FALSE") 'Ложь MSgBox(A) A = CBool(B) 'Вернёт ошибку!!! |
CByte(x) — позволяет привести значение x к целому Byte. Если x — строка, то за преобразование отвечают региональные настройки операционной системы. Значение x не должно превышать диапазон 0…255, иначе произойдёт ошибка. Дробные числа будут округляться:
'************************ 'CByte.vbs 'преобразование типов vbs '************************ Dim A, B B=12345 A = CByte(100) '100 MSgBox(A) A = CByte(53.7899) '54 MSgBox(A) A = CByte("100") '100 MSgBox(A) A = CByte(B) 'Вернёт ошибку!!! MSgBox(A) |
CInt(x) — приводит значение переменной x к целому Int. Диапазон не должен превышать -32 768…32 767. Правила соответствуют предыдущей функции.
'************************ 'CInt.vbs 'Пример работы с функцией CInt '************************ Dim A, B B=123453333 A = CInt(100) '100 MSgBox(A) A = CInt(30200.7899) '30201 MSgBox(A) A = CInt("-15134") '-15134 MSgBox(A) A = CInt(B) 'Вернёт ошибку!!! MSgBox(A) |
CCur(x) – позволяет привести значение x к Currency, диапазон -922 337 203 685 477.5808…922 337 203 685 477.5807:
'************************ 'CCur.vbs 'преобразование типов vbs '************************ Dim A, B B=123453333 A = CCur(1234.2345678) '1234.2346 MSgBox(A) A = CCur("-35689") '-35689 MSgBox(A) A = CCur(B) '123453333 MSgBox(A) |
CLng(x) – функция дает возможность привести значение переменной x к Long:
'************************ 'CLng.vbs 'преобразование типов vbs '************************ Dim A, B B=123453333 A = CLng(1234.2345678) '1234 MSgBox(A) A = CLng("-35689") '-35689 MSgBox(A) A = CLng(B) '123453333 MSgBox(A) |
CSng(x) – позволяет привести переменную x к Single:
'************************ 'CSng.vbs 'преобразование типов vbs '************************ Dim A, B B=12345.3333 A = CSng(1.234E-23) '1.234E-23 MSgBox(A) A = CSng("-1,345") '-1,345 MSgBox(A) A = CSng(B) '12345.33 MSgBox(A) |
CDbl(x) – функция дает возможность преобразовать значение x к Double
'************************ 'CDbl.vbs 'преобразование типов vbs '************************ Dim A, B B=12345.3333 A = CDbl(1.234E-23) '1.234E-23 MSgBox(A) A = CDbl("-2221,345") '-2221,345 MSgBox(A) A = CDbl(B) '12345.3333 MSgBox(A) |
CDate(x) – Позволяет получить значение Date. Значение x может являться строкой, числом или форматом даты (например, #20/12/1988#). Так, если есть дробное число, то целая часть будет соответствовать числу дней, начиная с 30 декабря 1899 года, если целая часть негативная, то мы получим более ранние даты. Дробная часть конвертируется во время суток, начиная с полуночи:
'************************ 'CDate.vbs 'преобразование типов vbs '************************ Dim A, B B=#30/12/1986# A = CDate(0) '0:00:00 MSgBox(A) A = CDate(-1) '29.12.1899 MSgBox(A) A = CDate(1) '31.12.1899 MSgBox(A) A = CDate("30.12.1981") '30.12.1981 MSgBox(A) A = CDate("30/12/1983") '30.12.1983 MSgBox(A) A = CDate(1.33) '31.12.1899 7:55:12 MSgBox(A) A = CDate(B) '30.12.1986 MSgBox(A) |
CStr(x) – приводит к String.
Хорошо, теперь стоит сделать одно уточнение, при использовании данных функций, меняется только значение переменной vbscript, а не объём, который она занимает в оперативной памяти. То есть, как бы вы не делали преобразование типов данных, то они и так будут иметь тип Varian – данный тип занимает 16 байт (для платформы х86) или 24 байта (для платформы х64).