GDScript Zeichenketten formatieren¶
GDScript bietet ein Funktion namens Zeichenketten formatieren, die es ermöglicht, Textvorlagen wieder zu benutzen, um schnell unterschiedliche, aber ähnliche Zeichenketten zu erzeugen.
Formatierte Zeichenketten sind wie normale Zeichenketten, mit der Ausnahme, dass sie bestimmte Platzhalter für Zeichensequenzen enthalten. Diese Platzhalter können einfach durch Parameter in der formatierten Zeichenkette ersetzt werden.
As an example, with %s
as a placeholder, the format string "Hello %s, how
are you?"
can easily be changed to "Hello World, how are you?"
. Notice
the placeholder is in the middle of the string; modifying it without format
strings could be cumbersome.
Verwendung in GDScript¶
Versuchen Sie das folgende GDScript-Beispiel zu verstehen:
# Define a format string with placeholder '%s'
var format_string = "We're waiting for %s."
# Using the '%' operator, the placeholder is replaced with the desired value
var actual_string = format_string % "Godot"
print(actual_string)
# Output: "We're waiting for Godot."
Platzhalter starten immer mit einem %
, aber das nächste oder die nächsten Zeichen, der Formatkennzeichner, legt fest, wie der gegebene Wert zu einer Zeichenkette konvertiert wird.
Das %s
im Beispiel oben ist der einfachste Platzhalter und funktioniert in den meisten Fällen: er konvertiert den Wert mit der gleichen Methode, von welcher eine implizierte Zeichenketten-Konvertierung oder str()
es konvertieren würde. Zeichenketten bleiben unverändert. Schalter schalten entweder in "True"
(wahr) oder "False"
(falsch), eine integrale oder reale Nummer wird decimal, andere Typen geben meist ihre Daten in einer lesbaren Zeichenkette zurück.
Es gibt auch einen anderen Weg, um Text in GDScript zu formatieren, vor allen Dingen die String.format()
Methode. Sie ersetzt alle Schlüssel in der Zeichenkette mit dem entsprechenden Wert. Die Methode kommt mit Arrays oder Dictionaries für das Schlüssel/Wert-Paar klar.
Arrays können als Schlüssel, Index oder in gemixtem Stil (siehe untere Beispiele) vorkommen. Die Reihenfolge ist nur wichtig, wenn der Index oder der gemixte Stil des Arrays benutzt wird.
Ein kurzes Beispiel in GDScript:
# Define a format string
var format_string = "We're waiting for {str}"
# Using the 'format' method, replace the 'str' placeholder
var actual_string = format_string.format({"str": "Godot"})
print(actual_string)
# Output: "We're waiting for Godot"
Es gibt auch andere Formatbezeichner, aber diese sind nur anwendbar, beim Benutzen des %
-Operators.
Mehrere Platzhalter¶
Formatierte Zeichenketten können mehrere Platzhalter enthalten. In diesem Fall werden die Werte in der Form eines Arrays gehandhabt, ein Wert pro Platzhalter (außer es wird ein Formatbezeichner mit *
genutzt, siehe dynamic padding):
var format_string = "%s was reluctant to learn %s, but now he enjoys it."
var actual_string = format_string % ["Estragon", "GDScript"]
print(actual_string)
# Output: "Estragon was reluctant to learn GDScript, but now he enjoys it."
Bemerke, dass die Werte in der Reihenfolge eingefügt werden. Denke daran, dass alle Platzhalter auf einmal ersetzt werden müssen, es muss also eine angemessene Anzahl an Werten geben.
Formatbezeichner¶
Es gibt weitere Formatbezeichner außer s
, die in Platzhaltern genutzt werden können. Diese bestehen aus einem oder mehreren Zeichen. Manche funktionieren für sich alleine, wie s
, manche stehen vor anderen Zeichenketten, wieder andere funktionieren in Verbindung mit bestimmten Werten oder Zeichenketten.
Platzhalter-Typen¶
Einer – und nur einer – dieser Platzhalter-Typen muss immer als letztes Zeichen in einem Formatbezeichner auftreten. Abgesehen von s
werden bestimmte Parametertypen benötigt.
|
Einfache Konvertierung von einer Zeichenkette mit der selben Methode, die bei der Konvertierung von impliziten Zeichenketten genutzt wird. |
|
Ein einzelnes Unicode Zeichen. Erwartet einen vorzeichenlosen 8-bit Ganzzahltyp (0-255) für einen Codepunkt oder eine Zeichenkette bestehend aus einem einzelnen Zeichen. |
|
Eine **dezimale Ganz**zahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine **oktale Ganz**zahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine hexadezimale Ganz**zahl mit **Kleinbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine hexadezimale Ganz**zahl mit **Großbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet). |
|
Eine **reelle Dezimal**zahl. Erwartet eine ganze oder reelle Zahl. |
Platzhalter-Modifikatoren¶
Diese Zeichen erscheinen vor den obigen. Einige davon funktionieren nur unter bestimmten Bedingungen.
|
Bei Zahlen-Bezeichnern das + Vorzeichen mit angeben, falls die Zahl positiv ist. |
Ganze Zahl |
Set padding. Padded with spaces or with zeroes if integer
starts with |
|
Vor |
|
Nach rechts auffüllen statt nach links. |
|
Dynamisches Auffüllen, erwarte zusätzlichen ganzzahligen Parameter nach |
Versatz¶
Die Zeichen .
(Punkt), *
(Sternchen), -
(Minus) und die Ziffern (0
-9
) werden für das Auffüllen benutzt. Dies erlaubt die Ausgabe mehrerer Werte mit vertikaler Ausrichtung wie in einer Spalte, vorausgesetzt, eine Schrift mit festgelegter Breite wird verwendet.
Um eine Zeichenfolge auf eine Minimallänge aufzufüllen, füge eine Ganzzahl zu dem Bezeichner hinzu:
print("%10d" % 12345)
# output: " 12345"
# 5 leading spaces for a total length of 10
Falls die Ganzzahl mit 0
beginnt, werden die Ganzzahlwerte mit Nullen aufgefüllt anstatt mit Leerzeichen:
print("%010d" % 12345)
# output: "0000012345"
Die Genauigkeit für reelle Zahlen kann durch das Hinzufügen von .
(Punkt) und einer darauffolgenden Ganzzahl festgelegt werden. Ohne Ganzzahl nach .
wird eine Genauigkeit von 0 genutzt, wobei auf einen ganzzahligen Wert gerundet wird. Die Anzahl der Füllzeichen muss vor dem Punkt angegeben werden.
# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space
Das Zeichen -
führt zu einem Auffüllen der Abstände von links anstatt von rechts und kann für rechtsbündigen Text verwendet werden:
print("%-10d" % 12345678)
# Output: "12345678 "
# 2 trailing spaces
Dynamischer Abstand¶
Mit dem Zeichen *
(Sternchen) kann der Abstand oder die Genauigkeit festgelegt werden, ohne die Formatzeichenfolge zu ändern. Es wird anstelle einer Ganzzahl im Formatbezeichner verwendet. Die Werte für Auffüllen und Genauigkeit werden dann beim Formatieren übergeben:
var format_string = "%*.*f"
# Pad to length of 7, round to 3 decimal places:
print(format_string % [7, 3, 8.8888])
# Output: " 8.889"
# 2 leading spaces
Es ist weiterhin möglich, Ganzzahl-Platzhalter mit Nullen aufzufüllen, indem 0
vor *
eingefügt wird:
print("%0*d" % [2, 3])
# Output: "03"
Escape-Sequenz¶
Um das Zeichen %
selbst in einen Format-Zeichenkette einzubauen, muss dieses „escaped“ (gekennzeichnet) werden, damit es nicht als Platzhalter aufgefasst wird. Dies schafft man durch das Verdoppeln des Zeichens:
var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"
Beispiele für Formatierungsverfahren¶
Im Folgenden sind einige Beispiele für die verschiedenen Aufrufarten der String.format
-Methode.
Typ |
Stil |
Beispiel |
Ergebnis |
Dictionary (Wörterbuch) |
Schlüsselbild |
|
Hallo, Godette v3.0! |
Dictionary (Wörterbuch) |
Index |
|
Hallo, Godette v3.0! |
Dictionary (Wörterbuch) |
Mix |
|
Hallo, Godette v3.0! |
Array |
Schlüsselbild |
|
Hallo, Godette v3.0! |
Array |
Index |
|
Hallo, Godette v3.0! |
Array |
Mix |
|
Hallo, Godette v3.0! |
Array |
kein Index |
|
Hallo, Godette v3.0! |
Platzhalter können auch bei String.format
angepasst werden, hier einige Beispiele zu dieser Funktionalität.
Typ |
Beispiel |
Ergebnis |
Infix (Standard) |
|
Hallo, Godette v3.0 |
Postfix |
|
Hallo, Godette v3.0 |
Präfix |
|
Hallo, Godette v3.0 |
Es kann sinnvoll sein, die String.format
-Methode mit dem %
Operator zu kombinieren, da mit String.format
keine Möglichkeit besteht, die Repräsentation von Zahlen zu beeinflussen.
Beispiel |
Ergebnis |
|
Hallo, Godette v3.11 |