projman/hlp/ru/tcl/format.html
2015-10-19 14:27:31 +04:00

275 lines
10 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>format</title>
</head>
<body>
<h1>format</h1>
<br>
<p>Команда форматирует строку в стиле процедуры
<strong>sprintf</strong>.</p>
<h2><a name="format СИНТАНСИС"></a>СИНТАКСИС</h2>
<pre>
<strong>format</strong> <em>formatString</em> ?<em>arg</em> <em>arg</em>...?
</pre>
<h2><a name="format ВВЕДЕНИЕ"></a>ВВЕДЕНИЕ</h2>
<p> Данная команда создает и возвращает программе форматированную
строку так же, как это делает процедура ANSI C sprintf (эта
процедура используется в реализации команды). Подобно
<strong>sprintf</strong>, <strong>formatString</strong> указывает с помощью
спецификаторов преобразований,как именно сформатировать
результат, а возможные дополнительные аргументы предназначены
для подстановки в результат.
</p>
<p> Команда немного отличается от <strong>sprintf</strong> в части отдельных
спецификаторов и ключей.
</p>
<h2><a name="format ПРОЦЕСС"></a>ПРОЦЕСС ФОРМИРОВАНИЯ</h2>
<p> Команда просматривает строку <em>formatString</em> слева
направо. Все символы из строки непосредственно переносятся в
результирующую строку, кроме символа <strong>%</strong> и следующих
непосредственно за ним. Такая последовательность символов
рассматривается как спецификатор преобразования. Этот
спецификатор управляет преобразованием очередного аргумента
<em>arg</em> в указанный формат, после чего тот добавляется к
результирующей строке вместо соответствующего спецификатора.
Если в строке <em>formatString</em> содержится несколько
спецификаторов, каждый из них управляет преобразованием одного
дополнительного аргумента. Число таких аргументов должно быть
достаточным для всех спецификаторов в строке.
</p>
<p> Каждый из спецификаторов преобразования может содержать до
шести различных частей: указатель позиции, набор флагов,
минимальная ширина поля, точность, преобразователь длины и тип
преобразования. Любые из полей, кроме типа преобразования, могут
отсутствовать. Ниже обсуждаются соответствующие разделы
спецификаторов.
</p>
<h2><a name="format УКАЗАТЕЛЬ ПОЗИЦИИ"></a>УКАЗАТЕЛЬ ПОЗИЦИИ</h2>
<p> Если за символом <strong>%</strong> следуют целое число и знак <strong>$</strong>,
как например в <strong>%2$d</strong>, то величина для преобразования
берется не из следующего аргумента, а из аргумента, занимающего
соответствующую позицию в списке (<strong>1</strong> соответствует первому
аргументу <em>arg</em>). Если спецификатор преобразования требует
нескольких аргументов (когда он содержит символ *), то
используются последовательные аргументы, начиная с
указанного. Если один из спецификаторов содержит указание
позиции аргумента, то и все остальные спецификаторы должны его
содержать.
</p>
<h2><a name="format ФЛАГИ ПРЕОБРАЗОВАНИЯ"></a>ФЛАГИ
ПРЕОБРАЗОВАНИЯ</h2>
<p> Второй раздел спецификатора может содержать в произвольном
порядке любые флаги из перечисленных ниже.</p>
<table>
<tbody>
<tr>
<td><strong>-</strong></td>
<td>Указывает, что соответствующий аргумент будет выровнен
влево (числа обычно выравниваются вправо с добавлением
лидирующих пробелов при необходимости).</td>
</tr>
<tr>
<td><strong>+</strong></td>
<td>Указывает, что числа всегда будут вставлены со знаком,
даже если они положительные.</td>
</tr>
<tr>
<td><em>space</em></td>
<td>Указывает, что перед числом будет добавлен пробел, если
первый символ не знак.</td>
</tr>
<tr>
<td>0</td>
<td>Указывает, что число будет выровнено с добавлением
лидирующих нулей.</td>
</tr>
<tr>
<td>#</td>
<td>Указывает на использование альтернативной формы
вывода. Для <strong>o</strong> и <strong>O</strong> преобразований
гарантирует, что первой цифрой всегда будет <strong>0</strong>. Для
<strong>x</strong> и <strong>X</strong> преобразований - что <strong>0x</strong> или
<strong>0X</strong> соответственно будет добавлен в начало
числа. Для <strong>e</strong>, <strong>E</strong>, <strong>f</strong>, <strong>g</strong>, и
<strong>G</strong> - что в числе будет использована десятичная
точка. Для <strong>g</strong> и <strong>G</strong> - что конечные нули не
будут отброшены.</td>
</tr>
</tbody>
</table>
<h2><a name="format МИНИМАЛЬНАЯ ШИРИНА ПОЛЯ"></a>МИНИМАЛЬНАЯ
ШИРИНА ПОЛЯ</h2>
<p> Третья часть спецификатора преобразования представляет собой
число, задающее минимальную ширину поля для данного
преобразования. Обычно она используется для формирования данных
в таблицу. Если преобразуемое значение не содержит указанного
числа символов, одно будет дополнено до необходимого
размера. Обычно поле заполняется пробелами слева, однако,
указанные выше флаги <strong>0</strong> и <strong>-</strong> позволяют заполнять его
нулями слева или пробелами справа. Если минимальная ширина поля
указана как <strong>*</strong>, а не как число, то в качестве числового
значения используется значение следующего аргумента в команде.
</p>
<h2><a name="format ТОЧНОСТЬ"></a>ТОЧНОСТЬ</h2>
<p> Четвертая часть спецификатора определяет точность
представления чисел. Она состоит из точки и последующего
числа. Число имеет различный смысл при различных
преобразованиях. Для <strong>e</strong>, <strong>E</strong> и <strong>f</strong>
преобразования оно определяет число цифр справа от десятичной
точки. Для <strong>g</strong> и <strong>G</strong> - общее число чисел слева и
справа от десятичной точки (однако, конечные нули будут
обрезаться, если не указан флаг <strong>#</strong>). Для целочисленных
преобразований оно определяет минимальное число символов (при
необходимости будут добавляться лидирующие нули). Для <strong>s</strong>
преобразований определяет максимальное число символов, которое
будет выводиться. Если строка длиннее, конечные символы будут
отброшены. Если точность указана как <strong>*,</strong> а не как число,
то в качестве числового значения используется значение
следующего аргумента в команде.
</p>
<h2><a name="format ПРЕОБРАЗОВАТЕЛЬ ДЛИНЫ"></a>ПРЕОБРАЗОВАТЕЛЬ
ДЛИНЫ</h2>
<p>
Пятая часть спецификатора может принимать значения
<strong>h</strong>или <strong>l</strong>. Значение <strong>h</strong> означает, что
все числовые значения предварительно обрезаются до 16 бит.
Значение <strong>l</strong> означает, что никаких предварительных
преобразований не производится.
</p>
<h2><a name="format ТИП ПРЕОБРАЗОВАНИЯ"></a>ТИП
ПРЕОБРАЗОВАНИЯ</h2>
<p> Последняя часть спецификатора представляет собой букву,
которая определяет тип преобразования. Допускаются следующие
значения. </p>
<table>
<tbody>
<tr>
<td><strong>d</strong></td>
<td>Преобразует целое число в десятичную строку со
знаком.</td>
</tr>
<tr>
<td><strong>u</strong></td>
<td>Преобразует целое число в десятичную строку без
знака.</td>
</tr>
<tr>
<td><strong>i</strong></td>
<td>Преобразует целое число в десятичную строку со
знаком. Целое может быть десятичным, восьмеричным (с
<strong>0</strong> вначале) или шестнадцатеричным (с <strong>0x</strong>
вначале).</td>
</tr>
<tr>
<td><strong>o</strong></td>
<td>Преобразует целое число в восьмеричную строку без
знака.</td>
</tr>
<tr>
<td><strong>x</strong> or <strong>X</strong></td>
<td>Преобразует целое число в шестнадцатиричную строку без
знака. Используются символы `0123456789abcdef'' для
<strong>x</strong> и ``0123456789ABCDEF'' для <strong>X</strong>.
</td>
</tr>
<tr>
<td><strong>c</strong></td>
<td>Преобразует целое число в восьмибитный символ, который
оно представляет.</td>
</tr>
<tr>
<td><strong>s</strong></td>
<td>Не преобразует, но просто вставляет строку</td>
</tr>
<tr>
<td><strong>f</strong></td>
<td>Преобразует число с плавающей точкой в десятичное со
знаком в форме <em>xx.yyy</em>, где число символов после
запятой определяется точностью.</td>
</tr>
<tr>
<td><strong>e</strong> or <strong>E</strong></td>
<td>Преобразует число с плавающей точкой в число в
экспоненциальной форме <em>x.yyy<strong>e</strong>╠zz</em>, где число
символов после запятой определяется точностью (по
умолчанию <em>6</em>). Для <strong>E</strong> в записи числа
используется <strong>E</strong> вместо <strong>e</strong>.</td>
</tr>
<tr>
<td><strong>g</strong> or <strong>G</strong></td>
<td>Если порядок числа меньше -4 или больше, чем точность,
или равен точности, преобразует число с плавающей точкой
как <strong>%e</strong> или <strong>%E</strong>. В противном случае
преобразует как <strong>%f</strong>.
</td>
</tr>
<tr>
<td><strong>%</strong></td>
<td>Просто подставляет символ <strong>%.</strong></td>
</tr>
</tbody>
</table>
<p>Для числовых преобразований аргумент должен быть целым числом
или десятичным с плавающей точкой. Аргумент преобразуется в
двоичное число, а затем преобразуется обратно в строку в
соответствии с указанным типом преобразования.</p>
<h2><a name="format ОТЛИЧИЯ ОТ ANSI SPRINTF"></a>ОТЛИЧИЯ ОТ
ANSI SPRINTF</h2>
<p> Поведение команды <strong>format</strong> отличается от процедуры
<strong>sprintf</strong> в следующих моментах: <p>
<ol>
<li> <strong>%p</strong> и <strong>%n</strong> типы не поддерживаются.</li>
<li>Для <strong>%c</strong> аргумент должен быть десятичным числом.</li>
</ol>
<p>При преобразованиях длины значение <strong>l</strong> игнорируется.</p>
</body>
</html>