Описание функции


StringFormat

Возвращает форматированную строку (имитация функции sprintf() из языка C).

StringFormat('template',$var_s1[, ...$var_s32])

Параметры

template Шаблон, содержащий управляющие последовательности (смотрите Примечания).
var1...var32 До 32 переменных, которые будут выводиться в форматированной строке - 'template'.

Возвращаемое значение

Возвращает форматированную строку, заданную шаблоном 'template'.

Примечания

Для предотвращения переполнения буфера, каждая "переменная" ($var_s1...$var_s32) ограничена 65535 символами.
Шаблон (template) может содержать специальные символы: \n (@LF), \r (@CR), \t (@TAB). Поэтому, если необходимо использовать символ "\", то его следует записывать, как \\. То же самое и для "%" - %%.

Формат управляющей последовательности:
%[флаги][ширина][.точность]тип
Обязательными составными частями являются символ начала управляющей последовательности (%) и тип.
Несоответствие количества управляющих последовательностей и количества переменных не приводит к ошибке.

Примеры управляющей последовательности:

%010.2f
%08.12s
%10s
%.2f
%02d
%X


        Спецификатор типа

ТипТип переменнойВыходной формат
d, iЦелоеДесятичное целое число.
oЦелоеВосьмеричное целое число без знака.
uЦелоеДесятичное целое число без знака.
xЦелоеШестнадцатеричное целое число без знака. Символы 'abcdef' в нижнем регистре.
XЦелоеАналогично предыдущему x, но 'ABCDEF' в верхнем регистре.
eС плавающей точкойЭкспоненциальный вид [ - ]d.dddd e [знак]ddd, где d единственная десятичная цифра, dddd одна и более десятичных цифр, ddd точно три десятичных цифры и знак + или -.
EС плавающей точкойАналогично e, отличие лишь в регистре показателя (E вместо e).
fС плавающей точкойВыходная запись имеет вид [ - ]dddd.dddd, где dddd одна и более десятичных цифр. Количество цифр перед десятичной точкой зависит от величины числа, и количество цифр после десятичной точки зависит от спецификатора точности.
gС плавающей точкойВыходная запись в формате f или e, в зависимости от того, в каком виде запись является более компактной для заданного значения и точности. Формат e задействуется только когда экспонента меньше -004 или при положительной экспоненте, если экспонента равна спецификатору точности или более. Завершающие нули отбрасываются, а точка появляется, если за ней будут следовать цифры.
GС плавающей точкойАналогично g, отличие лишь в регистре показателя (E вместо e, если он выводится).
sСтрокаСтрока.

        Спецификатор флагов

ФлагЗначениеПо умолчанию
-Устанавливает левое выравнивание результата в пределах ширины области.Правое выравнивание.
+Устанавливает префикс выходного значения, знак "+" или "-", если используется знаковый тип.Знак появляется только для отрицательных величин (-).
0Если спецификатор ширины с префиксом 0, то нули добавляются до заполнения минимальной ширины. Если появляются 0 и "-", то 0 игнорируется. Если 0 используется с типом целого числа (i, u, x, X, o, d) то 0 игнорируется.Отсутствует заполнение.
ПробелПрефикс выходного значения с пробелом, если выходное значение знаковое и положительно; Пробел игнорируется если используются оба флага "Пробел" и "+".Отсутствует.
#При использовании типов o, x, X приписывает префикс любому ненулевому выходному значению соответственно 0, 0x, 0X.Отсутствует.
#При использовании типов e, E, f принуждает выходное значение содержать десятичную точку во всех случаях.Десятичная точка появляется, только если цифры следуют за ней.
#При использовании типов g, G, принуждает выходное значение содержать десятичную точку во всех случаях и предотвращает усечение конечных нулей.
Игнорируется при использовании с типами d, i, u, или s.
Десятичная точка появляется, только если цифры следуют за ней. Конечные нули исключены.

        Спецификатор ширины

Вторым необязательным элементом управляющей последовательности является спецификатор ширины. Ширина - неотрицательное десятичное целое число, указывает минимальную ширину поля (число выводимых символов), включая знак для чисел. Если количество символов меньше указанной, то добавляются пробелы слева или справа, в зависимости от указанного флага выравнивания. Если указанный параметр ширины начинается с 0, то нули добавляются до указанной ширины. Такое поведение не рекомендуется для левого выравнивания в числах.

Спецификатор ширины не обрезает выводимое значение. Если количество выводимых символов больше указанной ширины или ширина не задана, то выводятся все символы.

        Спецификатор точности

