Teile eines Textes
Oft brauchst du nur einen Teil eines Textes: den ersten Buchstaben eines Namens, das Jahr in einem Datum. Die Methode sub (Kurzform für substring, eine Teilzeichenkette) gibt den Teil zwischen zwei Positionen zurück. Die Zeichen eines Textes sind ab 1 nummeriert, wie die Einträge einer Liste, und beide Positionen gehören zum Ergebnis:
local wort = "Heustall"
print(wort:sub(1, 3))
print(wort:sub(4, 8))
print(wort:sub(4))Das gibt Folgendes aus:
Heu
stall
stallOhne die zweite Position geht sub bis zum Ende des Textes. Für ein einzelnes Zeichen gibst du dieselbe Position zweimal an: wort:sub(1, 1) ist "H". Lua hat keinen eigenen Typ für ein einzelnes Zeichen; es ist einfach ein Text der Länge 1.
Positionen können auch negativ sein. Dann zählen sie vom Ende: -1 ist das letzte Zeichen, -2 das davor und so weiter. Das ist praktisch, wenn du weißt, wie lang das Ende eines Textes ist, aber nicht, wie lang der ganze Text ist:
local wort = "Heustall"
print(wort:sub(-1))
print(wort:sub(-5))
print(wort:sub(1, -6))Das gibt Folgendes aus:
l
stall
HeuDie letzte Zeile nimmt alles vom ersten Zeichen bis zum sechsten von hinten: das Wort ohne seine letzten fünf Zeichen.
sub endet nie mit einem Fehler. Positionen hinter dem Ende geben so viel zurück, wie es gibt, und wenn zwischen den Positionen nichts liegt, bekommst du einen leeren Text:
local wort = "Heustall"
print(wort:sub(5, 100))
print(wort:sub(20) .. "|")Das gibt Folgendes aus:
tall
|Methoden geben neue Texte zurück, deshalb kannst du gleich die nächste Methode auf das Ergebnis anwenden. So schreibst du ein Wort mit großem Anfangsbuchstaben: Nimm das erste Zeichen als Großbuchstaben und hänge den Rest an:
local name = "berta"
local huebsch = name:sub(1, 1):upper() .. name:sub(2)
print(huebsch)Das gibt Folgendes aus:
Bertaname:sub(1, 1):upper() wird von links nach rechts ausgeführt: Zuerst gibt sub "b" zurück, dann macht upper daraus "B". Und diese Schleife geht alle Zeichen nacheinander durch:
local wort = "huhn"
for i = 1, #wort do
print(i, wort:sub(i, i))
endDas gibt Folgendes aus:
1 h
2 u
3 h
4 nTypischer Fehler: zu vergessen, dass die zweite Position dazugehört. wort:sub(1, 4) gibt vier Zeichen zurück, "Heus", nicht drei. Und wie # zählen auch die Positionen Bytes, ein Buchstabe mit Umlaut belegt also zwei davon. Mehr dazu später in dieser Lektion.
So schreibst du es:
Anweisungen
- 1
Jedes Etikett endet mit dem Erntedatum, und ein Datum ist immer 10 Zeichen lang. Hole es mit
subund einer negativen Position, speichere es in einer Variablendatumund gibDatum: 2026-06-14aus. - 2
Der Name der Pflanze ist alles vor dem Leerzeichen: das Etikett ohne seine letzten 11 Zeichen (das Leerzeichen und das Datum). Speichere ihn in einer Variablen
pflanzeund gib ihn mit großem Anfangsbuchstaben aus:Pflanze: Karotten. - 3
Emmas Kundschaft ist an Daten in deutscher Schreibweise gewöhnt: Tag, Monat, Jahr. Hole das Jahr, den Monat und den Tag mit
subausdatumund gibGeerntet am 14.06.2026aus.