string-Funktionen

Top  Previous  Next

Die zusätzlichen string-Funktionen werden mit dem Namensraum str angesprochen. Da Lua Indices byteweise und nicht zeichenweise interpretiert, können diese Funktionen als Alternative zu den Lua-Stringfunktionen dienen, die bei Umlauten Probleme bereiten können.

Als Parametertypen bei der Eingabe sind in der Regel string, int, double, bool -Werte verwendbar, nachfolgend als VAR_ARG bezeichnet ,diese werden entsprechend konvertiert.

Im Ordner

DATENORDNER/luascript/other

befindet sich die Datei test_str.lua mit Beispielen.

 

arg: Formatiert die Eingaben zu einer Zeichenkette. Die Platzhalter sind dabei %1-%n und können mehrfach verwendet werden. Zum Ersetzen werden jeweils die zu n passenden Werte in {} verwendet. Wird mehr als eine Variable verwendet, muss eine zwei-dimensionale Tabelle verwendet werden ({{}}).

Parameter:

1) arg(string a, string b, int breite = 0, string fill = '  ')

Sofern breite ungleich 0 ist, wird die Restbreite mit dem Füllzeichen (fill) ausgefüllt. Ist breite negativ, wird links ausgerichtet, ansonsten rechts.

 

2) arg(int a, int breite = 0, int base = 10, string fill = '  ')

base ist die Zahlenbasis (2-36), normalerweise 10.

 

3) arg(double a, int breite = 0, string format = 'f', int precision = -1, string fill = '  ')

Wird format als 'g' eingestellt, wird kürzeste Darstellung verwendet.

Mit precision kann die Anzahl der Nachkommastellen festgelegt werden.

 

Beispiel:

assert(str.arg("%1", {1.23556789, 0, 'f', 2}) == "1.24");

assert(str.arg("%1|test|%2|%3|%4|%1",  { {"AB"}, {4.5666, 0, "f", 2}, {33,-10,10,'x'}, {"Chicken"} } )=="AB|test|4.57|33xxxxxxxx|Chicken|AB");

 

chopped: Gibt eine Zeichenkette zurück, die rechts um len Zeichen gekürzt ist.

chopped(VAR_ARG v, int len)

Beispiel:

assert(str.chopped("1234567890", 1)=="123456789");

 

compare: Vergleicht Werte als Zeichenkette. Gibt 0, zurück, falls diese identisch ist, -1, falls der erste Wert kleiner ist, ansonsten 1.

compare(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true, locale_aware=false, int precision=-1)

Mit case_sensitive kann eingestellt werden, ob Groß/Kleinschreibung ignoriert werden soll.

Mit locale_aware kann eingestellt werden, ob die aktuell eingestellt Locale verwendet werden soll.

Mit precision kann bei Zahlenwerten gerundet werden.

Beispiel:

assert(str.compare("A", "A")==0);

 

compare_num: Vergleicht Werte als Zahl. Gibt 0, zurück, falls diese identisch ist, -1, falls der erste Wert kleiner ist, ansonsten 1.

compare(VAR_ARG v1, VAR_ARG v2, int precision=-1)

Mit precision kann bei double-Werten gerundet werden.

Beispiel:

assert(str.compare_num(100000000000000, 100000000000001)==-1);

 

contains: Sucht einen Wert in einer Zeichenkette. Gibt true oder false zurück.

contains(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true)

Beispiel:

assert(str.contains("123äöüß", "ß"));

 

Flags für Funktionen mit regulären Ausdrücken:

REGEX_MATCH: Eine Wert wird gefunden, wenn die gesamte Suchzeichenkette mit dem Suchtext übereinstimmt.

REGEX_FIND: Eine Wert wird auch gefunden, wenn Teilzeichenkette in dem Suchtext übereinstimmt.

REGEX_EXT: Erweiterte Suche mit logischen Verknüpfungen. Siehe dazu unter Suche mit Platzhaltern.

Beispiel:

assert(str.contains_regex_wild("MüllerRechnung", "Rechnung{and}M{*}ller{;}Rechnung{and}Meier", str.REGEX_EXT |  str.REGEX_FIND));

REGEX_ICASE: Bei der Suche wird Groß/Kleinschreibung ignoriert. Dies ist bei Verwendung von REGEX_EXT immer der Fall.

REGEX_WILDCARD: Es wird mit Wildcards(*, ?) gesucht.

 

contains_regex: Sucht einen Wert in einer Zeichenkette mittels eines regulären Ausdrucks. Gibt true oder false zurück.

contains_regex(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true, int flags)

Zu flags siehe weiter oben.

Beispiel:

