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

Форматы

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

#! peri – w
open BOOKS, "<books"; # Открытие файла на чтение
$number = 1;
$total = 0;
while (<BOOKS>) {
($author, $title, $pub, $year, $price) = split(':'); # Разбиение строки
t по символу ':'
write; # Форматный вывод строки $total += $price; t Подсчет общей суммы
}
$~ = TOTAL; # Переключение формата
write; # Вывод по формату итоговой строки
format STDOUTJTOP =
Заказ №@#
$ number Автор Название Издатель Год Цена
format STDOUT = '
Л<"""""""""""" | @"""">" | @М!11М I @t### I @###.##р.
$author, $title, $pub, $year, $price
A """""""""<""" | | | | ~~
$author
format TOTAL =
Итого: @###.##р. $total

В этой программе после форматной печати содержимого файла books осуществляется переключение на другой формат, по которому выводится строка с общей суммой заказа, подсчитанной в переменной $totai. Полученный с помощью этой программы заказ показан ниже:

Заказ №I Автор Название Издатель Год Цена
В.Долженков Ю.Колесников I Excel 2000 I BHV | 1999 I 90.00р.
А.Матросов А.Сергеев I HTML 4.0 I BHV | 1999 | 70.00р.
М.Чаунин I I II
Т.Кристиансен Н.Торкингтон I Perl I Питер | 2000 | 100.00р.
Итого: 260.00р.

В завершение разговора о создании отчетов в Perl мы модифицируем программу примера 8.1, приспособив ее для печати отчета на основании информации о книгах из файла books, в котором в записи о книгах добавлено еще одно поле, содержащее краткую аннотацию книги:

В.Долженков Ю.Колесников:Excel 2000:BHV:1999:90:Аннотация книги

Отчет, формируемый этой программой (пример 8.3), также печатает нижний колонтитул на каждой странице. Для этого мы воспользуемся специальной переменной $ л ь, содержимое которой Perl печатает перед переходом на новую страницу во время форматного вывода. При этом следует уменьшить на количество строк, заданных в этой переменной, количество строк на странице, хранящееся в специальной переменной $=, иначе строки из переменной $ л ь попадут не в конец текущей страницы, а будут напечатаны на следующей странице, не создав никакого нижнего колонтитула.

#! peri – w
open FILE, "<books" or die $!;
open REPORT, "xreport" or die $!;
select REPORT; $~ = STDOUT; $= = 24;
Sltime = locALTime;
$-L = ("=" x 73). "\n". "Книготорговая база \"БЕСЫ\"". (" " x 24)."$ltime\n\f";
$count = 0;
while(<FILE>) {.
($author, $title, $pub, $year, $price, $annot) = split(':');
$count++;
write;
}
close(REPORT); format STDOUT_TOP =
Книги на складе @"">"
; "стр. ".$%
Автор Название Издатель Год Цена Аннотация ________
format STDOUT =
@| Л """""" /ч """""" @<""" @### @##.##р. Л """""""""
$count.".", $author, $title, $pub, $year, $price, $annot
Л """""" л """""" А """""""""
$author, $title, $annot
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.