Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > [Tcl] Команда format


Автор: МУХ 31.10.2009, 17:52
В документации к этой команде есть следующие строки:

Цитата

Если за символом "%" следуют целое число и знак "$", как например в "%2$d", то величина для преобразования берется не из следующего аргумента, а из аргумента, занимающего соответствующую позицию в списке ("1" соответствует первому аргументу arg). Если спецификатор преобразования требует нескольких аргументов (когда он содержит символ "*"), то используются последовательные аргументы, начиная с указанного. Если один из спецификаторов содержит указание позиции аргумента, то и все остальные спецификаторы должны его содержать.


http://www.opennet.ru/docs/RUS/tcltk/tcl.html#format

Так вот собственно более никаких пояснений и примеров насчет этих "нескольких аргументов (когда он содержит символ "*")" нигде нет :( Вопрос - как заюзать эти множественные параметры? И что это вообще такое?

Кроме того тот же символ * используется и в других целях:

Цитата

Если минимальная ширина поля указана как "*", а не как число, то в качестве числового значения используется значение следующего аргумента в команде.

(там же)

Буду очень благодарен за прояснение этого момента.

Собственно строка формата (за некоторыми исключениями) одинакова для множества языков. Функции только называются по разному. В Си это sprintf, например. Но для нее я тоже объяснения этого момента не нашел.

Автор: al77ex 20.12.2009, 22:47
Как я понимаю параметр звездочка имеет уникальное значение в команде format получается вместо звездочки имеется возможность подставить значение какой-либо переменной. Вот небольшой пример который должен прояснить ситуацию. В этом примере переменной mx изменяется ширина поля вывода.

1% set mx 8
8
2% format "%-*s = %s" $mx key val
key      = val
3% set mx 18
18
4% format "%-*s = %s" $mx key val
key                = val
5% 

Еще могу порекомендовать недавно появившийся ресурс http://etcl.ru/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)