275 lines
10 KiB
HTML
275 lines
10 KiB
HTML
<!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>
|