Konwersje typów danych
Funkcje konwersji w skryptach TapHome — TOSTRING z ciągami formatującymi liczb i dat, TODOUBLE, TOBYTES oraz ENCODE / DECODE dla znaków specjalnych XML i Base64.
Funkcje konwersji zamieniają wartości na tekst i z powrotem: liczby i daty na sformatowany tekst, tekst na liczby i bajty, a tekst na Base64 lub postać bezpieczną dla XML. Konwersja BCD (TOBCD, FROMBCD) jest opisana na stronie Operacje bitowe, a konwersja kolorów (HSVTORGB, RGBTOHSV) na stronie Kolory.
TOSTRING
TOSTRING konwertuje dowolną wartość na tekst — liczby i daty z opcjonalnym ciągiem formatującym .NET, kolekcje bajtów i bloby z kodowaniem tekstu.
| |
| Wejście | Wynik |
|---|---|
| tekst | Bez zmian. |
| liczba | Bez formatu zwykła liczba z kropką dziesiętną (21.5). Z formatem — zobacz Ciągi formatujące. |
datetime | Bez formatu yyyy/MM/dd hh:mm:ss.fff (zegar 12-godzinny, bez AM i PM); z formatem według podanego wzorca. |
collection<uint8>, blob | Bajty odczytane jako tekst. Drugi argument to nazwa kodowania, domyślnie iso-8859-1, na przykład "utf-8". |
| inna kolekcja | Błąd Cannot cast collection of ‘X’ to string. |
Przykład
TOSTRING(192, "X");
# Result: "C0"
TOSTRING(192, "X4");
# Result: "00C0"
TOSTRING(123.34, "F4");
# Result: "123.3400"
TOSTRING(123.34, "F0");
# Result: "123"
TOSTRING(BYTECOLLECTION("48656c6c6f"));
# Result: "Hello"
TOSTRING(BYTECOLLECTION("48656c6c6f"), "iso-8859-1");
# Result: "Hello"W skrypcie listener TOSTRING(RECEIVEDMSG.PAYLOAD, "utf-8") odczytuje odebraną wiadomość jako tekst — zobacz RECEIVEDMSG.
Ciągi formatujące
TOSTRING formatuje liczby i daty ciągami formatującymi .NET i zawsze używa kropki dziesiętnej, niezależnie od ustawień językowych jednostki sterującej.
| Format | Wejście | Wyjście |
|---|---|---|
"F2" | 231.4721 | "231.47" — stała liczba miejsc po przecinku |
"F0" | 21.5 | "22" — zaokrąglenie do liczby całkowitej |
"0.0" | 7 | "7.0" — własny wzorzec |
"00" | 7 | "07" — zera wiodące |
"X", "X4" | 255 | "FF", "00FF" — szesnastkowo, wielkie litery |
"yyyy-MM-dd" | datetime | "2026-01-15" |
"HH:mm" | datetime | "08:30" — zegar 24-godzinny |
"dd.MM.yyyy HH:mm:ss" | datetime | "15.01.2026 08:30:00" |
Uwagi
- Format zawierający wielką literę
Xnajpierw konwertuje wartość na 32-bitową liczbę całkowitą, a potem wypisuje ją szesnastkowo. - W formatach dat
HHto zegar 24-godzinny, ahhzegar 12-godzinny;MMto miesiąc, ammminuta.
Przykład — znacznik czasu do logu lub żądania HTTP
VAR now := NOW();
"Updated " + TOSTRING(now, "dd.MM.yyyy HH:mm");TODOUBLE
TODOUBLE odczytuje liczbę z tekstu z kropką dziesiętną i zwraca NaN, gdy tekst nie jest liczbą.
| |
Zwraca — double. NaN, gdy tekstu nie da się odczytać; 0 dla Null.
Uwagi — Tekst jest zawsze odczytywany z kropką dziesiętną. Przecinek liczy się jako separator tysięcy, więc "1,5" daje 15. Gdy źródło używa przecinka dziesiętnego, najpierw zamień przecinek.
Przykład
TODOUBLE("232");
# Result: 232
TODOUBLE("-192.332");
# Result: -192.332
TODOUBLE("some text");
# Result: NaN
TODOUBLE(REPLACE("21,5", ",", "."));
# Result: 21.5TOBYTES
TOBYTES koduje tekst do kolekcji bajtów (collection<uint8>), z kodowaniem iso-8859-1, chyba że podasz inne.
| |
Uwagi — Starsza dokumentacja nazywała tę funkcję TOBYTEARRAY; taka nazwa w języku nie istnieje. Użyj TOBYTES, aby przygotować dane dla SENDDATA lub dla UNPACKVALUE.
Przykład
VAR bytes := TOBYTES("Hello");
LENGTH(bytes);
# Result: 5
VAR euro := TOBYTES("€", "utf-8");
LENGTH(euro);
# Result: 3Błędy — TOBYTES - argument 1 must be a string (tekst jest Null); TOBYTES - unknown encoding.
ENCODE
ENCODE zamienia znaki specjalne tekstu dla XML ("xml") lub koduje go w Base64 ("base64", z bajtów UTF-8 tekstu).
| |
Uwagi
"xml"zamienia&,',",>i<na&,',",>i<.- Pusty tekst zwraca pusty ciąg. W nazwie kodowania wielkość liter nie ma znaczenia.
"base64"wymaga Core 2022.2 lub nowszego.
Przykład
ENCODE("a<b & c>d", "xml");
# Result: "a<b & c>d"
ENCODE("user:pass", "base64");
# Result: "dXNlcjpwYXNz"Przykład — nagłówek autoryzacji HTTP Basic
VAR auth := "Authorization: Basic " + ENCODE("user:pass", "base64");
VAR response := SENDHTTPREQUEST("/status", "GET", "", auth);Błędy — ENCODE Unknown encoding. Valid values are ‘xml’, ‘base64’.
DECODE
DECODE odwraca ENCODE: zamienia encje XML z powrotem na znaki ("xml") lub dekoduje Base64 na tekst UTF-8 ("base64").
| |
Przykład
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
DECODE("a < b", "xml");
# Result: "a < b"
DECODE(PARSEJSON(json, "payload"), "base64");Błędy — The provided text does not have the base64 format.; DECODE Unknown encoding. Valid values are ‘xml’, ‘base64’.