Поиск

Улучшение качества печати

Выходные данные, которые мы до сих пор выводили на печать с помощью функции print, имели незатейливый вид. Дело в том, что функция print предназначена для выполнения отладочной печати, поэтому в ней не предусмотрено практически никаких средств форматирования. Для получения качественных распечаток следует воспользоваться другой функцией Perl — printf. В ней предусмотрен широкий набор средств управления внешним видом выводимых данных, таких как выравнивание по левому и правому краю поля, изменение количества знаков после десятичной точки, получение полей фиксированной ширины и др. Функция printf была почти полностью заимствована из языка программирования С, однако стоит отметить, что в других языках программирования имеется аналогичная по своим функциональным возможностям функция (например, print using в BASIC). Синтаксис функции printf выглядит следующим образом:

Параметр ша6лон_форматирования предназначен для описания формата выводимых данных в сокращенном виде. Вместо списка следует указать значения, выводимые функцией printf на печать (так же, как и в операторе print). По умолчанию вывод осуществляется в стандартный выходной поток (дескриптор STDOUT), однако, как и в случае функции print, можно указать дескриптор файла, в который следует поместить данные. Обратите внимание, что между дескриптором файла и шаблоном форматирования не должно быть запятой.

Шаблон форматирования обычно задается в виде литерала (реже в виде скалярной переменной) и определяет внешний вид выводимых данных. Любые символы, указанные в шаблоне, кроме тех, что начинаются с %, помещаются в неизменном виде в выходной поток. Символ процента обозначает начало спецификатора поля, который задается в виде %-w.dx (рис. 9.1). Параметр (/задает ширину поля в символах; параметр d определяет количество цифр после десятичной точки (для числовых данных) или общую допустимую ширину поля для строк; параметр х обозначает тип выводимых данных. Дефис перед параметром w означает, что данные в поле шириной w символов выравниваются по его левому краю. По умолчанию данные будут выровнены по правому краю поля. Обязательными в спецификаторе поля являются только символ процента и поле х. Список некоторых часто используемых спецификаторов типа поля указан в табл. 9.1.

Полный список спецификаторов типа поля можно найти в электронном справочном руководстве по Perl. Для этого введите команду perldoc -f printf.

Ниже приведено несколько примеров использования функции printf.

При выполнении форматирования каждый спецификатор поля заменяется соответствующим элементом из списка, как показано на рис. 9.2. При этом для каждого элемента в списке должен быть предусмотрен свой спецификатор поля и, наоборот, каждому спецификатору поля должен соответствовать элемент в списке.

Чтобы вывести перед числом незначащие нули, нужно поместить символ 0 в спецификатор формата, как показано ниже:

Кроме функции printf, существует близкая по смыслу функция sprintf. Разница между ними состоит в том, что функция sprintf не выводит данные в выходной поток, а вместо этого просто их возвращает в вызвавшую ее программу. В результате форматированную строку данных можно присвоить скалярной переменной или использовать в любом другом выражении, как показано ниже на примере:

При выполнении форматирования не забывайте, что функции printf и sprintf, в параметрах которых указан спецификатор поля %f, автоматически округляют результат так, чтобы он поместился в отведенное ему поле.