Tekst i kolekcje
Funkcje skryptowe TapHome dla tekstów, kolekcji i tablic bajtów — LENGTH, GETAT, SETAT, APPEND, INSERT, REMOVEAT, COPY, INDEXOF, REPLACE, SPLIT, COMPARE, BYTECOLLECTION, UINT16COLLECTION, BOOLCOLLECTION.
Te funkcje przyjmują jako pierwszy argument tekst lub kolekcję i pracują ze znakami lub elementami według indeksu liczonego od zera.
- Kolekcja jest zmieniana na miejscu przez
APPEND,INSERT,REMOVEAT,SETATiREPLACE, które zwracają tę samą kolekcję. Dla tekstu zwracają nowy tekst. - Blob, na przykład
RECEIVEDMSG.PAYLOAD, przyjmują tylkoLENGTH,GETAT,COPYiINDEXOF. - Pierwszy argument
Nullzatrzymuje skrypt komunikatem Parameter 1 is null, z wyjątkiemLENGTH(0),INDEXOF(-1) iSPLIT(pusta kolekcja);COMPAREzgłasza COMPARE arguments 1 and 2 must be strings.
ENCODE i DECODE (XML, Base64) są na stronie Konwersje typów danych, EQUALS na stronie Logika i diagnostyka. Typy kolekcji opisuje strona Typy danych.
LENGTH
LENGTH zwraca liczbę znaków tekstu, elementów kolekcji lub bajtów bloba; dla liczby zwraca rozmiar jej typu w bajtach, a dla Null 0.
LENGTH("Hello World");
# Result: 11
LENGTH(40);
# Result: 8 (a decimal literal is a double)
LENGTH(BYTECOLLECTION("010203"));
# Result: 3GETAT
GETAT zwraca element o podanym indeksie: char tekstu, element kolekcji lub bajt bloba.
| |
Zwraca — dla tekstu char, a nie jednoliterowy tekst; porównuj go z literałem znakowym, takim jak 'l'.
GETAT("Hello", 2);
# Result: 'l' (Char)
GETAT({1, 2, 4}, 2);
# Result: 4SETAT
SETAT zastępuje element o podanym indeksie; kolekcja jest zmieniana na miejscu, w tekście znak o podanym indeksie jest zastępowany tekstem 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 dodaje wartość na końcu tekstu lub kolekcji; kolekcja jest zmieniana na miejscu i zwracana, a nie kopiowana.
| |
Uwagi — Dopisanie kolekcji o tym samym typie elementu dodaje wszystkie jej elementy. Pojedyncza wartość jest dodawana jako jeden element. Kolekcja o innym typie elementu to błąd (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 wstawia wartość na podanym indeksie: podciąg do tekstu albo element do kolekcji na miejscu.
| |
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 usuwa count znaków lub elementów, domyślnie 1, począwszy od podanego indeksu.
| |
REMOVEAT("Hello", 1);
# Result: "Hllo"
REMOVEAT("Hello", 3, 2);
# Result: "Hel"
REMOVEAT({1, 2, 3, 4}, 2, 2);
# Result: {1, 2}COPY
COPY zwraca nowy tekst, kolekcję lub blob z length elementami od pozycji from; bez length kopiuje do końca, bez from całą wartość.
| |
COPY("Hello World", 2);
# Result: "llo World"
COPY("Hello World", 2, 4);
# Result: "llo "
COPY(BYTECOLLECTION("01020304"), 2, 1);
# Result: {0x03}Błędy — Parameter 1 must be a non-empty string przy kopiowaniu z pustego tekstu.
INDEXOF
INDEXOF zwraca pozycję pierwszego wystąpienia wartości w tekście, kolekcji lub blobie albo -1, gdy jej nie znaleziono.
| |
INDEXOF("Hello World", "Wor");
# Result: 6
INDEXOF("Hello World", "or12");
# Result: -1
INDEXOF(BYTECOLLECTION("ab cd ee ff 01 02"), 2);
# Result: 5Błędy — Parameter 2 must be a non-empty string przy szukaniu pustego tekstu w tekście.
REPLACE
REPLACE zastępuje każde wystąpienie wartości: tekst daje nowy tekst, w kolekcji pasujące elementy są zastępowane na miejscu.
| |
REPLACE("Hello", "l", "");
# Result: "Heo"
REPLACE("Hello", "lo", "22");
# Result: "Hel22"
REPLACE(BYTECOLLECTION("050607"), 5, 9);
# Result: {0x09, 0x06, 0x07}Błędy — Empty string to replace, gdy what jest pustym tekstem.
SPLIT
SPLIT dzieli tekst przy każdym separatorze i zwraca collection<string>; puste części są zachowywane.
| |
Parametry — separator to char, tekst, collection<char> lub 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 porównuje dwa teksty i zwraca liczbę ujemną, gdy pierwszy w sortowaniu jest przed drugim, 0, gdy są równe, i liczbę dodatnią, gdy jest po nim; polegaj tylko na znaku, a nie na wielkości.
| |
Uwagi — Bez opcji jednostka sterująca zwraca różnicę kodów pierwszych różniących się znaków, więc wielkie litery są sortowane przed małymi. Z CompareOptions (IgnoreCase, IgnoreNonSpace, IgnoreSymbols, IgnoreKanaType, IgnoreWidth, OrdinalIgnoreCase, StringSort, Ordinal, None) teksty są porównywane według reguł językowych kultury niezmiennej (invariant culture), takich samych na każdej jednostce sterującej, zmodyfikowanych tymi opcjami.
COMPARE("abc", "abc");
# Result: 0
COMPARE("abc", "ABC");
# Result: 32
COMPARE("a", "c");
# Result: -2
COMPARE("abc", "ABC", CompareOptions.IgnoreCase);
# Result: 0Błędy — COMPARE arguments 1 and 2 must be strings.
BYTECOLLECTION
BYTECOLLECTION tworzy collection<uint8> z tekstu z cyframi szesnastkowymi albo wypełnioną podaną liczbą bajtów zerowych (1 – 2048).
| |
Uwagi — Znaki tekstu, które nie są cyframi szesnastkowymi, są ignorowane, więc bajty mogą oddzielać spacje, przecinki i myślniki; liczba pozostałych cyfr musi być parzysta.
BYTECOLLECTION("00 0A FF");
# Result: {0x00, 0x0A, 0xFF}
BYTECOLLECTION("aa, be1-1,fe");
# Result: {0xAA, 0xBE, 0x11, 0xFE}
BYTECOLLECTION(6);
# Result: 6 zero bytesBłędy — 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 tworzy collection<uint16> z 1 – 2048 zer, zwykle wypełnianą funkcją PACKVALUE i zapisywaną do rejestrów Modbus funkcją MODBUSWBLOCK.
collection<uint16> regs := UINT16COLLECTION(4);
PACKVALUE(regs, 0, BigEndianFloat, 21.5);
PACKVALUE(regs, 2, Uint16, 100);
MODBUSWBLOCK(H, 200, regs);Dostępność — Core 2026.1, kompilacja 39001 i nowsze.
Zobacz też — Dane binarne, Funkcje Modbus.
BOOLCOLLECTION
BOOLCOLLECTION tworzy collection<bool> z 1 – 2048 wartości FALSE, zwykle do zapisu cewek Modbus funkcją MODBUSWBLOCK.
collection<bool> coils := BOOLCOLLECTION(8);
SETAT(coils, 0, TRUE);
MODBUSWBLOCK(C, 0, coils);Dostępność — Core 2026.1, kompilacja 39001 i nowsze.