The book is currently only available in German.
Standard-Bibliothek — `text`
Verfügbar — implementiert in Phase B.6.3. Vollständige Spec in
docs/text.md.
Texte verarbeiten: prüfen, umformen, aufteilen, verketten. Eines der wichtigsten Module — fast jedes Programm liest oder schreibt irgendwann Text.
19.1 Strings sind in Kiste immutabel
Das ist der wichtigste konzeptuelle Punkt für text:
Ein
text-Wert kann nicht verändert werden. Wenn du einen Text „groß schreiben" willst, bekommst du einen neuen Text zurück; der alte bleibt was er war.
Deshalb hat das text-Modul keine Imperativ-Funktionen — anders als liste. Es gibt text.großgeschrieben, aber kein text.großschreibe. Es gibt text.beschnitten, aber kein text.beschneide.
nutze text
nimm s = "hallo"
nimm groß = text.großgeschrieben(s)
sag s // "hallo" ← unverändert
sag groß // "HALLO"
19.2 Aktivieren und Prüfen
nutze text
nimm name = "Sascha"
sag text.länge(name) // 6
sag text.leer(name) // falsch
sag text.enthält(name, "scha") // wahr
sag text.beginnt_mit(name, "S") // wahr
sag text.endet_mit(name, "ha") // wahr
sag text.finde_index(name, "ch") // 3
sag text.zähle("aaaa", "aa") // 2 (nicht-überlappend!)
19.3 Transformation
sag text.großgeschrieben("hallo") // "HALLO"
sag text.kleingeschrieben("HALLO") // "hallo"
sag text.kapitalisiert("hallo welt") // "Hallo welt" (nur erstes Zeichen)
sag text.beschnitten(" hallo ") // "hallo"
sag text.beschnitten("**hi**", "*") // "hi"
sag text.ersetzt("aaa", "a", "bb") // "bbbbbb" (alle)
sag text.ersetzt_erstes("aaa", "a", "X") // "Xaa" (nur erstes)
sag text.umgekehrt("hallo") // "ollah"
sag text.wiederholt("ab", 3) // "ababab"
sag text.gefüllt_links("42", 5, "0") // "00042"
sag text.gefüllt_rechts("42", 5, " ") // "42 "
19.4 Grapheme-Bewusstsein
text.länge, text.umgekehrt, text.scheibe, text.zeichen_bei arbeiten alle auf Grapheme (sichtbare Zeichen), nicht auf Bytes oder Unicode-Codepoints. Das ist die Default-Linie aus B.3.7.
sag text.länge("café") // 4 ← der Mensch sieht 4 Zeichen
sag text.umgekehrt("café") // "éfac" ← niemals halbiertes é
sag text.scheibe("café", 0, 2) // "caf"
Das gleiche gilt für Emoji-Sequenzen (Familien, Flaggen):
sag text.länge("👨👩👧") // 1 ← die ZWJ-Familie ist EIN Zeichen
sag text.umgekehrt("a👨👩👧b") // "b👨👩👧a"
19.5 Auswahl
nimm s = "Hallo Welt"
sag text.scheibe(s, 0, 4) // "Hallo"
sag text.scheibe(s, -3, -1) // "elt" (negative Indizes)
sag text.zeichen_bei(s, 6) // "W"
sag text.erste_n(s, 5) // "Hallo"
sag text.letzte_n(s, 4) // "Welt"
Stolperfalle beim Modul-Wechsel: text.scheibe(t, 0, 4) schneidet
bis einschließlich Index 4 (5 Zeichen) — bytes.scheibe(b, 0, 4) dagegen
bis vor Index 4 (4 Bytes, Python-Stil). Wer zwischen Text und Bytes
wechselt, baut hier leicht einen Versatz um eins ein (Bug 007 in
BUGS-GEFUNDEN.md — eine einheitliche Konvention ist in Diskussion).
19.6 In Liste aufteilen
sag text.zerlegt("a,b,c", ",") // ["a", "b", "c"]
sag text.zerlegt("a,,b", ",") // ["a", "", "b"] ← leere Einträge bleiben
nimm doc = """Erste Zeile
Zweite Zeile
Dritte"""
sag text.zeilen(doc) // ["Erste Zeile", "Zweite Zeile", "Dritte"]
sag text.wörter(" Hallo Welt ") // ["Hallo", "Welt"] ← leere Einträge raus
sag text.zeichen("café") // ["c", "a", "f", "é"]
text.wörter und text.zeilen werfen leere Einträge an Whitespace-Sequenzen UND am Anfang/Ende weg — was du als „Wörter zählen" oder „Zeilen lesen" intuitiv erwartest. text.zerlegt dagegen behält leere Einträge — das ist semantisch wichtig für CSV-artige Daten.
19.7 Aus Liste verketten
nimm namen = ["Anna", "Beat", "Cäcilia"]
sag text.verkettet(namen, ", ") // "Anna, Beat, Cäcilia"
sag text.verkettet(namen, "") // "AnnaBeatCäcilia"
sag text.verkettet(namen, " | ") // "Anna | Beat | Cäcilia"
Naming-Hinweis: text.verkettet (nicht text.verbunden) — weil liste.verbunden(l1, l2) aus Kapitel 18 schon zwei Listen verbindet. Verschiedene Operationen brauchen verschiedene Namen.
19.8 Roundtrip-Idiom
nimm csv = "rot;grün;blau;gelb"
nimm farben = text.zerlegt(csv, ";")
// ... farben verarbeiten ...
nimm zurück = text.verkettet(farben, ";")
sag csv == zurück // wahr
19.9 Was nicht in text ist
- Reguläre Ausdrücke — kommt mit
regex-Modul (Phase B.9). - Lokalisiertes Upper/Lower (z.B. türkisches
İ/ı) — kommt mitlokal-Modul; heute Unicode-Standard sprachneutral. - Format-Strings (à la
printf) — Kistes String-Interpolation"{x + y}"deckt das ab. - Encoding-Konvertierung (Latin-1, Shift-JIS) — alle
text-Werte sind UTF-8; Konvertierung lebt später inbytes/encoding.