format
Команда форматирует строку в стиле процедуры sprintf.
  •   Синтаксиc
  •   Введение
  •   Процесс формирования
  •   Указатель позиции
  •   Флаги преобразования
  •   Минимальная  ширина поля
  •   Точность
  •   Преобразователь длины
  •   Тип преобразования
  •   Отличия от ANSI SPRINTF
  • СИНТАНСИС
    format formatString?arg arg...?
    ВВЕДЕНИЕ Данная команда создает и возвращает программе форматированную строку так же, как это делает процедура ANSI C sprintf (эта процедура используется в реализации команды). Подобно sprintf, formatString указывает с помощью спецификаторов преобразований,как именно сформатировать результат, а возможные дополнительные аргументы предназначены для подстановки в результат.
    Команда немного отличается от sprintf в части отдельных спецификаторов и ключей.
    ПРОЦЕСС ФОРМИРОВАНИЯ Команда просматривает строку formatString слева направо. Все символы из строки непосредственно переносятся в результирующую строку, кроме символа ‘% и следующих непосредственно за ним. Такая последовательность символов рассматривается как спецификатор преобразования. Этот спецификатор управляет преобразованием очередного аргумента arg в указанный формат, после чего тот добавляется к результирующей строке вместо соответствующего спецификатора. Если в строке formatString содержится несколько спецификаторов, каждый из них управляет преобразованием одного дополнительного аргумента. Число таких аргументов должно быть достаточным для всех спецификаторов в строке.
    Каждый из спецификаторов преобразования может содержать до шести различных частей: указатель позиции, набор флагов, минимальная ширина поля, точность, преобразователь длины и тип преобразования. Любые из полей, кроме типа преобразования, могут отсутствовать. Ниже обсуждаются соответствующие разделы спецификаторов.
    УКАЗАТЕЛЬ ПОЗИЦИИ
    Если за символом ‘%’ следуют целое число и знак ‘$, как например в ‘%2$d’, то величина для преобразования берется не из следующего аргумента, а из аргумента, занимающего соответствующую позицию в списке (‘1’ соответствует первому аргументу arg). Если спецификатор преобразования требует нескольких аргументов (когда он содержит символ ‘*’), то используются последовательные аргументы, начиная с указанного. Если один из спецификаторов содержит указание позиции аргумента, то и все остальные спецификаторы должны его содержать.
    ФЛАГИ ПРЕОБРАЗОВАНИЯ Второй раздел спецификатора может содержать в произвольном порядке любые флаги из перечисленных ниже.
     
    Указывает, что соответствующий аргумент будет выровнен влево (числа обычно выравниваются вправо с добавлением лидирующих пробелов при необходимости).
    + Указывает, что числа всегда будут вставлены со знаком, даже если они положительные.
    space Указывает, что перед числом будет добавлен пробел, если первый символ не знак.
    0 Указывает, что число будет выровнено с добавлением лидирующих нулей.
    # Указывает на использование альтернативной формы вывода. Для ‘o’ и ‘O’ преобразований гарантирует, что первой цифрой всегда будет ‘0’. Для ‘x’ и ‘X’ преобразований — что 0x или 0X соответственно будет добавлен в начало числа. Для ‘e’, ‘E’, ‘f’, ‘g’, и ‘G’ — что в числе будет использована десятичная точка. Для ‘g’ и ‘G’ — что конечные нули не будут отброшены.
    МИНИМАЛЬНАЯ ШИРИНА ПОЛЯ Третья часть спецификатора преобразования представляет собой число, задающее минимальную ширину поля для данного преобразования. Обычно она используется для формирования данных в таблицу. Если преобразуемое значение не содержит указанного числа символов, одно будет дополнено до необходимого размера. Обычно поле заполняется пробелами слева, однако, указанные выше флаги '0' и '—' позволяют заполнять его нулями слева или пробелами справа. Если минимальная ширина поля указана как ‘*’, а не как число, то в качестве числового значения используется значение следующего аргумента в команде. ТОЧНОСТЬ
    Четвертая часть спецификатора определяет точность представления чисел. Она состоит из точки и последующего числа. Число имеет различный смысл при различных преобразованиях. Для ‘e’, ‘E’ и ‘f’ преобразования оно определяет число цифр справа от десятичной точки. Для ‘g’ и ‘G’ — общее число чисел слева и справа от десятичной точки (однако, конечные нули будут обрезаться, если не указан флаг ‘#’). Для целочисленных преобразований оно определяет минимальное число символов (при необходимости будут добавляться лидирующие нули). Для ‘s’ преобразований определяет максимальное число символов, которое будет выводиться. Если строка длиннее, конечные символы будут отброшены. Если точность указана как ‘*’, а не как число, то в качестве числового значения используется значение следующего аргумента в команде.
    ПРЕОБРАЗОВАТЕЛЬ ДЛИНЫ Пятая часть спецификатора может принимать значения ‘h’или ‘l’. Значение ‘h’ означает, что все числовые значения предварительно обрезаются до 16 бит. Значение ‘l’ означает, что никаких предварительных преобразований не производится. ТИП ПРЕОБРАЗОВАНИЯ
    Последняя часть спецификатора представляет собой букву, которая определяет тип преобразования. Допускаются следующие значения.
     
    Преобразует целое число в десятичную строку со знаком.
    Преобразует целое число в десятичную строку без знака.
    i Преобразует целое число в десятичную строку со знаком. Целое может быть десятичным, восьмеричным (с 0 вначале) или шестнадцатеричным (с 0x вначале).
    o Преобразует целое число в восьмеричную строку без знака.
    x or X Преобразует целое число в шестнадцатеричную строку без знака. Используются символы `0123456789abcdef'' для x и ``0123456789ABCDEF'' для X.
    c Преобразует целое число в восьмибитный символ, который оно представляет.
    s Не преобразует, но просто вставляет строку
    f Преобразует число с плавающей точкой в десятичное со знаком в форме xx.yyy, где число символов после запятой определяется точностью.
    e or E Преобразует число с плавающей точкой в число в экспоненциальной форме x.yyye±zz, где число символов после запятой определяется точностью (по умолчанию 6). Для E в записи числа используется Eвместо e.
    g or G Если порядок числа меньше –4 или больше, чем точность, или равен точности, преобразует число с плавающей точкой как ‘%e’ или ‘%E’. В противном случае преобразует как ‘%f’. 
    % Просто подставляет символ ‘%’.

     

    Для числовых преобразований аргумент должен быть целым числом или десятичным с плавающей точкой. Аргумент преобразуется в двоичное число, а затем преобразуется обратно в строку в соответствии с указанным типом преобразования.

    ОТЛИЧИЯ ОТ ANSI SPRINTF
    Поведение команды format отличается от процедуры sprintf в следующих моментах:

    %p’ и ‘%n’ типы не поддерживаются

    Для ‘%c’ аргумент должен быть десятичным числом.

    При преобразованиях длины значение l игнорируется.


    [ Список команд Tcl ]            [ Содержание ]