Встроенные команды ТCL


format

        Команда форматирует строку в стиле процедуры sprintf.

         Синтаксис
        format formatString?arg arg...?

        Описание

        Данная команда создает и возвращает программе форматированную строку так же, как это делает процедура ANSI С sprintf (эта процедура используется в реализации команды). Подобно sprintf, formatString указывает с помощью спецификаторов преобразований, как именно сформатировать результат, а возможные дополнительные аргументы предназначены для подстановки в результат.

        Команда немного отличается от sprintf в части отдельных спецификаторов и ключей.

        Команда просматривает строку formatString слева направо. Все символы из строки непосредственно переносятся в результирующую строку, кроме символа «%» и следующих непосредственно за ним. Такая последовательность символов рассматривается как спецификатор преобразования. Этот спецификатор управляет преобразованием очередного аргумента arg в указанный формат, после чего тот добавляется к результирующей строке вместо соответствующего спецификатора. Если в строке formatString содержится несколько спецификаторов, каждый из них управляет преобразованием одного дополнительного аргумента. Число таких аргументов должно быть достаточным для всех спецификаторов в строке.

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

        Если за символом «%» следуют целое число и знак «$», как например в %2$d, то величина для преобразования берется не из следующего аргумента, а из аргумента, занимающего соответствующую позицию в списке (1 соответствует первому аргументу arg). Если спецификатор преобразования требует нескольких аргументов (когда он содержит символ «*»), то используются последовательные аргументы, начиная с указанного. Если один из спецификаторов содержит указание позиции аргумента, то и все остальные спецификаторы должны его содержать.

        Второй раздел спецификатора может содержать в произвольном порядке любые флаги из перечисленных ниже.


        Указывает, что соответствующий аргумент будет выровнен влево (числа обычно выравниваются вправо с добавлением лидирующих пробелов при необходимости).

+
        Указывает, что числа всегда будут вставлены со знаком, даже если они положительные.

space
        Указывает, что перед числом будет добавлен пробел, если первый символ не знак.

0
        Указывает, что число будет выровнено с добавлением лидирующих нулей.

#
        Указывает на использование альтернативной формы вывода. Для «о» и «О» преобразований гарантирует, что первой цифрой всегда будет 0. Для «х» и «X» преобразований — что или соответственно будет добавлен в начало числа. Для «е», «Е», «f», «g» и «G» — что в числе будет использована десятичная точка. Для «g» и «G» — что конечные нули не будут отброшены.

        Третья часть спецификатора преобразования представляет собой число, задающее минимальную ширину поля для данного преобразования. Обычно она используется для формирования данных в таблицу: Если преобразуемое значение не содержит указанного числа символов, одно будет дополнено до необходимого размера. Обычно поле заполняется пробелами слева, однако, указанные выше флаги «0» и «—» позволяют заполнять его нулями слева или пробелами справа. Если минимальная ширина поля указана как «*», а не как число, то в качестве числового значения используется значение следующего аргумента в команде.

        Четвертая часть спецификатора определяет точность представления чисел. Она состоит из точки и последующего числа. Число имеет различный смысл при различных преобразованиях. Для «е», «Е» и «f» преобразования оно определяет число цифр справа от десятичной точки. Для «g» и «G» — общее число чисел слева и справа от десятичной точки (однако, конечные нули будут обрезаться, если не указан флаг «#»). Для целочисленных преобразований оно определяет минимальное число символов (при необходимости будут добавляться лидирующие нули). Для «s» преобразований определяет максимальное число символов, которое будет выводиться. Если строка длиннее, конечные символы будут отброшены. Если точность указана как «*», а не как число, то в качестве числового значения используется значение следующего аргумента в команде.

        Пятая часть спецификатора может принимать значения «h» или «l». Значение «h» означает, что все числовые значения предварительно обрезаются до 16 бит. Значение «1» означает, что никаких предварительных преобразований не производится.

        Последняя часть спецификатора представляет собой букву, которая определяет тип преобразования. Допускаются следующие значения.

d
        Преобразует целое число в десятичную строку со знаком.

u
        Преобразует целое число в десятичную строку без знака.

i
        Преобразует целое число в десятичную строку со знаком. Целое может быть десятичным, восьмеричным (с 0 вначале) или шестнадцатеричным (с 0х вначале).

о
        Преобразует целое число в восьмеричную строку без знака.

х или X
        Преобразует целое число в шестнадцатеричную строку без знака. Используются символы 0123456789abcdef для х и 0123456789ABCDEF для X.

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

s
        Не преобразует, но просто вставляет строку

f
        Преобразует число с плавающей точкой в десятичное со знаком в форме хх.ууу, где число символов после запятой определяется точностью.

е или Е
        Преобразует число с плавающей точкой в число в экспоненциальной форме x.yyye±zz, где число символов после запятой определяется точностью (по умолчанию 6). Для Е в записи числа используется Е вместо е.

g или G
        Если порядок числа меньше -4 или больше, чем точность, или равен точности, преобразует число с плавающей точкой как или . В противном случае преобразует как %f.

%
        Просто подставляет символ %.

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