Promotic

Typy danych VBScript

VBScript posiada tylko jeden typ danych określany jako Variant. Jest to specjalny rodzaj typu danych, który może zawierać różne informacje. Ponieważ Variant jest jedynym typem danych języka VBScript, jest ywracany we wszystkich jego funkcjach.
W najprostszym przypadku Variant może zawierać informację liczbową lub łańcuchową. Jeżeli są opracowywane dane liczbowe, wtedy VBScript zakłada, że są to dane liczbowe i pracuje z nimi tak jak z liczbami. Jeżeli są opracowywane dane łańcuchowe, wtedy VBScript pracuje z nimi jako z łańcuchami. Oczywiście można zastosować liczby w łańcuchach. Takie liczby, które mają być rozumaine jako łańcuchy, muszą być zamknięte w cudzysłowiu ("").

Podtypy danych Variantu:
Oprócz prostej klasyfikacji liczbowej lub łańcuchowej Variant może określać dalsze odrębności wartości liczbowych. Na przykład wartością liczbową może być informacja która przedstawia datę lub czas. Oczywiście może być również wiele innych kategorii informacji liczbowych (np. wartości logiczne). Te różne kategorie typu danych Variant są nazywane podtypami.

Następująca tabela zawiera podtypy typu danych Variant:

podtyp Opis
Boolean Wartość logiczna:
true (prawda, wartość liczbowa jest różna od zera, zazwyczaj -1) lub
false (nieprawda, wartość liczbowa jest 0)

Patrz notatki poniżej.
Byte Liczba całkowita (1 bajt) w zakresie: 0 do 255.
Integer Liczba całkowita (2 bajty) w zakresie: -32768 do 32767.
Long Liczba całkowita (4 bajty) w zakresie: -2,147,483,648 do 2,147,483,647.
Liczby szesnastkowe można wprowadzić za pomocą prefixu &H przed liczbą. Na przykład &H10 w układzie szesnastkowym przedstawia liczbę 16 w układzie dziesiątkowym.
Single Liczba rzeczywista (4 bajty) z dokładnoscią na 7 miejsc w zakresie:
-3.402823E38 do -1.401298E-45 (liczba ujemna).
1.401298E-45 do 3.402823E38 (liczba dodatnia).
Binarny format zapisu odpowiada standardowi IEEE-754 (32-bit)
Double Liczba rzeczywista (8 bajtów) z dokładnoscią na 15 miejsc w zakresie:
-1.79769313486231E308 do -4.94065645841247E-324 (liczba ujemna).
4.94065645841247E-324 do 1.79769313486231E308 (liczba dodatnia).
Binarny format zapisu odpowiada standardowi IEEE-754 (64-bit)
Date Wartość zawierająca Data oraz czas. Patrz notatki poniżej.
String Łańcuch tekstowy o maksymalne długości 2 biliony znaków w systemie kodowania znaków Unicode.
Object "wskaźnik" (odniesienie) do obiektu.
Array Tablica wartości. Patrz Jak pracować z tablicą wartości w systemie PROMOTIC.
Empty Znacznik, że wartość nie jest zinicjalizowana.
Null Znacznik, że wartość nie zawiera poprawnych danych.
Nothing Znacznik, że wartość nie zawiera poprawny obiekt.


Do konwersji danych do innego typu danych można zastosować funkcje konwersji VBScript CBool, CByte, CInt, CLng, CSng, CDbl, CDate, CStr.
Do sprawdzenia, czy zmienną można obliczyć w określonym podtypie można zastosować funkcje VBScript IsNumeric, IsDate, IsObject, IsEmpty, IsNull, IsArray. Przy pomocy funkcji VarType oraz TypeName można stwierdzić, jakiego podtypu danych jest zmienna. Jednakże dogodniejszym jest wykorzystanie metod Pm.GetVarType oraz Pm.IsValid.

Notatki dotyczące całkowitych typów danych Byte, Integer oraz Long:

Ustawienie wartości stałą w układzie szesnastkowym:
Można wprowadzić liczbę jako zmienną w układzie dziesiątkowym, na przykład:
nVal = 36524
lub w układzie szesnastkowym, kiedy jest stosowany prefiks &h, na przykład:
nVal = &h8EAC
(8EAC w układzie szesnastkowym jest 36524 w układzie dziesiątkowym).
Jednak VBScript oblicza stałe szestnatkowe w ten sposób, że jeżeli są 2-bajtowe (jak w naszym przypadku), wtedy wytwarza z nich typ danych Integer. Ponieważ wartość 8EAC ma ustawiony najwyższy bit, to stała będzie uważana za liczbę ujemną o wartości -29012!

