Синтаксис printf
Команда printf имеет почти такой же синтаксис, что и display но требует явного описания структуры форматирования вывода. Синтаксис printf в точности совпадает с синтаксисом print, за исключением того, что первый элемент печати представляет собой строку символов, которая предоставляет инструкции по форматированию для остальных элементов:
printf "Total revenue is $%6.2f.\n", sum {p in PROD, t in 1..T} revenue[p,t]*Sell[p,t]; Total revenue is $787810.00.
Формат строки вывода
Строка формата печати содержит два типа объектов: обычные символы, которые копируются в выходные данные, и спецификации преобразований, которые определяют внешний вид элементов печати. Каждая спецификация преобразования начинается с символа % и заканчивается символом преобразования f. Например, %6.2f указывает преобразование в десятичное представление шириной не менее шести символов с двумя цифрами после десятичной точки. Полные правила почти такие же, как для функции printf в языке программирования C.
Вывод из printf автоматически не разбивается на строки. Разрыв строки должен быть явно указан комбинацией \n , представляющей собой символ «новой строки», в формате строки. Чтобы создать серию строк, необходимо использовать индексированную версию printf:
printf {t in 1..T}: "%3i%12.2f%12.2f\n", t, sum {p in PROD} revenue[p,t]*Sell[p,t], sum {p in PROD} prodcost[p]*Make[p,t]; 1 159210.00 75377.00 2 243500.00 75400.00 3 167300.00 52500.00 4 217800.00 66200.00
printf выполняется один раз для каждого элемента набора индексации, предшествующего двоеточию. Для каждого t in 1..T объявленный формат применяется снова и снова, а символ \n генерирует разрыв строки. Команда printf в основном полезна в сочетании с перенаправлением вывода в файл для печати кратких сводных отчетов в удобочитаемом формате. Поскольку количество спецификаций преобразования в строке формата должно соответствовать количеству печатаемых значений, printf не может удобно создавать таблицы, в которых количество элементов в строке может изменяться от запуска к запуску.
Printf set d{S}
Команда printf работает с отдельными значениями. Чтобы отобразить элементы индексированного набора [1], нужно написать:
printf {i in d[1]} "%1d ", i; printf "\n";