Conversii de tipuri de date
Funcțiile de conversie din scripturile TapHome — TOSTRING cu șiruri de format pentru numere și date, TODOUBLE, TOBYTES și ENCODE / DECODE pentru escaparea XML și Base64.
Funcțiile de conversie transformă valorile în text și invers: numerele și datele în text formatat, textul în numere și octeți și textul în Base64 sau într-o formă sigură pentru XML. Conversia BCD (TOBCD, FROMBCD) se află pe pagina Operații pe biți, iar conversia culorilor (HSVTORGB, RGBTOHSV) pe pagina Culori.
TOSTRING
TOSTRING convertește orice valoare în text — numerele și datele cu un șir de format .NET opțional, colecțiile de octeți și blob-urile cu o codificare de text.
| |
| Intrare | Rezultat |
|---|---|
| șir de caractere | Neschimbat. |
| număr | Fără format, numărul simplu cu punct zecimal (21.5). Cu format, consultați Șiruri de format. |
datetime | Fără format yyyy/MM/dd hh:mm:ss.fff (ceas de 12 ore, fără AM sau PM); cu format, modelul dat. |
collection<uint8>, blob | Octeții decodificați ca text. Al doilea argument este numele codificării, implicit iso-8859-1, de exemplu "utf-8". |
| altă colecție | Eroarea Cannot cast collection of ‘X’ to string. |
Exemplu
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"Într-un script listener, TOSTRING(RECEIVEDMSG.PAYLOAD, "utf-8") citește mesajul primit ca text — consultați RECEIVEDMSG.
Șiruri de format
TOSTRING formatează numerele și datele cu șiruri de format .NET și folosește întotdeauna punctul zecimal, indiferent de setările de limbă ale unității de control.
| Format | Intrare | Ieșire |
|---|---|---|
"F2" | 231.4721 | "231.47" — număr fix de zecimale |
"F0" | 21.5 | "22" — rotunjit la un număr întreg |
"0.0" | 7 | "7.0" — model personalizat |
"00" | 7 | "07" — zerouri la început |
"X", "X4" | 255 | "FF", "00FF" — hexazecimal, cu majuscule |
"yyyy-MM-dd" | datetime | "2026-01-15" |
"HH:mm" | datetime | "08:30" — ceas de 24 de ore |
"dd.MM.yyyy HH:mm:ss" | datetime | "15.01.2026 08:30:00" |
Observații
- Un format care conține un
Xmajuscul convertește mai întâi valoarea într-un număr întreg pe 32 de biți, apoi o afișează în hexazecimal. - În formatele de dată
HHeste ceasul de 24 de ore, iarhhceasul de 12 ore;MMeste luna, iarmmminutul.
Exemplu — marcaj de timp pentru un jurnal sau o cerere HTTP
VAR now := NOW();
"Updated " + TOSTRING(now, "dd.MM.yyyy HH:mm");TODOUBLE
TODOUBLE citește un număr dintr-un text care folosește punctul zecimal și returnează NaN când textul nu este un număr.
| |
Returnează — double. NaN când textul nu poate fi citit; 0 pentru Null.
Observații — Textul se citește întotdeauna cu punct zecimal. Virgula contează ca separator de mii, așa că "1,5" dă 15. Când sursa folosește virgula zecimală, înlocuiți mai întâi virgula.
Exemplu
TODOUBLE("232");
# Result: 232
TODOUBLE("-192.332");
# Result: -192.332
TODOUBLE("some text");
# Result: NaN
TODOUBLE(REPLACE("21,5", ",", "."));
# Result: 21.5TOBYTES
TOBYTES codifică textul într-o colecție de octeți (collection<uint8>), cu iso-8859-1, dacă nu se specifică altă codificare.
| |
Observații — Documentația mai veche numea această funcție TOBYTEARRAY; acest nume nu există în limbaj. Folosiți TOBYTES pentru a pregăti date pentru SENDDATA sau pentru UNPACKVALUE.
Exemplu
VAR bytes := TOBYTES("Hello");
LENGTH(bytes);
# Result: 5
VAR euro := TOBYTES("€", "utf-8");
LENGTH(euro);
# Result: 3Erori — TOBYTES - argument 1 must be a string (textul este Null); TOBYTES - unknown encoding.
ENCODE
ENCODE escapează textul pentru XML ("xml") sau îl codifică în Base64 ("base64", din octeții UTF-8 ai textului).
| |
Observații
"xml"înlocuiește&,',",>și<cu&,',",>și<.- Un text gol returnează un șir gol. Numele codificării nu ține cont de majuscule și minuscule.
"base64"necesită Core 2022.2 sau mai nou."base64"codifică octeții UTF-8 ai textului. Pentru date binare, cum sunt octeții criptați, folosiți TOBASE64.
Exemplu
ENCODE("a<b & c>d", "xml");
# Result: "a<b & c>d"
ENCODE("user:pass", "base64");
# Result: "dXNlcjpwYXNz"Exemplu — antet de autorizare HTTP Basic
VAR auth := "Authorization: Basic " + ENCODE("user:pass", "base64");
VAR response := SENDHTTPREQUEST("/status", "GET", "", auth);Erori — ENCODE Unknown encoding. Valid values are ‘xml’, ‘base64’.
DECODE
DECODE inversează ENCODE: transformă entitățile XML înapoi în caractere ("xml") sau decodifică Base64 în text UTF-8 ("base64").
| |
Exemplu
DECODE("dXNlcjpwYXNz", "base64");
# Result: "user:pass"
DECODE("a < b", "xml");
# Result: "a < b"
DECODE(PARSEJSON(json, "payload"), "base64");Observații — "base64" returnează text UTF-8, așa că octeții peste 0x7F nu rămân intacți. Decodificați datele binare, cum sunt octeții criptați, cu FROMBASE64.
Erori — The provided text does not have the base64 format.; DECODE Unknown encoding. Valid values are ‘xml’, ‘base64’.