Шаг 50.
Объявление и использование формата (окончание)

    На этом шаге мы закончим рассмотрение вопросов, связанных с объявлением и использованием формата.

    Прежде всего познакомимся с еще одним символом форматирования - символом "*", который позволяет выводить длинные строковые данные в нескольких строках, длина которых равна максимальной ширине вывода устройства отображения (экрана монитора или принтера). Например, если переменная $record содержит строковые данные длиной более 80 символов и вывод осуществляется на экран монитора, то следующая программа:

#! perl -w

$record = "В.Долженков Ю.Колесников:Excel 2000:BHV:1999:90:Книга является... .";
write;

format STDOUT =
@*
$record
.
отобразит на экране ее содержимое следующим образом:


Рис.1. Результат работы приложения

Текст этого примера можно взять здесь.

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

    Итак, мы теперь знаем, что переход на новую страницу происходит автоматически, но нам хотелось бы, чтобы на каждой странице печатался верхний колонтитул, в котором отображалось бы наименование отчета и печатались номера страниц. И это возможно в Perl. Следует только задать формат со специальным именем, добавив к имени формата, по которому мы выводим информацию (в нашей программе STDOUT), суффикс _TOP. Этот формат будет выводиться каждый раз, как начинается печать новой страницы.

    Изменим программу из предыдущего шага, добавив в нее следующее объявление формата:

format STDOUT_TOP =
                      Книги на  складе                        @>>>>>>
                                                            "стр. ".$%
  Автор                        Название     Издатель    Год      Цена
 ========================================================================
.

и явно зададим количество строк на странице, добавив перед циклом while оператор:

 $= =  6;

    Таким образом, программа примет следующий вид:

#! perl -w
open BOOKS, "< books"; # Открытие файла на чтение.
$= = 6;
while (<BOOKS>) 
{
  # Разбиение строки по символу ' : '.
  ($author, $title, $pub, $year, $price) = split (':'); 
  write; # Форматный вывод строки.
}
format  STDOUT  =
@<<<<<<<<<<<<<<<<<<<<<<<<< | ^>>>>>>>>>>> | @||||||| | @#### | @###.##р.
$author,   $title,   $pub,   $year,   $price
                           | ^>>>>>>>>>>> |          |       |~~          
$title
.
format STDOUT_TOP =
                      Книги на  складе                        @>>>>>>
                                                            "стр. ".$%
  Автор                        Название     Издатель    Год      Цена
 ========================================================================
.
Текст этого примера можно взять здесь.

    Результат работы приложения изображен на рисунке 2:


Рис.2. Результат работы приложения

    Теперь наша программа напечатает три страницы отчета, причем на каждой из них будет напечатан колонтитул.

    Вернемся к объявлению формата для колонтитула. Во-первых, при его задании мы использовали выражение "стр. ".$% в строке переменных. Действительно, хотя формат и не вычисляется, но во время выполнения программы вычисляются значения переменных и все выражения строки переменных формата. Во-вторых, мы использовали специальную переменную $%, которая хранит текущий номер выводимой страницы. Это позволило нам в колонтитуле напечатать номера страниц.

    На следующем шаге мы рассмотрим использование нескольких форматов.




Предыдущий шаг Содержание Следующий шаг