String-Verarbeitung

  • String-Verarbeitung
    In diesem Tutorial möchte ich euch die String-Verarbeitung etwas näher bringen.

    Um erst einmal klarzustellen, wofür man überhaupt so etwas braucht, hier ein paar Beispiele:

    • Ihr wollt für euren Server einen Newsletter anfertigen, allerdings geben die Spieler ständig falsche E-Mails an bzw. Texte, die dem E-Mail pattern nicht entsprechen
    • Ihr möchtet, dass der Spielername ein bestimmtes Pattern haben muss, beispielsweise: Vorname_Nachname
    • Ihr möchtet beispielsweise eine Art Tabelle im MySQL-speichern, die Berechtigungen oder Optionen darstellt (|Option1|Option2|Option3|..|)
    • Ihr möchtet nur x Nachkommastellen anzeigen

    Fangen wir mal an:


    string.find(text, pattern): Hiermit kann man, wie die Funktion eigentlich schon heißt, herausfinden an welcher Stelle ein Muster/Text vorhanden ist.
    Beispiel:

    Lua
    print(string.find("Hallo Welt", "Welt"))
    > 7 10


    Nun wissen wir, dass in dem String, dass Wort "Welt" an der 7 Stelle anfängt und an der 10 endet.

    string.match(text, pattern): Mit string.match können wir bestimmte Teile aus einem String extrahieren.
    Beispiel:

    Lua
    print(string.match("Hallo Welt 123", "%d"))
    > 1
    print(string.match("Hallo Welt 123", "%d+")
    > 123



    Im ersten Beispiel wurde uns die Zahl 1 ausgegeben. Das liegt daran, dass als Pattern "%d" angegeben wurde. Das bedeutet, dass die erste Dezimalzahl, die gefunden wird, ausgegeben wird.
    Im zweiten Beispiel spielt das "+" den entscheidenden Faktor, da es angibt, dass beliebig viele Dezimalzahlen dahinter auch ausgegeben werden.

    string.gmatch(text, pattern): Der Unterschied zwischen string.match und string.gmatch ist, dass in gmatch ein Iterator nach jeder Instanz, die dem Pattern entspricht sucht. Bei einem Iterator müssen wird dran denken, dass wir eine Schleife benutzen.
    Beispiel:

    Lua
    for option in string.gmatch("|1|2|f|3|", "%d") do
        print(option)
    end
    > 1
    > 2
    > 3


    In diesem Beispiel sind wir durch jedes Zeichen durchgegangen und haben nach einer Zahl gesucht. Sobald eine gefunden wurde, wurde diese ausgegeben.

    string.gsub(text, pattern, replacewith): Mit string.gsub können wir Teile aus Strings finden und diese mit einem Text ersetzen. Das eignet sich beispielsweise für einen Beleidigungsfilter.
    Beispiel:

    Lua
    print(string.gsub("Hallo", "l", "L"))
    > HaLLo    2


    Hier haben wir jedes kleine "l" in unserem String mit einem großen "L" ersetzt. Doch jetzt steht dahinter noch eine 2. Das liegt daran, dass ausgegeben wird, wie viele matches es letztendlich gab. In Hallo haben wir 2 "l"'s also wird logischerweise eine 2 ausgegeben.
    Allerdings können wir das folgendermaßen umgehen:

    Lua
    string.gsub("Gebe das was in {Schweif}[klammern] ist {aus}.", "{(.-)}", function(z) print(z) end)
    > Schweif
    > aus

    string.byte(char): Hiermit können wir die ASCII-Nummer eines Buchstaben herausfinden. Das könnte nützlich sein, um das gleiche wie in string.gmatch zu bezwecken.
    Beispiel:

    Lua
    print(gettok("|1|2|3|", 2, string.byte("|")))
    > 2


    Angenommen wir verändern das zweite Argument, so könnten wir auch die anderen Zahlen ausgeben lassen. Um alle ausgeben zu lassen empfiehlt sich eine for-Schleife.

    string.len(text): Gibt uns einfach die Länge eines Strings aus.
    Beispiel:

    Lua
    print(string.len("Hallo"))
    > 5

    string.lower(text): Verwandelt alle Buchstaben in Kleinbuchstaben.
    Beispiel:

    Lua
    print(string.lower("HaLLo"))
    > hallo

    string.format(pattern, text): Damit können wir unseren String formatieren. Beispielsweise können wir die Anzahl der Nachkommastellen angeben.
    Beispiel:

    Lua
    print(string.format("%.3f", 1.23456789))
    > 1.235


    Rundet auf die 3 Nachkommastelle auf.

    Anwendung in MTA:

    Beispiele:

    Lua
    assert(string.find(NAME, "%u%l*_%u%l*"),"Der String NAME besitzt ein ungültiges Format")


    Dieses Script bietet sich für allem für Roleplays an, da dieses Script eine Art Vorname_Nachname-String benötigt.
    Doch was bedeutet jetzt das Pattern?
    %u - Ein Uppercase-Buchstabe wird benötigt
    %l - Darauf soll ein lowercase-Buchstabe folgen
    * - Nun können beliebig viele Zeichen folgen
    _ - Jetzt ein Unterstrich
    Und das gleiche nochmal.

    Patterns:

    Code
    %d - Dezimalzahl
    %a - Buchstabe
    %w+ - Wörter
    %l - Kleinbuchstaben
    %u - Großbuchstaben
    %s - Leerzeichen
    %e - Exponent
    %q - Anführungszeichen
    %f - Float

    Weiteres folgt später.

    Verbesserungsvorschläge und Ergänzungen bitte posten!

  • Dieses Thema enthält einen weiteren Beitrag, der nur für registrierte Benutzer sichtbar ist, bitte registrieren Sie sich oder melden Sie sich an um diesen lesen zu können.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!