Text a kolekcie
Funkcie skriptu TapHome pre reťazce, kolekcie a bajtové polia — LENGTH, GETAT, SETAT, APPEND, INSERT, REMOVEAT, COPY, INDEXOF, REPLACE, SPLIT, COMPARE, BYTECOLLECTION, UINT16COLLECTION, BOOLCOLLECTION.
Tieto funkcie berú ako prvý argument reťazec alebo kolekciu a pracujú so znakmi alebo prvkami podľa indexu, ktorý sa počíta od nuly.
- Kolekciu menia funkcie
APPEND,INSERT,REMOVEAT,SETATaREPLACEna mieste a vracajú tú istú kolekciu. Pre reťazec vracajú nový reťazec. - Blob, napríklad
RECEIVEDMSG.PAYLOAD, prijímajú ibaLENGTH,GETAT,COPYaINDEXOF. - Prvý argument
Nullzastaví skript chybou Parameter 1 is null, okremLENGTH(0),INDEXOF(-1) aSPLIT(prázdna kolekcia);COMPAREhlási COMPARE arguments 1 and 2 must be strings.
ENCODE a DECODE (XML, Base64) sú na stránke Konverzie dátových typov, EQUALS na stránke Logika a diagnostika. Typy kolekcií opisuje stránka Dátové typy.
LENGTH
LENGTH vráti počet znakov reťazca, prvkov kolekcie alebo bajtov blobu; pre číslo vráti veľkosť jeho typu v bajtoch a pre Null 0.
LENGTH("Hello World");
# Result: 11
LENGTH(40);
# Result: 8 (a decimal literal is a double)
LENGTH(BYTECOLLECTION("010203"));
# Result: 3GETAT
GETAT vráti prvok na zadanom indexe: char reťazca, prvok kolekcie alebo bajt blobu.
| |
Návratová hodnota — pre reťazec char, nie jednopísmenový reťazec; porovnávajte ho so znakovým literálom, napríklad 'l'.
GETAT("Hello", 2);
# Result: 'l' (Char)
GETAT({1, 2, 4}, 2);
# Result: 4SETAT
SETAT nahradí prvok na zadanom indexe; kolekcia sa zmení na mieste, v reťazci sa znak na indexe nahradí textom 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 pridá hodnotu na koniec reťazca alebo kolekcie; kolekcia sa zmení na mieste a vráti sa, nekopíruje sa.
| |
Poznámky — Pridanie kolekcie s rovnakým typom prvkov pridá všetky jej prvky. Jedna hodnota sa pridá ako jeden prvok. Kolekcia s iným typom prvkov je chyba (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 vloží hodnotu na zadaný index: podreťazec do reťazca alebo prvok do kolekcie, a to na mieste.
| |
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 odstráni count znakov alebo prvkov, predvolene 1, počnúc zadaným indexom.
| |
REMOVEAT("Hello", 1);
# Result: "Hllo"
REMOVEAT("Hello", 3, 2);
# Result: "Hel"
REMOVEAT({1, 2, 3, 4}, 2, 2);
# Result: {1, 2}COPY
COPY vráti nový reťazec, kolekciu alebo blob s length položkami od pozície from; bez length kopíruje až do konca, bez from celú hodnotu.
| |
COPY("Hello World", 2);
# Result: "llo World"
COPY("Hello World", 2, 4);
# Result: "llo "
COPY(BYTECOLLECTION("01020304"), 2, 1);
# Result: {0x03}Chyby — Parameter 1 must be a non-empty string pri kopírovaní z prázdneho reťazca.
INDEXOF
INDEXOF vráti pozíciu prvého výskytu hodnoty v reťazci, kolekcii alebo blobe, alebo -1, keď sa hodnota nenájde.
| |
INDEXOF("Hello World", "Wor");
# Result: 6
INDEXOF("Hello World", "or12");
# Result: -1
INDEXOF(BYTECOLLECTION("ab cd ee ff 01 02"), 2);
# Result: 5Chyby — Parameter 2 must be a non-empty string pri hľadaní prázdneho reťazca v reťazci.
REPLACE
REPLACE nahradí každý výskyt hodnoty: z reťazca vznikne nový reťazec, v kolekcii sa zhodné prvky nahradia na mieste.
| |
REPLACE("Hello", "l", "");
# Result: "Heo"
REPLACE("Hello", "lo", "22");
# Result: "Hel22"
REPLACE(BYTECOLLECTION("050607"), 5, 9);
# Result: {0x09, 0x06, 0x07}Chyby — Empty string to replace, keď je what prázdny reťazec.
SPLIT
SPLIT rozdelí reťazec pri každom oddeľovači a vráti collection<string>; prázdne časti sa zachovajú.
| |
Parametre — separator je char, reťazec, collection<char> alebo 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 porovná dva reťazce a vráti záporné číslo, keď sa prvý radí pred druhý, 0, keď sú rovnaké, a kladné číslo, keď sa radí za neho; spoliehajte sa iba na znamienko výsledku, nie na jeho veľkosť.
| |
Poznámky — Bez možností vráti riadiaca jednotka rozdiel kódov prvých odlišných znakov, preto sa veľké písmená radia pred malé. S CompareOptions (IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal, None) sa reťazce porovnávajú podľa jazykových pravidiel invariantnej kultúry, rovnakých na každej riadiacej jednotke, upravených týmito možnosťami.
COMPARE("abc", "abc");
# Result: 0
COMPARE("abc", "ABC");
# Result: 32
COMPARE("a", "c");
# Result: -2
COMPARE("abc", "ABC", CompareOptions.IgnoreCase);
# Result: 0Chyby — COMPARE arguments 1 and 2 must be strings.
BYTECOLLECTION
BYTECOLLECTION vytvorí collection<uint8> buď z reťazca hexadecimálnych číslic, alebo vyplnenú zadaným počtom nulových bajtov (1 – 2048).
| |
Poznámky — Znaky reťazca, ktoré nie sú hexadecimálne číslice, sa ignorujú, takže bajty môžu oddeľovať medzery, čiarky aj pomlčky; počet zostávajúcich číslic musí byť párny.
BYTECOLLECTION("00 0A FF");
# Result: {0x00, 0x0A, 0xFF}
BYTECOLLECTION("aa, be1-1,fe");
# Result: {0xAA, 0xBE, 0x11, 0xFE}
BYTECOLLECTION(6);
# Result: 6 zero bytesChyby — 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 vytvorí collection<uint16> s 1 – 2048 nulami, typicky na naplnenie pomocou PACKVALUE a zápis do registrov Modbus pomocou MODBUSWBLOCK.
collection<uint16> regs := UINT16COLLECTION(4);
PACKVALUE(regs, 0, BigEndianFloat, 21.5);
PACKVALUE(regs, 2, Uint16, 100);
MODBUSWBLOCK(H, 200, regs);Dostupnosť — od Core 2026.1, build 39001.
Pozrite aj — Binárne dáta, Modbus funkcie.
BOOLCOLLECTION
BOOLCOLLECTION vytvorí collection<bool> s 1 – 2048 hodnotami FALSE, typicky na zápis coilov Modbus pomocou MODBUSWBLOCK.
collection<bool> coils := BOOLCOLLECTION(8);
SETAT(coils, 0, TRUE);
MODBUSWBLOCK(C, 0, coils);Dostupnosť — od Core 2026.1, build 39001.