СТРОКИ ФОРМАТИРОВАНИЯ
При форматировании строк с помощью функций Format, FormatBuf, StrFmt, StrLFmt, процедуры FmtStr, в качестве одного из параметров, в данных подпрограммах используется строка форматирования. Строка форматирования может содержать в себе два типа объектов - обычные символы и спецификаторы (команды форматирования). Обычные символы копируются один к одному в результирующую строку. Спецификаторы применяются для выборочного форматирования элементов из списка аргументов.
Общий вид спецификатора можно представить в следующем виде:
"%" [index ":"] ["-"] [width] ["." prec] type
Спецификатор начинается с символа %. За ним следуют:
Необязательный параметр [index ":"], задающий индекс аргумента.
Индикатор выравнивания по левому краю ["-"] (необязательный параметр).
Необязательный параметр [width], задающий минимальную длину результирующей строки.
Необязательный параметр ["." prec], задающий точность.
Символ преобразования типа, type.
Идентификатор type может иметь одно из значений представленных в таблице:
d |
Десятичный формат. Аргумент должен иметь целочисленное значение, которое будет преобразовано в строку символов десятичных цифр. Если строка форматирования содержит спецификатор точности prec, то результирующая строка должна содержать, как минимум, указанное в спецификаторе количество цифр. Если аргумент содержит меньшее количество цифр, то в результирующую строку перед значением числа будут добавлены нули. |
u |
Десятичный беззнаковый формат. Форматируется аналогично параметру d, но знак числа не выводится. |
e |
Научный формат. Аргумент должен представлять собой число с плавающей запятой. Значение будет преобразовано в строку формата "-d.ddd...E+ddd". Результирующая строка начинается со знака минус, если значение аргумента отрицательно. Десятичной точке всегда предшествует одна цифра. Общее количество цифр, включая стоящую перед десятичной точкой, задается спецификатором точности. Если спецификатор точности отсутствует, то используется значение по умолчанию - 15 цифр. После символа экспоненты всегда стоит знак плюс или минус и как минимум трехразрядное число. |
f |
Фиксированный формат. Аргумент должен быть числом с фиксированной десятичной точкой. Значение аргумента будет преобразовано в строку формата "-ddd.ddd...". Результирующая строка начинается со знака минус, если аргумент отрицателен. Количество десятичных знаков после разделителя определяется спецификатором точности prec. Если спецификатор точности отсутствует, то после десятичной точки выводятся заданные по умолчанию 2 десятичных знака. |
g |
Общий формат. Аргумент должен быть числом с плавающей запятой. Значение аргумента преобразовывается в наиболее возможно короткую строку, используя фиксированный или научный формат. Количество значащих цифр в результирующей строке задается спецификатором точности prec. При отсутствии данного параметра выводится по умолчанию 15 знаков. Нули в конце строки не выводятся, Десятичный разделитель ставится только в случае необходимости. Фиксированный формат используется, если количество значащих цифр до десятичной точки меньше или равно значению указанному в спецификаторе точности, и если значение аргумента больше или равно 0.00001. В других случаях в результирующей строке используется научный формат. |
n |
Числовой формат. Аргумент должен быть числом с плавающей запятой. Результирующая строка имеет вид "-d,ddd,ddd.ddd...". Данный формат аналогичен фиксированному формату. Отличие состоит в том, что результирующая строка включает в себя разделители тысяч. |
m |
Денежный формат. Аргумент должен быть числом с плавающей запятой. Значение аргумента преобразовывается в строку, содержащую символ, денежной единицы. Преобразование производится в соответствии со значениями глобальных переменных CurrencyString, CurrencyFormat, CurrencyDecimals, NegCurrFormat, ThousandSeparator, DecimalSeparator. Если строка формата содержит спецификатор точности prec, то значение глобальной переменной CurrencyDecimals игнорируется.
|
p |
Указатель. Аргумент должен быть указателем (тип Pointer). Значение аргумента преобразовывается в строку из 8-ми символов формата ХХХХYYYY, где ХХХХ - адрес сегмента, а YYYY - смещение в шестнадцатеричной форме.
|
s |
Строковый формат. Аргумент должен представлять собою символ, строку типа string или PChar. Значение аргумента вставляется на место спецификатора. Длина результирующей строки задается спецификатором точности prec. Если длина исходной строки превышает значение спецификатора точности, то она усекается.
|
x |
Шестнадцатеричный формат. Аргумент должен иметь целочисленное значение. Значение аргумента преобразовывается в строку шестнадцатеричных чисел. Спецификатором точности prec, задает минимальное количество символов результирующей строки. Если исходное значение содержит меньшее количество цифр, то в начало результирующей строки будут проставлены недостающие нули. |
Все вышеуказанные символы могут быть записаны как в верхнем, так и в нижнем регистре.
Параметры index, width, prec могут быть заданы непосредственно числовым значением (например "%8u") или косвенно с помощью символа звездочки (например "%*.*f"). Звездочка означает, что в данной позиции будет использоваться текущее значение из массива данных (соответствующее значение должно представлять собой целочисленное значение), например вызов функции:
Format( '%*.*f', [ 9, 2, 12345.6789 ] );
аналогичен
Format( '%9.2f', [ 12345.6789 ] );
Результирующей строкой в обоих случаях будет '12345.68'
Параметр width задает минимальную длину результирующей строки. Если количество символов в получаемой строке меньше значения width, то строка дополняется необходимым количеством пробелов. По умолчанию пробелы добавляются в начало строки. Для того, чтобы пробелы добавлялись в конец строки необходимо в строку формата перед параметром width поставить символ "-".
Параметр index определяет, какой элемент массива данных будет подвергаться форматированию. Первый элемент массива имеет индекс 0. После числового значения индекса должен стоять символ двоеточия ":". Если параметр index опускается, то форматируется элемент следующий за элементом который подвергался форматированию в прошлый раз (Первое форматирование соответственно производится для первого элемента массива данных). Например, вызов функции:
Format( '%3d, %d, %0:d, %2:-4d, %d', [ 1, 2, 3, 4 ] );
будет возвращать следующую строку ' 1,2,1,3 ,4'
|