Testo e collezioni
Funzioni degli script TapHome per stringhe, collezioni e array di byte — LENGTH, GETAT, SETAT, APPEND, INSERT, REMOVEAT, COPY, INDEXOF, REPLACE, SPLIT, COMPARE, BYTECOLLECTION, UINT16COLLECTION, BOOLCOLLECTION.
Queste funzioni accettano come primo argomento una stringa o una collezione e lavorano con i caratteri o gli elementi tramite un indice che parte da zero.
- Una collezione viene modificata sul posto da
APPEND,INSERT,REMOVEAT,SETATeREPLACE, che restituiscono la stessa collezione. Per una stringa restituiscono una nuova stringa. - Un blob, come
RECEIVEDMSG.PAYLOAD, è accettato solo daLENGTH,GETAT,COPYeINDEXOF. - Un primo argomento
Nullinterrompe lo script con Parameter 1 is null, tranne inLENGTH(0),INDEXOF(-1) eSPLIT(una collezione vuota);COMPAREsegnala COMPARE arguments 1 and 2 must be strings.
ENCODE e DECODE (XML, Base64) sono nella pagina Conversioni tra tipi di dati, EQUALS nella pagina Logica e diagnostica. I tipi di collezione sono descritti in Tipi di dati.
LENGTH
LENGTH restituisce il numero di caratteri di una stringa, di elementi di una collezione o di byte di un blob; per un numero restituisce la dimensione del suo tipo in byte e per Null 0.
LENGTH("Hello World");
# Result: 11
LENGTH(40);
# Result: 8 (a decimal literal is a double)
LENGTH(BYTECOLLECTION("010203"));
# Result: 3GETAT
GETAT restituisce l’elemento in una posizione: un char di una stringa, un elemento di una collezione o un byte di un blob.
| |
Valore restituito — per una stringa un char, non una stringa di una lettera; confrontalo con un letterale di carattere come 'l'.
GETAT("Hello", 2);
# Result: 'l' (Char)
GETAT({1, 2, 4}, 2);
# Result: 4SETAT
SETAT sostituisce l’elemento in una posizione; una collezione viene modificata sul posto, per una stringa il carattere nella posizione viene sostituito dal testo di newValue.
| |
SETAT("Hello", 1, "a");
# Result: "Hallo"
SETAT("Hello", 4, "o World");
# Result: "Hello World"
VAR c := {1, 2, 4};
SETAT(c, 2, 3);
# Result: {1, 2, 3}, and c is now {1, 2, 3}APPEND
APPEND aggiunge un valore alla fine di una stringa o di una collezione; una collezione viene modificata sul posto e restituita, non copiata.
| |
Note — L’aggiunta di una collezione con lo stesso tipo di elemento aggiunge tutti i suoi elementi. Un singolo valore viene aggiunto come un elemento. Una collezione con un altro tipo di elemento è un errore (Cannot append ‘UInt8’ collection to ‘Double’ collection).
VAR c := {1, 2};
APPEND(c, 3);
# Result: {1, 2, 3}, and c is now {1, 2, 3}
APPEND(c, {4, 5});
# Result: {1, 2, 3, 4, 5}
APPEND("abc", "def");
# Result: "abcdef"INSERT
INSERT inserisce un valore in una posizione: una sottostringa in una stringa, oppure un elemento in una collezione, sul posto.
| |
INSERT("Hello", 5, " World");
# Result: "Hello World"
INSERT("Hello", 1, "i");
# Result: "Hiello"
INSERT({1, 2, 4}, 2, 3);
# Result: {1, 2, 3, 4}REMOVEAT
REMOVEAT rimuove count caratteri o elementi, 1 per impostazione predefinita, a partire da una posizione.
| |
REMOVEAT("Hello", 1);
# Result: "Hllo"
REMOVEAT("Hello", 3, 2);
# Result: "Hel"
REMOVEAT({1, 2, 3, 4}, 2, 2);
# Result: {1, 2}COPY
COPY restituisce una nuova stringa, collezione o blob con length elementi a partire da from; senza length copia fino alla fine, senza from l’intero valore.
| |
COPY("Hello World", 2);
# Result: "llo World"
COPY("Hello World", 2, 4);
# Result: "llo "
COPY(BYTECOLLECTION("01020304"), 2, 1);
# Result: {0x03}Errori — Parameter 1 must be a non-empty string quando si copia da una stringa vuota.
INDEXOF
INDEXOF restituisce la posizione della prima occorrenza di un valore in una stringa, in una collezione o in un blob, oppure -1 se non viene trovato.
| |
INDEXOF("Hello World", "Wor");
# Result: 6
INDEXOF("Hello World", "or12");
# Result: -1
INDEXOF(BYTECOLLECTION("ab cd ee ff 01 02"), 2);
# Result: 5Errori — Parameter 2 must be a non-empty string quando in una stringa si cerca una stringa vuota.
REPLACE
REPLACE sostituisce ogni occorrenza di un valore: da una stringa si ottiene una nuova stringa, in una collezione gli elementi corrispondenti vengono sostituiti sul posto.
| |
REPLACE("Hello", "l", "");
# Result: "Heo"
REPLACE("Hello", "lo", "22");
# Result: "Hel22"
REPLACE(BYTECOLLECTION("050607"), 5, 9);
# Result: {0x09, 0x06, 0x07}Errori — Empty string to replace quando what è una stringa vuota.
SPLIT
SPLIT divide una stringa a ogni separatore e restituisce una collection<string>; le parti vuote vengono mantenute.
| |
Parametri — separator è un char, una stringa, una collection<char> o una collection<string>.
SPLIT("1;2;3;4", ";");
# Result: {"1", "2", "3", "4"}
SPLIT("1;2;3.4", "2;");
# Result: {"1;", "3.4"}
SPLIT("1;2;3.4", {"2", "3."});
# Result: {"1;", ";", "4"}COMPARE
COMPARE confronta due stringhe e restituisce un numero negativo quando la prima viene prima della seconda nell’ordinamento, 0 quando sono uguali e un numero positivo quando viene dopo; considera solo il segno, non la grandezza.
| |
Note — Senza opzioni un’unità di controllo restituisce la differenza dei codici di carattere dei primi caratteri diversi, quindi le lettere maiuscole vengono prima delle minuscole. Con CompareOptions (IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal, None) le stringhe vengono confrontate secondo le regole linguistiche della cultura invariante, uguali su ogni unità di controllo, adattate da quelle opzioni.
COMPARE("abc", "abc");
# Result: 0
COMPARE("abc", "ABC");
# Result: 32
COMPARE("a", "c");
# Result: -2
COMPARE("abc", "ABC", CompareOptions.IgnoreCase);
# Result: 0Errori — COMPARE arguments 1 and 2 must be strings.
BYTECOLLECTION
BYTECOLLECTION crea una collection<uint8>, da una stringa di cifre esadecimali oppure riempita con un dato numero di byte a zero (1 – 2048).
| |
Note — I caratteri della stringa che non sono cifre esadecimali vengono ignorati, quindi spazi, virgole e trattini possono separare i byte; il numero di cifre rimanenti deve essere pari.
BYTECOLLECTION("00 0A FF");
# Result: {0x00, 0x0A, 0xFF}
BYTECOLLECTION("aa, be1-1,fe");
# Result: {0xAA, 0xBE, 0x11, 0xFE}
BYTECOLLECTION(6);
# Result: 6 zero bytesErrori — Parameter must be a non-empty string; Length must be a multiple of 2; Maximum array length is 2048; Invalid array length. Must be greater than 0 and less than or equal 2048.
UINT16COLLECTION
UINT16COLLECTION crea una collection<uint16> di 1 – 2048 zeri, di solito riempita con PACKVALUE e scritta nei registri Modbus con MODBUSWBLOCK.
collection<uint16> regs := UINT16COLLECTION(4);
PACKVALUE(regs, 0, BigEndianFloat, 21.5);
PACKVALUE(regs, 2, Uint16, 100);
MODBUSWBLOCK(H, 200, regs);Disponibile — Core 2026.1, build 39001 e successivi.
Vedi anche — Dati binari, Funzioni Modbus.
BOOLCOLLECTION
BOOLCOLLECTION crea una collection<bool> di 1 – 2048 valori FALSE, di solito per scrivere coil Modbus con MODBUSWBLOCK.
collection<bool> coils := BOOLCOLLECTION(8);
SETAT(coils, 0, TRUE);
MODBUSWBLOCK(C, 0, coils);Disponibile — Core 2026.1, build 39001 e successivi.