format

Назначение

Функция format представляет собой функцию форматирования: каждый из аргументов конвертируется в строки, которые в свою очередь комбинируются в одну строку в соответствии с условием, определяемым строкой форматирования.

Синтаксис

format(шаблон, аргумент1, аргумент2,…)

Аргументы

Функция format требует наличия минимум двух аргументов, первый из которых является шаблоном, или строкой форматирования.

Строка форматирования включает текст, в котором специальные директивы будут заменены строками; эти строки представляют собой результат форматирования используемых аргументов. Функция format принимает несколько форм директивов в строке форматирования:

  • Наследуемые строки форматирования наследования: %spec, где spec - спецификация формата. spec используется для опций форматирования, например ширина, выравнивание, основание для форматирования чисел, а также другие специальные флаги:

    спецификация 2$x означает "печать аргумента номер 2, который является целым числом, в шестнадцатеричной системе исчисления"

  • %|spec| где spec - спецификация формата. Данный синтаксис ограничивается вертикальными чертами и используется для улучшения читаемости строки форматирования, но главным образом - для того, чтобы сделать символ преобразования типов в spec опциональным:

    "%|-5|" форматирует следующую переменную с шириной, равной 5, и выравниванием по левому краю

  • %N%: Эта простое позиционное обозначение запрашивает форматирование N-ого аргумента - без каких-либо опций форматирования.

Подробная информация о спецификации формата

Спецификация spec имеет форму:

[ N$ ] [ flags ] [ width ] [ . precision ] [ argument-type ] conversion-specifier

Поля в квадратных скобках являются опциональными. Каждое поле имеет следующие определения:

  • N $ (опциональное поле) указывает, что спецификация формата применяется к N-ому аргументу (позиционная спецификация формата). Если это поле отсутствует, аргументы берутся по одному. (в дальнейшем это считается ошибкой числа аргумента)

  • flags (флаги) - последовательность любых следующих элементов:

    Флаг

    Значение

    '-'

    выравнивание по левому краю

    '='

    выравнивание по центру

    '_'

    внутреннее выравнивание

    '+'

    показывать значок для положительных чисел

    '#'

    показывать основание числа и десятичный знак

    '0'

    заполнять нулями (вставляются после значка или индикатора основания)

    ' '

    если строка не начинается с + или -, вставить пробел перед конвертируемой строкой

  • width (ширина) определяет минимальную ширину для строки, которая является результатом конверсии. При необходимости к строке будет применено выравнивание и она будет заполнена символами, которые определяются либо на потоке посредством манипуляторов, либо строкой форматирования (например, flags '0', '-', ..)

    Ширина не просто определяется на потоке конверсии. Для поддержки результата типов, определяемых пользователем (которые могут обращаться к оператору<< множество раз для нескольких чисел), ширина регулируется после конверсии потока ко всему объекту аргумента, в коде класса форматирования.
  • precision (точность; ставится после точки) определяет точность потока

    • Если на выходе имеется число с плавающей точкой, устанавливает максимальное число цифр

      • после десятичной точки в фиксированном или научном формате

      • в целом в режиме по умолчанию ('общий режим', например %g)

    • При использовании с типом char s или S имеет другое значение: конвертируемая строка усекается до первых символов char, означающих точность.

      Окончательное заполнение по ширине выполняется после усечения.
  • conversion-specifier (спецификатор преобразования) не включает ограниченный набор типов в зависимый аргумент, а просто определяет флаги ввода-вывода, связанные со спецификацией типа:

    Спецификатор преобразования

    Значение

    b

    результат булевое-значение - строка

    p или x

    шестнадцатеричный результат

    o

    восьмеричный результат

    a

    шестнадцатеричная экспоненциальная нотация

    e

    научный формат float

    f

    фиксированный формат float

    g

    формат общий -по умолчанию- float

    X, A, E, F или G

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

    d, i или u

    результат десятичного типа

    s или S

    строковый результат

    c или C

    1-символьный результат

    %

    печать символа %

Спецификатор преобразования 'n' игнорируется (как и соответствующий аргумент), т.к. в данном контексте он не подходит.

new format-specifications

  • как указано в таблице по флагам, были добавлены флаги выравнивания по центру и внутреннего выравнивания (' = ', and ' _ ').

  • %{nt} , где n - положительное число, добавляет абсолютную табуляцию. Это означает, что при необходимости формат будет заполнять строку символами до тех пор, пока длина созданной строки не достигнет n символов.

  • %|nTX| добавляет табуляцию таким же образом, но для заполнения используется символ X вместо заполняющих char в потоке (который в состоянии по умолчанию является для потока space).

Возвращаемое значение

Функция format возвращает строку, которая является результатом форматирования аргументов функции в соответствии с условиями строки форматирования.

Примеры
  • format("%1% %2% %3% %2% %1%", 11, 22, 333) возвращает 11 22 333 22 11

  • format("(x,y) = (%1$+5d,%2$+5d)", -23, 35) возвращает (x,y) = ( -23, +35)

  • format("writing %s, x=%s : %d-th step","toto", 40.23, 50) возвращает writing toto, x=40.23 : 50-th step

  • format("(x,y) = (%+5d,%+5d)" , -23 , 35) возвращает (x,y) = ( -23, +35)

  • format("(x,y) = (%|+5|,%|+5|)",-23,35) возвращает (x,y) = ( -23, +35)

  • format(("(x,y) = (%1$+5d,%2$+5d)"),-23, 35) возвращает (x,y) = ( -23, +35)

  • format("(x,y) = (%|1$+5|,%|2$+5|)",-23,35) возвращает (x,y) = ( -23, +35)