Notatki dotyczące typu danych Boolean:

Wartość typu Boolean jest wprawdzie z logicznego punktu widzenia tylko dwuwartościowa (true / false), lecz w rzeczywistości typ ten jest zapisany jako typ danych Integer i zakłada się, że false jest równe zeru oraz true jest nie-zero.
I właśnie w ten sposób rozumiana wartość true powoduje kłopoty, ponieważ standardowo ma wprawdzie wartość -1, lecz jakakolwiek inna wartość różna od zera jest także wartością true !! Z tego wypływa, że nie zalecamy porównywania wartości zmiennych na true.
Przykład:
If value = true Then ...

W ten sposób ustawiony warunek nie jest stosowny, ponieważ jeżeli wartość zmiennej value będzie na przykład 2, wtedy warunek zostanie obliczony jako nieprawdziwy, nawet jeżeli z logicznego punktu widzenia jet prawdziwym (wartość jest nie-zero a więc jest true). Dlatego zawsze zalecane nie porównywanie z true (ponieważ true jest wielowartościowe) lecz porównywać z false (false jest zawsze zero).
W naszym przypadku jest lepiej warunek ustawić następująco:
If Not value = false Then ...

Notatki dotyczące typu danych Date:

Jeżeli wartość daty i czasu jest typu Date, wtedy wartości rok/miesiąc/dzień/godzina/minuta/sekunda można uzyskać na przykład:
- przy pomocy obiektu PmDateObject oraz jego metod GetYear/GetMonth/GetDay/GetHour/GetMinute/GetSecond itd.
- przy pomocy metod VBScript Year/Month/Day/Hour/Minute/Second.
Patrz również Pm Metody do pracy z datą i czasem oraz Funkcje VBScript do pracy z datą i czasem.

Wytworzenie daty z wartości typu String:
Jest konieczne zapisanie wymaganej daty (czas, data oraz czas) do cudzysłowia w formacie wprowadzonym w ustawieniu SO Windows "Panel Sterowania / Ustawienia lokalne / karta data". Na przykład jeżeli w ustawieniu lokalnym jest data ustawiona na format d.M.yyyy, wtedy czas można wprowadzić jako String w następujący sposób:
Dim MyTime, MyDate, MyDateTime
MyTime = CDate("18:59:33")
MyDate = CDate("31.12.2023")
MyDateTime = CDate("31.12.2023 18:59:33")


Wytworzenie daty VBScript przez zapis stałej:
Jeżeli data (czas, data oraz czas) jest wprowadzana w ten sposób, wtedy nie jest zależna od ustawienia komputera i data (czas, data oraz czas) będą zawsze w poprawnym formacie. Data (czas, data oraz czas) określa się przy pomocy znaku # w formacie #dd/mm/yy# (lub #hh:mm:ss# lub #dd/mm/yy hh:mm:ss#):
Dim MyTime, MyDate, MyDateTime
MyTime = #18:59:33#
MyDate = #23/10/05#
MyDateTime = #23/10/13 18:59:33#


Wytworzenie daty z liczby rzeczywistej:
Data (rok, miesiąc, dzień) jest prezentowana prze całkowitą część liczby rzeczywistej - jest to ilość dni od 30.12.1899. Wartość 1.0 odpowiada dacie 31.12.1899, wartość –1.0 odpowiada dacie 29.12.1899.
Czas (godzina, minuta, sekunda) jest prezentowany dziesiętną częścią liczby rzeczywistej. Wartość x.5 oznacza dokładnie południe (12:00:00) w dniu x.
Wartość od 0.0 do 1.0 to przypadek specjalny. Wartość nie jest pobierana jako data, ale tylko jako czas lub przedział czasu. Wartość 0.5 oznacza 12 godzin, wartość 1/24/60 oznacza 1 minutę.
 
Następujący skrypt będzie do zmiennej MyDateTime przypisywać przy każdym uruchomieniu skryptu wartość daty i czasu większą o jeden dzień i jedną minutę.
MyDateTime = CDate(MyDateTime + 1 + 1/24/60)
Jeżeli zmienna MyDateTime została zinicjalizowana na wartość 1, wtedy po pierwszym wykonaniu skryptu będzie wartość zmiennej równa "1.1.1900 0:01:00", po drugim wykonaniu będzie wartość równa "2.1.1900 0:02:00".
Patrz również:
© MICROSYS, spol. s r.o.