Szöveg és gyűjtemények
TapHome szkriptfüggvények szövegekhez, gyűjteményekhez és bájttömbökhöz — LENGTH, GETAT, SETAT, APPEND, INSERT, REMOVEAT, COPY, INDEXOF, REPLACE, SPLIT, COMPARE, BYTECOLLECTION, UINT16COLLECTION, BOOLCOLLECTION.
Ezek a függvények első argumentumként szöveget vagy gyűjteményt fogadnak, és a karakterekkel vagy elemekkel nullától kezdődő index alapján dolgoznak.
- A gyűjteményt az
APPEND,INSERT,REMOVEAT,SETATésREPLACEhelyben módosítja, és ugyanazt a gyűjteményt adja vissza. Szöveg esetén új szöveget adnak vissza. - Blob típust, például a
RECEIVEDMSG.PAYLOADértéket, csak aLENGTH, aGETAT, aCOPYés azINDEXOFfogad el. - A
Nullelső argumentum a Parameter 1 is null hibával leállítja a szkriptet, kivéve aLENGTH(0), azINDEXOF(-1) és aSPLIT(üres gyűjtemény) esetén; aCOMPAREa COMPARE arguments 1 and 2 must be strings hibát jelzi.
Az ENCODE és a DECODE (XML, Base64) az Adattípusok konverziója oldalon, az EQUALS a Logika és diagnosztika oldalon található. A gyűjteménytípusokat az Adattípusok oldal írja le.
LENGTH
A LENGTH egy szöveg karaktereinek, egy gyűjtemény elemeinek vagy egy blob bájtjainak számát adja vissza; számnál a típusa méretét bájtban, Null esetén 0-t.
LENGTH("Hello World");
# Result: 11
LENGTH(40);
# Result: 8 (a decimal literal is a double)
LENGTH(BYTECOLLECTION("010203"));
# Result: 3GETAT
A GETAT az adott indexen álló elemet adja vissza: egy szöveg char karakterét, egy gyűjtemény elemét vagy egy blob bájtját.
| |
Visszatérési érték — szövegnél char, nem egybetűs szöveg; karakterliterállal, például 'l' értékkel hasonlítsd össze.
GETAT("Hello", 2);
# Result: 'l' (Char)
GETAT({1, 2, 4}, 2);
# Result: 4SETAT
A SETAT lecseréli az adott indexen álló elemet; a gyűjtemény helyben módosul, szövegnél pedig az indexen álló karakter helyére a newValue szövege kerül.
| |
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
Az APPEND egy értéket fűz egy szöveg vagy gyűjtemény végére; a gyűjtemény helyben módosul, és nem másolatként, hanem önmagaként kerül visszaadásra.
| |
Megjegyzések — azonos elemtípusú gyűjtemény hozzáfűzésekor annak minden eleme hozzáadódik. Egyetlen érték egy elemként adódik hozzá. Más elemtípusú gyűjtemény hibát okoz (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
Az INSERT egy értéket szúr be az adott indexre: részszöveget egy szövegbe, vagy elemet egy gyűjteménybe helyben.
| |
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
A REMOVEAT az adott indextől kezdve count karaktert vagy elemet távolít el, alapértelmezetten 1-et.
| |
REMOVEAT("Hello", 1);
# Result: "Hllo"
REMOVEAT("Hello", 3, 2);
# Result: "Hel"
REMOVEAT({1, 2, 3, 4}, 2, 2);
# Result: {1, 2}COPY
A COPY új szöveget, gyűjteményt vagy blobot ad vissza, amely a from pozíciótól kezdve length elemet tartalmaz; length nélkül a végéig másol, from nélkül a teljes értéket.
| |
COPY("Hello World", 2);
# Result: "llo World"
COPY("Hello World", 2, 4);
# Result: "llo "
COPY(BYTECOLLECTION("01020304"), 2, 1);
# Result: {0x03}Hibák — Parameter 1 must be a non-empty string, ha üres szövegből másolsz.
INDEXOF
Az INDEXOF egy érték első előfordulásának pozícióját adja vissza egy szövegben, gyűjteményben vagy blobban, vagy -1 értéket, ha nem található.
| |
INDEXOF("Hello World", "Wor");
# Result: 6
INDEXOF("Hello World", "or12");
# Result: -1
INDEXOF(BYTECOLLECTION("ab cd ee ff 01 02"), 2);
# Result: 5Hibák — Parameter 2 must be a non-empty string, ha egy szövegben üres szöveget keresel.
REPLACE
A REPLACE egy érték minden előfordulását lecseréli: szövegből új szöveg lesz, a gyűjteményben pedig az egyező elemek helyben cserélődnek.
| |
REPLACE("Hello", "l", "");
# Result: "Heo"
REPLACE("Hello", "lo", "22");
# Result: "Hel22"
REPLACE(BYTECOLLECTION("050607"), 5, 9);
# Result: {0x09, 0x06, 0x07}Hibák — Empty string to replace, ha a what üres szöveg.
SPLIT
A SPLIT minden elválasztónál feldarabolja a szöveget, és collection<string> gyűjteményt ad vissza; az üres részek megmaradnak.
| |
Paraméterek — a separator lehet char, szöveg, collection<char> vagy 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
A COMPARE két szöveget hasonlít össze, és negatív számot ad vissza, ha az első a rendezésben a második elé kerül, 0-t, ha egyenlők, és pozitív számot, ha utána kerül; csak az előjelre hagyatkozz, a nagyságra ne.
| |
Megjegyzések — opciók nélkül a vezérlőegység az első eltérő karakterek karakterkódjainak különbségét adja vissza, így a nagybetűk a kisbetűk elé kerülnek. CompareOptions (IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal, None) megadásakor a szövegek összehasonlítása az invariáns kultúra nyelvi szabályai szerint történik, minden vezérlőegységen ugyanúgy, ezekkel az opciókkal módosítva.
COMPARE("abc", "abc");
# Result: 0
COMPARE("abc", "ABC");
# Result: 32
COMPARE("a", "c");
# Result: -2
COMPARE("abc", "ABC", CompareOptions.IgnoreCase);
# Result: 0Hibák — COMPARE arguments 1 and 2 must be strings.
BYTECOLLECTION
A BYTECOLLECTION collection<uint8> gyűjteményt hoz létre, vagy hexadecimális számjegyekből álló szövegből, vagy a megadott számú (1 – 2048) nulla bájttal feltöltve.
| |
Megjegyzések — a szöveg nem hexadecimális karaktereit figyelmen kívül hagyja, így a bájtokat szóközök, vesszők és kötőjelek is elválaszthatják; a megmaradó számjegyek számának párosnak kell lennie.
BYTECOLLECTION("00 0A FF");
# Result: {0x00, 0x0A, 0xFF}
BYTECOLLECTION("aa, be1-1,fe");
# Result: {0xAA, 0xBE, 0x11, 0xFE}
BYTECOLLECTION(6);
# Result: 6 zero bytesHibák — 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
Az UINT16COLLECTION 1 – 2048 nullából álló collection<uint16> gyűjteményt hoz létre, amelyet jellemzően a PACKVALUE tölt fel, és a MODBUSWBLOCK ír be a Modbus regiszterekbe.
collection<uint16> regs := UINT16COLLECTION(4);
PACKVALUE(regs, 0, BigEndianFloat, 21.5);
PACKVALUE(regs, 2, Uint16, 100);
MODBUSWBLOCK(H, 200, regs);Elérhetőség — Core 2026.1, build 39001 és újabb.
Lásd még — Bináris adatok, Modbus függvények.
BOOLCOLLECTION
A BOOLCOLLECTION 1 – 2048 FALSE értékből álló collection<bool> gyűjteményt hoz létre, jellemzően Modbus coil-ok MODBUSWBLOCK függvénnyel történő írásához.
collection<bool> coils := BOOLCOLLECTION(8);
SETAT(coils, 0, TRUE);
MODBUSWBLOCK(C, 0, coils);Elérhetőség — Core 2026.1, build 39001 és újabb.