Третьим необязательным элементом управляющей последовательности является спецификатор точности. Это целое число, с предшествующей точкой (.), которое определяет количество символов вывода, количество десятичных порядков, или количество значимых цифр (см. таблицу ниже). В отличие от спецификатора ширины, спецификатор точности может привести либо к усечению выходной величины, либо к округлению числа с плавающей запятой. Если точность определена как 0 и значение для преобразования равно 0, то результат вывода не имеет символов, как показано ниже:

StringFormat('%.0d',0) ; /* Никакие символы не будут возвращены */

    Как на точность влияет тип

ТипЗначениеПо умолчанию
d, i, u, o, x, XТочность задает минимальное количество цифр для вывода. Если количество цифр в аргументе меньше, чем точность, выходное значение дополняется нулями слева. Значение не сокращается, когда количество цифр превышает точность.По умолчанию точность - 1.
e, EТочность определяет количество цифр для вывода после десятичной точки. Последняя цифра вывода округляется.По умолчанию точность - 6; если точность 0 или точка (.) появляется без числа, следующего за ним, десятичная точка не выводится.
fТочность величины определяет количество цифр после запятой. Десятичная точка появляется, только если цифры следуют за ней. Значение округляется до соответствующего количества цифрПо умолчанию точность - 6; если точность 0 или точка (.) появляется без числа, следующего за ним, десятичная точка не выводится.
g, GТочность определяется максимальным количеством значащих цифр вывода.Шесть значащих цифр выводятся, любые конечные нули усечены.
sТочность определяется максимальным количеством символов для вывода. Символы сверх точности не выводятся.Символы выводятся до первого нулевого символа.

Функцию можно подключить через команду exect
Для передачи пустой строки можно воспользоваться ключевым словом Null
Для передачи значения по умолчанию можно воспользоваться ключевым словом Default

Примеры:
 Как создать кнопку?


exect=$var_i=5||$var_s=StringFormat('%%08s',$var_i)||_ViewValues('$var_s') ;; пример добавление ведущих нулей к цифре 5

exect=$var_i=5||$var_s=StringFormat('%%.3f',$var_i)||_ViewValues($var_s) ;; пример добавление конечных нулей к цифре 5

exect=StringFormat('%%x<===>%%X',1233567,1233567) GLOBALEXECT<a> ;; возвращает шестнадцатеричное значение числа %x-нижний %X-верхний регистр

exect=StringFormat('{%%16.5f}',10.00) GLOBALEXECT<a> ;; преобразование числа с добавлением в начало пробелов

exect=StringFormat('%%04d.%%02d.%%02d~~%%02d:%%02d:%%02d',@YEAR,@MON,@MDAY,@HOUR,@MIN,@SEC) GLOBALEXECT<a> ;; получение преобразованной даты

exect=StringFormat('[%%s]~~{%%s}','line1','line2') GLOBALEXECT<a> ;; обрамляет строку скобками

exect=StringFormat('%%d',0xFF00FF) GLOBALEXECT<a> ;; возвращает десятичное число

exect=StringFormat('%%o',64) GLOBALEXECT<a> ;; возвращает восьмеричное число

exect=StringFormat('%%o~~%%09d~~%%d',64,Null,0x100) GLOBALEXECT<a> ;; возвращает строку заданную форматированием

exect=SplashTextOn('Заголовок','Дата:~~'&StringFormat('%%04d.%%02d.%%02d~~%%02d:%%02d:%%02d',@YEAR,@MON,@MDAY,@HOUR,@MIN,@SEC),300,200,-1,5,0,Null,38,700)+Sleep(3000)+SplashOff() ;; пример окна с датой

sendsslist=$GLOBALSENDS[1]&20||?V|>>|Assign('var_n',StringFormat('%.1f',:NUMBER:/10),2)||§!!$var_n GLOBALSLIST<a> ;; получить счётчик вида 0.1, 0.2, ..., 1.0, 1.1

sendsslist=$GLOBALSENDS[1]&20||?V|==|!!'&StringFormat('%.1f',:NUMBER:/10) GLOBALSLIST<a> ;; получить счётчик вида 0.1, 0.2, ..., 1.0, 1.1

sendsslist=$GLOBALSENDS[1]&20||?V|==|!!'&StringFormat('%.3f',:NUMBER:/10) GLOBALSLIST<a> ;; получить счётчик вида 0.100, 0.200, ..., 1.000, 1.100

exect=$var_s=StringFormat('%%02X%%02X%%02X',23,14,10)||_ViewValues('$var_s') ;; конвертировать числа в Hex

exect=$var_s=StringReplace(StringFormat('%%100s',''''),'~~','abcde')||_ViewValues('$var_s') ;; размножить строку 100 раз


© Аверин Андрей для Total Commander Image  Averin-And@yandex.ru