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.

s

Einfache Konvertierung von einer Zeichenkette mit der selben Methode, die bei der Konvertierung von impliziten Zeichenketten genutzt wird.

c

Ein einzelnes Unicode Zeichen. Erwartet einen vorzeichenlosen 8-bit Ganzzahltyp (0-255) für einen Codepunkt oder eine Zeichenkette bestehend aus einem einzelnen Zeichen.

d

Eine **dezimale Ganz**zahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet).

o

Eine **oktale Ganz**zahl. Erwartet eine ganze oder reelle Zahl (wird abgerundet).

x

Eine hexadezimale Ganz**zahl mit **Kleinbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet).

X

Eine hexadezimale Ganz**zahl mit **Großbuchstaben. Erwartet eine ganze oder reelle Zahl (wird abgerundet).

f

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 0 in an integer or real number placeholder. The leading 0 is ignored if - is present. When used after ., see ..

.

Vor f setzt es die Präzision auf 0 Nachkommastellen. Kann von einer Zahl gefolgt werden, um dies zu ändern. Wird notfalls mit Nullen aufgefüllt.

-

Nach rechts auffüllen statt nach links.

*

Dynamisches Auffüllen, erwarte zusätzlichen ganzzahligen Parameter nach . um den Abstand oder die Genauigkeit zu definieren, siehe auch dynamic padding.

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, {name} v{version}!".format({"name":"Godette", "version":"3.0"})

Hallo, Godette v3.0!

Dictionary (Wörterbuch)

Index

"Hallo, {0} v{1}!".format({"0":"Godette", "1":"3.0"})

Hallo, Godette v3.0!

Dictionary (Wörterbuch)

Mix

"Hallo, {0} v{version}!".format({"0":"Godette", "version":"3.0"})

Hallo, Godette v3.0!

Array

Schlüsselbild

"Hallo, {name} v{version}!".format([["version":"3.0"], ["name":"Godette"]])

Hallo, Godette v3.0!

Array

Index

"Hallo, {0} v{1}!".format(["Godette","3.0"])

Hallo, Godette v3.0!

Array

Mix

"Hallo, {name} v{0}!".format([3.0, ["name":"Godette"]])

Hallo, Godette v3.0!

Array

kein Index

"Hallo, {} v{}".format(["Godette", "3.0"], "{}")

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, {0} v{1}".format(["Godette", "3.0"], "{_}")

Hallo, Godette v3.0

Postfix

"Hallo, 0% v1%".format(["Godette", "3.0"], "_%")

Hallo, Godette v3.0

Präfix

"Hallo, %0 v%1".format(["Godette", "3.0"], "%_")

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, {0} v{version}".format({0:"Godette", "version":"%0.2f" % 3.114})

Hallo, Godette v3.11