Funkcje łańcuchowe

W języku CLEM na łańcuchach można wykonać następujące operacje:

  • Porównywanie łańcuchów
  • Tworzenie łańcuchów
  • Uzyskiwanie dostępu do znaków

W języku CLEM, łańcuch to sekwencja znaków ujętych w podwójne cudzysłowy ("łańcuch w cudzysłowie"). Znaki (ZNAK) mogą być dowolnymi, pojedynczymi znakami alfanumerycznymi. Są one deklarowane w wyrażeniach CLEM za pomocą pojedynczych apostrofów odwrotnych w postaci `<znak>`, np. `z`, `A` lub `2`. Znaki spoza zakresu lub indeksy ujemne łańcucha spowodują występowanie nieoczekiwanych zachowań.

Uwaga: Porównania między łańcuchami, które nie korzystają ze wstępnego generowania kodu SQL, mogą zwracać odmienne wyniki w przypadku, gdy istnieją spacje końcowe.
Tabela 1. Funkcje łańcuchowe CLEM
Funkcja Wynik Opis
allbutfirst(N, ŁAŃCUCH) Łańcuch Zwraca łańcuch, który jest ŁAŃCUCHEM z usuniętą liczbą N pierwszych znaków.
allbutlast(N, ŁAŃCUCH) Łańcuch Zwraca łańcuch, który jest ŁAŃCUCHEM z usuniętymi ostatnimi znakami.
alphabefore(ŁAŃCUCH1, ŁAŃCUCH2) Boolean Służy do sprawdzania kolejności alfabetycznej łańcuchów. Zwraca wartość true, jeśli ŁAŃCUCH1 poprzedza ŁAŃCUCH2.
endstring(DŁUGOŚĆ, ŁAŃCUCH) Łańcuch Wyodrębnia ostatnich N znaków z określonego łańcucha. Jeśli długość łańcucha jest równa określonej długości (lub krótsza), zmiany nie są wprowadzane.
hasendstring(ŁAŃCUCH, PODŁAŃCUCH) Liczba całkowita Ta funkcja działa tak samo jak isendstring(PODŁAŃCUCH, ŁAŃCUCH).
hasmidstring(ŁAŃCUCH, PODŁAŃCUCH) Liczba całkowita Ta funkcja działa tak samo jak ismidstring(PODŁAŃCUCH, ŁAŃCUCH) (osadzony podłańcuch).
hasstartstring(ŁAŃCUCH, PODŁAŃCUCH) Liczba całkowita Ta funkcja działa tak samo jak isstartstring(PODŁAŃCUCH, ŁAŃCUCH).
hassubstring(ŁAŃCUCH, N, PODŁAŃCUCH) Liczba całkowita Ta funkcja działa tak samo jak issubstring(PODŁAŃCUCH, N, ŁAŃCUCH), gdzie w przypadku N jest przywracana wartość domyślna 1.
count_substring(ŁAŃCUCH, PODŁAŃCUCH) Liczba całkowita Zwraca liczbę wystąpień określonego podłańcucha w łańcuchu. Na przykład count_substring("foooo.txt", "oo") zwraca 3.
hassubstring(ŁAŃCUCH, PODŁAŃCUCH) Liczba całkowita Ta funkcja działa tak samo jak issubstring(PODŁAŃCUCH, 1, ŁAŃCUCH), gdzie w przypadku N jest przywracana wartość domyślna 1.
isalphacode(ZNAK) Boolean Zwraca wartość true, jeżeli ZNAK w łańcuchu (często określonym jako nazwa zmiennej) jest literą. W przeciwnym razie ta funkcja zwraca wartość 0. Przykładowo: isalphacode(produce_num(1)).
isendstring(PODŁAŃCUCH, ŁAŃCUCH) Liczba całkowita Jeśli łańcuch ŁAŃCUCH kończy się podłańcuchem PODŁAŃCUCH, to ta funkcja zwraca całkowitoliczbowy indeks dolny PODŁAŃCUCHA w ŁAŃCUCHU. W przeciwnym razie ta funkcja zwraca wartość 0.
islowercode(ZNAK) Boolean Zwraca wartość true, jeżeli ZNAK w łańcuchu (często określonego jako nazwa zmiennej) jest małą literą. W przeciwnym razie ta funkcja zwraca wartość 0. Przykładowo: obydwa wyrażenia islowercode(``) i islowercode(country_name(2)) są prawidłowe.
ismidstring(PODŁAŃCUCH, ŁAŃCUCH) Liczba całkowita Jeśli PODŁAŃCUCH jest podłańcuchem ŁAŃCUCHA, ale nie zaczyna się w pierwszym znaku ŁAŃCUCHA ani nie kończy na ostatnim, ta funkcja zwraca indeks, od którego rozpoczyna się podłańcuch. W przeciwnym razie ta funkcja zwraca wartość 0.
isnumbercode(ZNAK) Boolean Zwraca wartość true, jeżeli ZNAK w łańcuchu (często określonym jako nazwa zmiennej) jest cyfrą. W przeciwnym razie ta funkcja zwraca wartość 0. Przykładowo: isnumbercode(product_id(2)).
isstartstring(PODŁAŃCUCH, ŁAŃCUCH) Liczba całkowita Jeśli łańcuch ŁAŃCUCH zaczyna się podłańcuchem PODŁAŃCUCH, to ta funkcja zwraca indeks 1. W przeciwnym razie ta funkcja zwraca wartość 0.
issubstring(PODŁAŃCUCH, N, ŁAŃCUCH) Liczba całkowita Przeszukuje łańcuch ŁAŃCUCH, rozpoczynając od N-tego znaku, w poszukiwaniu podłańcucha równego PODŁAŃCUCH. Jeśli podłańcuch zostanie znaleziony, ta funkcja zwraca całkowitoliczbowy indeks, od którego rozpoczyna się zgodny podłańcuch. W przeciwnym razie ta funkcja zwraca wartość 0. Jeśli wartość N nie jest podana, przywracana jest wartość domyślna funkcji wynosząca 1.
issubstring(PODŁAŃCUCH, ŁAŃCUCH) Liczba całkowita Przeszukuje łańcuch ŁAŃCUCH, rozpoczynając od N-tego znaku, w poszukiwaniu podłańcucha równego PODŁAŃCUCH. Jeśli podłańcuch zostanie znaleziony, ta funkcja zwraca całkowitoliczbowy indeks, od którego rozpoczyna się zgodny podłańcuch. W przeciwnym razie ta funkcja zwraca wartość 0. Jeśli wartość N nie jest podana, przywracana jest wartość domyślna funkcji wynosząca 1.
issubstring_count(PODŁAŃCUCH, N, ŁAŃCUCH): Liczba całkowita Zwraca indeks N-tego wystąpienia PODŁAŃCUCHA w określonym ŁAŃCUCHU. Jeśli istnieje mniej niż N wystąpień PODŁAŃCUCHA, zwracana jest wartość 0.
issubstring_lim(PODŁAŃCUCH, N, OGRSTART, OGRKOŃ, ŁANCUCH) Liczba całkowita Ta funkcja działa tak samo jak funkcja issubstring, lecz dopasowanie jest ograniczone do fragmentu od indeksu OGRSTART do indeksu OGRKOŃ. Ograniczenia OGRSTART lub OGRKOŃ można wyłączyć, wprowadzając wartość false dla dowolnego argumentu; przykładowo: issubstring_lim(PODŁAŃCUCH, N, false, false, ŁAŃCUCH) odpowiada issubstring.
isuppercode(ZNAK) Boolean Zwraca wartość true, jeżeli ZNAK jest wielką literą. W przeciwnym razie ta funkcja zwraca wartość 0. Przykładowo: obydwa wyrażenia isuppercode(``) i isuppercode(country_name(2)) są prawidłowe.
last(ZNAK) Łańcuch Zwraca ostatni ZNAK ŁAŃCUCHA (który musi mieć przynajmniej jeden znak).
length(ŁAŃCUCH) Liczba całkowita Zwraca długość ŁAŃCUCHA, czyli liczbę zawartych w nim znaków.
locchar(ZNAK, N, ŁAŃCUCH) Liczba całkowita Służy do określania położenia znaków w zmiennych symbolicznych. Ta funkcja przeszukuje łańcuch ŁAŃCUCH pod kątem znaku ZNAK, rozpoczynając przeszukiwanie od N-tego znaku w ŁAŃCUCHU. Ta funkcja zwraca wartość wskazującą położenie (od N) znalezionego znaku. Jeśli znak nie zostanie znaleziony, funkcja zwraca wartość 0. Jeśli wartość przesunięcia funkcji (N) jest nieprawidłowa (przykładowo: wartość przesunięcia jest większa niż długość łańcucha), funkcja zwraca wartość $null$. Przykładowo: locchar(`n`, 2, web_page) przeszukuje zmienną web_page pod kątem znaku `n`, rozpoczynając od drugiego znaku w wartości zmiennej. Uwaga: dany znak należy ujmować w pojedyncze apostrofy odwrotne.
locchar_back(ZNAK, N, ŁAŃCUCH) Liczba całkowita Działanie funkcji jest podobne do locchar, jednak wyszukiwanie jest wykonywane do tyłu, począwszy od N-tego znaku. Przykładowo: locchar_back(`n`, 9, web_page) przeszukuje zmienną web_page, począwszy od 9. znaku i przechodzi w tył w kierunku początku łańcucha. Jeśli wartość przesunięcia funkcji jest nieprawidłowa (przykładowo: wartość przesunięcia jest większa niż długość łańcucha), funkcja zwraca wartość $null$. Zaleca się używanie funkcji locchar_back wraz z funkcją length(<field>), pozwoli to na dynamiczne używanie długości bieżącej wartości zmiennej. Przykładowo: locchar_back(`n`, (length(web_page)), web_page).
lowertoupper(ZNAK) lowertoupper (ŁAŃCUCH) ZNAK lub ŁAŃCUCH Można wprowadzić łańcuch lub znak. Funkcja zwróci nowy element tego samego typu, a wszystkie znaki zapisane małymi literami zostaną przekształcone na wielkie litery. Przykładowo: lowertoupper(`a`), lowertoupper("Mój łańcuch") i lowertoupper(nazwa_zmiennej(2)) są prawidłowymi wyrażeniami.
matches Boolean Zwraca wartość true, jeśli łańcuch odpowiada określonemu wzorcowi. Wzorcem musi być literał łańcuchowy, nie może to być nazwa zmiennej zawierająca wzorzec. Znak zapytania (?) można uwzględnić we wzorcu. Ten znak odpowiada dokładnie jednemu znakowi. Znak gwiazdki (*) odpowiada zerowej lub dowolnej liczbie znaków. Aby wyszukać rzeczywisty znak zapytania lub gwiazdki (a nie używać tych znaków jako symboli wieloznacznych), należy je poprzedzić znakiem ukośnika odwrotnego (\).
replace(PODŁAŃCUCH, NOWYPODŁAŃCUCH, ŁAŃCUCH) Łańcuch W określonym ŁAŃCUCHU zastępuje wszystkie wystąpienia PODŁAŃCUCHA za pomocą NOWEGOPODŁAŃCUCHA.
replicate(LICZBA, ŁAŃCUCH) Łańcuch Zwraca łańcuch składający się z oryginalnego łańcucha skopiowanego określoną liczbę razy.
stripchar(ZNAK,ŁAŃCUCH) Łańcuch Umożliwia usuwanie określonych znaków z łańcucha lub zmiennej. Ta funkcja służy na przykład do usuwania z danych dodatkowych symboli, takich jak oznaczenia waluty, w celu uzyskania prostej liczby lub nazwy. Przykładowo: użycie składni stripchar(`$`, 'Cost') zwraca nową zmienną pozbawioną znaku dolara we wszystkich wartościach. Uwaga: dany znak należy ujmować w pojedyncze apostrofy odwrotne.
skipchar(ZNAK, N, ŁAŃCUCH) Liczba całkowita Przeszukuje łańcuch ŁAŃCUCH pod kątem znaku innego niż ZNAK, rozpoczynając przeszukiwanie od N-tego znaku. Ta funkcja zwraca podłańcuch liczby całkowitej wskazujący punkt, w którym znaleziono znak lub wartość 0, jeśli wszystkie znaki od znaku N-tego w przód są wartościami typu ZNAK. Jeśli wartość przesunięcia funkcji jest nieprawidłowa (przykładowo: wartość przesunięcia jest większa niż długość łańcucha), funkcja zwraca wartość $null$. Funkcja locchar jest często używana wraz z funkcjami skipchar w celu określenia wartości N (punktu rozpoczęcia przeszukiwania łańcucha). Przykładowo: skipchar(`s`, (locchar(`s`, 1, "MójŁańcuch")), "MójŁańcuch").
skipchar_back(ZNAK, N, ŁAŃCUCH) Liczba całkowita Działanie funkcji jest podobne do skipchar, jednak wyszukiwanie jest wykonywane do tyłu, począwszy od N-tego znaku.
startstring(DŁUGOŚĆ, ŁAŃCUCH) Łańcuch Wyodrębnia pierwszych N znaków z określonego łańcucha. Jeśli długość łańcucha jest równa określonej długości (lub krótsza), zmiany nie są wprowadzane.
strmember(ZNAK, ŁAŃCUCH) Liczba całkowita Funkcja działa tak samo jak locchar(ZNAK, 1, ŁAŃCUCH). Zwraca podłańcuch liczby całkowitej od miejsca wystąpienia pierwszego ZNAKU, lub wartość 0. Jeśli wartość przesunięcia funkcji jest nieprawidłowa (przykładowo: wartość przesunięcia jest większa niż długość łańcucha), funkcja zwraca wartość $null$.
subscrs(N, ŁAŃCUCH) ZNAK Zwraca N-ty znak ZNAK łańcucha wejściowego ŁAŃCUCH. Tę funkcję można również zapisać w skróconej postaci jako ŁAŃCUCH(N). Przykładowo: lowertoupper(“nazwa”(1)) jest prawidłowym wyrażeniem.
substring(N, DŁU, ŁAŃCUCH) Łańcuch Zwraca łańcuch PODŁAŃCUCH, zawierający DŁU znaków ŁAŃCUCHA, począwszy od znaku N.
substring_between(N1, N2, ŁAŃCUCH) Łańcuch Zwraca podłańcuch ŁAŃCUCHA, który rozpoczyna się od indeksu N1 i kończy w N2.
trim(ŁAŃCUCH) Łańcuch Usuwa spacje początkowe i końcowe z określonego łańcucha.
trim_start(ŁAŃCUCH) Łańcuch Usuwa spacje początkowe z określonego łańcucha.
trimend(ŁAŃCUCH) Łańcuch Usuwa spacje końcowe z określonego łańcucha.
unicode_char(LICZ) ZNAK Wartość wejściowa musi być wartością dziesiętną, a nie szesnastkową. Zwraca znak o kodzie LICZ w kodowaniu Unicode.
unicode_value(ZNAK) LICZ Zwraca kod Unicode dla ZNAKU
uppertolower(ZNAK) uppertolower (ŁAŃCUCH) ZNAK lub ŁAŃCUCH Można wprowadzić łańcuch lub znak. Funkcja zwróci nowy element tego samego typu, a wszystkie znaki zapisane wielkimi literami zostaną przekształcone na małe litery. Uwaga: łańcuchy należy ująć w podwójne cudzysłowy; znaki należy ujmować w pojedyncze apostrofy odwrotne. Proste nazwy zmiennych należy wprowadzić bez cudzysłowów.