assert(str.contains_regex("(\\+|-)?[[:digit:]]+", find, str.REGEX_MATCH));

 

contains_regex_wild: Sucht einen Wert in einer Zeichenkette mittels Wildcards. Gibt true oder false zurück.

contains_regex(VAR_ARG v1, VAR_ARG v2, int flags)

Zu flags siehe weiter oben.

Beispiel:

assert(str.contains_regex_wild("123meineFirma.DBB", "m*.dbb", str.REGEX_FIND|str.REGEX_ICASE));

assert(str.contains_regex_wild("MüllerRechnung", "Rechnung{and}M{*}ller{;}Rechnung{and}Meier", str.REGEX_EXT |str.REGEX_MATCH));

 

count: Zählt die Anzahl des Vorkommens eines Wertes in einem Wert und gibt diese zurück.

count(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true)

Beispiel:

assert(str.count("äöüääää", "Ä", false)==5);

 

endsWith: Überprüft ob ein Wert mit einem Wert endet. Gibt true oder false zurück.

endsWith(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true)

Beispiel:

assert(str.endsWith("auto.Tüv", "tüv", false));

 

find_regex: Sucht in einem Wert mit einem regulären Ausdruck nach einem Wert und gibt die Ergebnisse als Tabelle (ein- oder zwei-dimensional) oder als Zeichenkette (REGEX_RET_AS_STRING) zurück. Captures sind möglich.

find_regex(VAR_ARG v1, VAR_ARG v2, int flags)

Zu flags siehe weiter oben, zusätzlich, können folgende Wert dazukombiniert werden:

REGEX_RET_MATCH: Es wird der gesuchte Wert zurückgegeben.

REGEX_RET_MATCH_INDEX: Es wird die Position des gesuchten Werts zurückgegeben.

REGEX_RET_CAPTURE: Es wird es wird ein optionales Capture zurückgegeben.

REGEX_RET_CAPTURE_INDEX:  Es wird die Position eines optionalen Capture zurückgegeben.

REGEX_RET_ALL = (REGEX_RET_MATCH|REGEX_RET_MATCH_INDEX|REGEX_RET_CAPTURE|REGEX_RET_CAPTURE_INDEX);

REGEX_RET_AS_STRING: Nur für REGEX_RET_MATCH oder REGEX_RET_CAPTURE. Gibt anstelle einer Tabelle eine Zeichenkette zurück, diese entspricht dem ersten gefundenen Eintrag, sofern zusätzlich REGEX_RET_COMBINED angegeben wurde, werden alle Zeichenketten addiert.

Beispiel:

local t={{"cX", 3, "X", 4}, {"cX", 7, "X", 8}, {"cX", 11, "X", 12}};

assert(str.compare_table(str.find_regex("abcXabcXabcX", "c(X)"), t));

Hinweis: Sofern nur einer der vier möglichen Ergebniswerte zurückgegeben werden soll (hier die Captures), ist die Tabelle eindimensional:

assert(str.compare_table(str.find_regex("abcXabcXabcX", "c(x)", str.REGEX_ICASE|str.REGEX_RET_CAPTURE), {"X", "X", "X"}));

Anmerk: compare_table vergleicht zwei Tabellen (maximal zwei-dimensional).

assert(        str.find_regex("Bank-1024", "\\d+", str.REGEX_ICASE|str.REGEX_RET_MATCH|str.REGEX_RET_AS_STRING)=="1024");

 

indexOf: Überprüft, ob ein Wert in einem einem Wert vorkommt, und gibt dessen Position oder nil zurück.

indexOf(VAR_ARG v1, VAR_ARG v2, int pos=1, bool case_sensitive=true)

pos ist die Position, ab der gesucht werden soll.

Beispiel:

local x = "sticky question";

local y = "sti";

assert(str.indexOf(x, y) == 1);              

assert(str.indexOf(x, y, 2) == 11);          

assert(str.indexOf(x, y, 11) == 11);          

assert(str.indexOf(x, y, 12) == nil);          

 

insert: Fügt einen Wert in einen anderen Wert an der Stelle pos ein, und gibt das Ergebnis zurück.

insert( int pos, VAR_ARG v1, VAR_ARG v2)

Beispiel:

assert(str.insert(1, "1234567890", "x")=="x1234567890");  

assert(str.insert(20, "1234567890", "x")=="1234567890         x");

 

lastIndexOf: Überprüft, ob ein Wert in einem einem Wert vorkommt, und gibt dessen letzte Position oder nil zurück. Um die gesamte Zeichenkette zu durchsuchen, muss pos -1 sein.

