<!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>