Next: Ein- und Ausgabe, Previous: stringproc, Up: stringproc [Contents][Index]

### 73.1 Einführung in die Verarbeitung von Zeichenketten

Das Paket `stringproc` enthält Funktionen für die Verarbeitung von Zeichen und Zeichenketten, was Formatierung, Zeichenkodierung und die Behandlung von Datenströmen mit einschließt. Abgerundet wird dieses Paket durch Werkzeuge für die Kryptographie, wie z.B. Base64 und Hashfunktionen.

Das Paket kann explizit durch `load(stringproc)` geladen werden oder automatisch durch die Verwendung einer der enthaltenden Funktionen.

Fragen und Fehlerberichte senden Sie bitte direkt an den Autor, dessen e-Mail-Adresse durch den folgenden Befehl ausgegeben wird.

`printf(true, "~{~a~}@gmail.com", split(sdowncase("Volker van Nek")))$`

Eine Zeichenkette wird durch die Eingabe von z.B. `"Text"` erzeugt. Ist die Optionsvariable `stringdisp` auf `false` gesetzt, was standardmäßig der Fall ist, werden die (doppelten) Anführungszeichen nicht mit ausgegeben. stringp ist ein Test, ob ein Objekt eine Zeichenkette ist.

    (%i1) str: "Text";
    (%o1)                         Text
    (%i2) stringp(str);
    (%o2)                         true

Schriftzeichen werden in Maxima durch Zeichenketten der Länge 1 dargestellt. charp ist hier der entsprechende Test.

    (%i1) char: "e";
    (%o1)                           e
    (%i2) charp(char);
    (%o2)                         true

Positionsindizes in Zeichenketten sind in Maxima genau so wie in Listen 1-indiziert, wodurch die folgende Übereinstimmung entsteht.

    (%i1) is(charat("Lisp",1) = charlist("Lisp")[1]);
    (%o1)                         true

Eine Zeichenkette kann Ausdrücke enthalten, die Maxima versteht. Diese können mit parse_string heraus gelöst werden.

    (%i1) map(parse_string, ["42" ,"sqrt(2)", "%pi"]);
    (%o1)                   [42, sqrt(2), %pi]
    (%i2) map('float, %);
    (%o2)        [42.0, 1.414213562373095, 3.141592653589793]

Zeichenketten können als Schriftzeichen und binär als Oktette verarbeitet werden. string_to_octets bzw. octets_to_string dienen hierbei zur Umrechnung. Die verwendbaren Kodierungen sind dabei von der Plattform, der Anwendung und vom unter Maxima liegenden Lisp abhängig. (Folgend Maxima in GNU/Linux, kompiliert mit SBCL.)

    (%i1) obase: 16.$
    (%i2) string_to_octets("$£€", "cp1252");
    (%o2)                     [24, 0A3, 80]
    (%i3) string_to_octets("$£€", "utf-8");
    (%o3)               [24, 0C2, 0A3, 0E2, 82, 0AC]

Dem entsprechend können Zeichenketten an Datenströme für Schriftzeichen und als Oktette an binäre Ströme weiter gegeben werden. Das folgende Beispiel zeigt das Schreiben und Lesen von Schriftzeichen in bzw. aus einer Datei.

openw gibt dabei einen Ausgabestrom in eine Datei zurück, mit printf wird formatiert in diesen Strom geschrieben und mit z.B. close werden die im Strom enthaltenden Zeichen in die Datei geschrieben.

    (%i1) s: openw("file.txt");
    (%o1)                #<output stream file.txt>
    (%i2) printf(s, "~%~d ~f ~a ~a ~f ~e ~a~%",
    42, 1.234, sqrt(2), %pi, 1.0e-2, 1.0e-2, 1.0b-2)$
    (%i3) close(s)$

openr gibt folgend einen Eingabestrom aus der obigen Datei zurück und readline die gelesene Zeile als Zeichenkette. Mit z.B. split oder tokens kann die Zeichenkette anschließend in seine Bestandteile zerlegt werden. parse_string verwandelt diese dann in auswertbare Ausdrücke.

    (%i4) s: openr("file.txt");
    (%o4)                 #<input stream file.txt>
    (%i5) readline(s);
    (%o5)          42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
    (%i6) map(parse_string, split(%));
    (%o6)       [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
    (%i7) close(s)$

Next: Ein- und Ausgabe, Previous: stringproc, Up: stringproc [Contents][Index]