Форматы
Таблица 8.1. Символы форматирования.
Символ | Описание |
---|---|
> | Определяет символьное поле, в котором выводимое значение выровнено по правому краю |
< | Определяет символьное поле, в котором выводимое значение выровнено по левому краю |
# | Определяет числовое поле (выводимое значение должно быть числом) |
. | Определяет положение десятичной точки в числовом поле (###.##) |
I | Определяет символьное поле, в котором выводимое значение выровнено центру |
Небольшой пример прольет свет на все вышесказанное – лучше один раз увидеть, чем сто раз услышать. Предположим, что у нас имеется файл (назовем его books), содержащий информацию о книгах, продаваемых неким книжным магазином. Каждая строка этого файла содержит информацию об одной книге: автор(ы), название, издательство, год выпуска и стоимость. Все поля записи разделены символом двоеточие ":". Одна из строк этого файла может выглядеть так:
В.Долженков Ю.Колесников:Excel 2000:BHV:1999:90
Нам необходимо распечатать отчет о всех продаваемых книгах. Воспользуемся форматами Perl. Программа примера 8.1 реализует поставленную задачу.
#! peri – w. " open BOOKS, "<books"; # Открытие файла на чтение while (<BOOKS>) { {$author, $title, $pub, $year, $price) = split(':'); t Разбиение строки по символу ':' write; # Форматный вывод строки } '….. format STDOUT = @<"""""""""""" | е"""">" i @i 111111 | @#### | @###.##р. $author, $title, $pub, $year, $price
Результат отображения отчета на экране монитора выглядит следующим образом:
В.Долженков Ю.Колесников |, Excel 2000 | BHV | 1999 | 90.00р. А.Матросов А.Сергеев М.Чау | HTML 4.0 I BHV | 1999 | 70.00р. Т.Кристиансен Н.Торкингтон | Perl | Питер | 2000 | 100.00р.
Обратите внимание, что все символы строки шаблонов печатаются именно в тех позициях, в которых они заданы, а в поля этой же строки, определенные символом "@", подставлены значения соответствующих переменных. Эти значения отображаются в соответствии с заданными символами форматирования: для переменной $authqr вывод выровнен по левому краю (<), для $ title по правому краю (>), для $pub пр центру (|) соответствующего поля. Значения переменных $уеаг и $price форматируются в соответствии с числовым форматом. Если бы эти переменные не содержали числовые значения, то интерпретатор perl вывел бы предупреждающее сообщение.
Замечание
Символ начала поля в строке шаблонов ("@" или "^") учитывается при подсчете ширины поля вывода.
Еще один нюанс, связанный с форматированием значений переменных. Если она содержит строковые данные, количество символов которых превосходит заданную ширину поля вывода, то лишние символы отсекаются справа. Именно это и произошло при выводе второй записи файла books: фамилия третьего автора напечатана не полностью.
Как поступать в таких случаях? Можно увеличить ширину поля, если позволяют параметры выводного устройства, а можно воспользоваться еще одним символом форматирования, который как раз и предназначен для решения подобных проблем. Прежде всего следует для задания начала поля использовать символ " ^ ". Его отличие от символа "е" заключается в том, что до начала вывода строковых данных в поле Perl в промежуточном буфере аккумулирует слова из выводимых данных, формируя строку, длина которой не превышает ширину поля. После этого сформированные данные выводятся в строке, а значение переменной вывода модифицируется: она будет содержать оставшиеся слова.
При последующем использовании этой переменной в другой строке переменных того же формата будут выводиться сохраненные в ней отсеченные данные. Это позволяет выводить длинные данные в нескольких строках в одном вертикальном блоке, если задавать для вывода оставшихся данных точно такое же поле, что и при выводе первой порции.