Иллюстрированный самоучитель по Perl

Форматы

Таблица 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 в промежуточном буфере аккумулирует слова из выводимых данных, формируя строку, длина которой не превышает ширину поля. После этого сформированные данные выводятся в строке, а значение переменной вывода модифицируется: она будет содержать оставшиеся слова.

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.