lastIndexOf(VAR_ARG v1, VAR_ARG v2, int pos=-1, bool case_sensitive=true)

Beispiel:

local x = "crazy azimuths";

local y = "az";

assert(str.lastIndexOf(x, y) == 7);        

assert(str.lastIndexOf(x, y, 7) == 7);      

assert(str.lastIndexOf(x, y, 6) == 3);    

assert(str.lastIndexOf(x, y, 2) == nil);  

 

left: Extrahiert len Zeichen aus einem Wert und gibt die resultierende Zeichenkette zurück.

left(VAR_ARG v1, int len)

Beispiel:

assert(str.left("1234", 3)=="123");

 

length: Ermittelt die Länge eines Werts (Anzahl Zeichen) und gibt diese zurück.

length(VAR_ARG v1)

Beispiel:

assert(str.length(1.3456789)==9);

 

mid: Extrahiert len Zeichen ab der Position pos aus einem Wert und gibt die resultierende Zeichenkette zurück. Ist len -1, werden alle Zeichen nach pos verwendet.

mid(VAR_ARG v1, int pos, int len=-1)

Beispiel:

assert(str.mid("1234567890", 5, 2)=="56");

assert(str.mid("1234567890", 5)=="567890");

assert(str.mid("1234567890", 5, -1)=="567890");

 

remove: Entfernt entweder len Zeichen ab der Position pos oder einen gesuchten Wert aus einem Wert und gibt die resultierende Zeichenkette zurück.

1) remove(VAR_ARG v1, int pos, int len)

2) remove(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true)

Beispiel:

assert(str.remove("1234567890", 5, 3)=="1234890");

assert(str.remove("12345678901234567890", "890")=="12345671234567");

 

replace: Ersetzt entweder len Zeichen ab der Position pos oder einen gesuchten Wert aus einem Wert mit einem anderen Wert und gibt die resultierende Zeichenkette zurück.

replace(VAR_ARG v1, int pos, int len, VAR_ARG v2)

replace(VAR_ARG v1, VAR_ARG v2, VAR_ARG v3, bool case_sensitive=true)

Beispiel:

assert(str.replace("1234567890", 5, 3, "ABC")=="1234ABC890");

assert(str.replace("ä12345678901234567890ä", "Ä", "abc", false)=="abc12345678901234567890abc");

 

replace_regex: Sucht mit einem regulären Ausdruck nach einem Wert, ersetzt das Vorkommen mit einem anderen Wert und gibt die resultierende Zeichenkette zurück.

replace_regex(VAR_ARG v1, VAR_ARG v2, VAR_ARG v3, int flags=0)

Zu flags siehe weiter oben.

Beispiel:

assert(str.replace_regex("Quick brown fox","a|e|i|o|u", "*")=="Q**ck br*wn f*x");

assert(str.replace_regex("Quick brown fox","Qu?", "S", str.REGEX_WILDCASE)=="Sick brown fox");

assert(str.replace_regex("sunflowers, sunburn, sunshine","(sun)(.*)", "$1")=="sun"); --capture

 

right: Extrahiert die letzten len Zeichen aus einem Wert und gibt die resultierende Zeichenkette zurück.

right(VAR_ARG v1, int len)

Beispiel:

assert(str.right("1234567890", 3)=="890");

 

startsWith: Überprüft ob ein Wert mit einem Wert anfängt. Gibt true oder false zurück.

startsWith(VAR_ARG v1, VAR_ARG v2, bool case_sensitive=true)

Beispiel:

assert(str.startsWith("auto.tüv", "AUTO.", false));

 

toLower, toUpper: Konvertiert eine Zeichenkette nach Groß-/ oder Kleinbuchstaben und gibt die resultierende Zeichenkette zurück.

toLower(VAR_ARG v1)

toUpper(VAR_ARG v1)

Beispiel:

local s="TextÄöüß";

assert(str.toLower(s)=="textäöüß");

assert(str.toUpper(s)=="TEXTÄÖÜß");

 

trimmed: Entfernt Zeichen vom Anfang, Ende oder Beides und gibt die resultierende Zeichenkette zurück.Wird als zu entfernendes Zeichen eine Leerzeichenkette übergeben, werden alle Spaces (\r\n\t\f\v) entfernt.

trimmed(VAR_ARG v1, VAR_ARG v2, trimflags=TRIM_ALL)

trimflags:

TRIM_ALL

TRIM_LEFT

TRIM_RIGHT

assert(str.trimmed("\r\n\t\"\'123     \t\t\f\v")=="\"\'123");

assert(str.trimmed("  1234567890\r\n  ", " ")=="1234567890\r\n");