Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Форматирование строки GDScript

GDScript предлагает возможность форматирования строк, которое позволяет повторно использовать текстовые шаблоны для сжатого создания различных, но похожих строк.

Строки формата похожи на обычные строки, за исключением того, что они содержат определенные последовательности символов-заполнителей. Эти заполнители могут быть легко заменены параметрами, переданными в строку формата.

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.

Использование в GDScript

Изучите конкретный пример на GDScript:

# 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."

Заполнители всегда начинаются с %, но следующий символ или символы, format specifier, определяют, как данное значение преобразуется в строку.

Заполнитель %s , показанный в приведенном выше примере, является простейшим заполнителем и работает для большинстве случаев: он преобразует значение тем же методом, с помощью неявного преобразования String или как str(). Строки остаются неизменными, логические значения превращаются в "True" или "False", целочисленное или вещественное число становится десятичным, другие типы обычно возвращают свои данные в удобочитаемую строку.

Существует также другой способ форматирования текста в GDScript, а именно метод String.format(). Он заменяет все вхождения ключа в строке с соответствующим значением. Метод может обрабатывать массивы или словари для пар ключ / значение.

Массивы могут использоваться в качестве ключа, индекса или в смешанном стиле (см. примеры ниже). Порядок имеет значение только при использовании индекса или массива в смешанном стиле.

Быстрый пример на 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"

Существуют другие format specifiers, но они применимы только при использовании оператора %.

Несколько заполнителей

Форматирование строк может содержать несколько заполнителей. В таком случае значения передаются в виде массива, по одному значению на заполнитель (если не используется спецификатор формата *, см. динамический отступ):

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."

Значения вставляются по порядку. Помните, что все заполнители должны быть заменены сразу, поэтому должно быть соответствующее количество значений.

Спецификаторы форматирования

Есть спецификаторы форматирования, кроме s, которые могут быть использованы как заполнители. Они состоят из одного или нескольких символов. Некоторые из них работают сами по себе, как s, некоторые встречаются перед другими символами, некоторые работают только с определенными значениями или символами.

Типы заполнителей

Один и только один из них должен всегда отображаться как последний символ в спецификаторе форматирования. Помимо s, они требуют определенные типы параметров.

s

Simple преобразование в строку осуществляется тем же методом, что и неявное преобразование строки.

c

Unicode character. Ожидает одно 8-разрядное целое число без знака (0-255) таблицы символов или односимвольную строку.

d

Decimal integral. Ожидает целое или вещественное число (будет выведено десятичное число).

o

Octal integral. Ожидает целое или вещественное число (будет выведено восьмеричное число).

x

Hexadecimal integral с дополнительным параметром lower-case. Ожидает целое или вещественное число (будет выведено шестнадцатеричное число с буквами в нижнем регистре).

X

Hexadecimal integral с дополнительным параметром upper-case. Ожидает целое или вещественное число (будет выведено шестнадцатеричное число с буквами в верхнем регистре).

f

Decimal real. Ожидает целое или вещественное число (будет выведено десятичное целое или вещественное число).

v

A vector. Expects any float or int-based vector object ( Vector2, Vector3, Vector4, Vector2i, Vector3i or Vector4i). Will display the vector coordinates in parentheses, formatting each coordinate as if it was an %f, and using the same modifiers.

Модификаторы-заполнители

Эти символы появляются перед вышеуказанными. Некоторые из них работают только при определенных условиях.

+

В спецификаторах чисел, show + sign показывает знак + если число положительное.

Integer

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 ..

.

Before f or v, set precision to 0 decimal places. Can be followed up with numbers to change. Padded with zeroes.

-

Pad to the right заполнение справа, а не слева.

*

Динамический отступ это дополнительный интегральный параметр для настройки отступов или точности после ., смотрите динамический отступ.

Отступ

Символы . (точка), * (звездочка), - (знак минус) и цифры (0-9) используются для отступов. Это позволяет печатать несколько значений, выровненных по вертикали, как в столбце, при условии, что используется шрифт с фиксированной шириной.

Чтобы заполнить строку до минимальной длины, добавьте целое число в спецификатор:

print("%10d" % 12345)
# output: "     12345"
# 5 leading spaces for a total length of 10

Если целое число начинается с 0, целочисленные значения заполняются нулями вместо пробела:

print("%010d" % 12345)
# output: "0000012345"

Точность может быть задана для действительных чисел, добавлением "." (точки) с целым числом рядом с ним. Без целого числа после ".", используется точность 0, округляя до целочисленного значения. Целое число, которое нужно использовать для отступа, должно появиться перед точкой.

# Pad to minimum length of 10, round to 3 decimal places
print("%10.3f" % 10000.5555)
# Output: " 10000.556"
# 1 leading space

Символ - приведет к отступу справа, а не слева, полезному для выравнивания текста справа:

print("%-10d" % 12345678)
# Output: "12345678  "
# 2 trailing spaces

Динамический отступ

Используя символ * (звездочка), отступ или точность могут быть установлены без изменения формата строки. Он используется вместо целого числа в спецификаторе формата. Затем значения для отступа и точности передаются при форматировании:

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

По-прежнему можно поместить нули в целочисленные заполнители, добавив 0 перед *:

print("%0*d" % [2, 3])
# Output: "03"

Escape-последовательность

Чтобы вставить литерал % в строку форматирования, он должен быть экранирован, чтобы не читать его в качестве заполнителя. Это делается путем дублирования символа:

var health = 56
print("Remaining health: %d%%" % health)
# Output: "Remaining health: 56%"

Примеры методов форматирования

Далее следуют несколько примеров того, как использовать различные вариации метода String.format.

Тип

Стиль

Пример

Результат

Словарь

ключ

"Привет, {name} v{version}!".format({"имя":"Godette", "версия":"3.0"})

Привет, Godette v3.0!

Словарь

индекс

"Привет, {0} v{1}!".format({"0":"Godette", "1":"3.0"})

Привет, Godette v3.0!

Словарь

Сочетание

"Привет, {0} v{version}!".format({"0":"Godette", "версия":"3.0"})

Привет, Godette v3.0!

Массив

ключ

"Привет, {name} v{version}!".format([["версия":"3.0"], ["имя","Godette"])

Привет, Godette v3.0!

Массив

индекс

"Привет, {0} v{1}!".format(["Godette","3.0"])

Привет, Godette v3.0!

Массив

Сочетание

"Привет, {name} v{0}!".format([3.0, ["name":"Godette"]])

Привет, Godette v3.0!

Массив

без индекса

"Привет, {} v{}!".format(["Godette", 3.0], "{}")

Привет, Godette v3.0!

Заполнители также могут быть настроены при использовании String.format. Вот несколько примеров этого функционала.

Тип

Пример

Результат

Infix (по умолчанию)

"Привет, {0} v{1}".format(["Godette", "3.0"], "{_}")

Привет, Godette v3.0

Постфикс

"Привет, 0% v1%".format(["Godette", "3.0"], "_%")

Привет, Godette v3.0

Префикс

"Привет, %0 v%1".format(["Godette", "3.0"], "%_")

Привет, Godette v3.0

Полезно использовать комбинацию String.format и оператора %, так как String.format не предоставляет возможности управлять представлением чисел.

Пример

Результат

"Привет, {0} v{version}".format({0:"Godette", "version":"%0.2f" % 3.114})

Привет, Godette v3.11