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