Опубликован: 17.08.2006 | Доступ: свободный | Студентов: 5372 / 697 | Оценка: 4.49 / 3.94 | Длительность: 20:58:00
ISBN: 978-5-9556-0078-9
Лекция 10:

Отчеты

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >

Специальные переменные форматов

Кроме переменных, в которых хранятся имена формата ($~) и заголовка страницы формата ($^), есть еще несколько специальных переменных для хранения информации о форматах. Номер текущей страницы выводимого отчета содержится в переменной $% ($FORMAT_PAGE_NUMBER), и ее часто включают в формат отчета. В переменной $= ($FORMAT_LINES_PER_PAGE) хранится число строк на странице: по умолчанию - 60, но его можно изменить на нужное значение перед выводом отчета. В переменной $- ($FORMAT_LINES_LEFT) содержится число оставшихся на странице строк. Переменная $^L ($FORMAT_FORMFEED) хранит символ перевода страницы (formfeed character), который используется в отчетах для прогона принтера до новой страницы.

Специальная переменная $: ($FORMAT_LINE_BREAK_SEPARATOR) содержит набор символов разрыва строки, после которых строка может быть разделена при заполнении в формате специальных полей продолжения. Специальная переменная $^A ($ACCUMULATOR) является аккумулятором выводимых данных для функций formline() и write(), в котором накапливаются данные отчета перед их отправкой в выходной поток. При считывании данных для отчета из файла может пригодиться переменная $. ($INPUT_LINE_NUMBER), в которой хранится номер прочитанной из входного файла строки, что можно использовать для нумерации строк в отчете.

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

perldoc perlform

В завершение лекции приведем пример законченной программы (с образцом исходных данных), выводящей отчет о книгах по языку Perl.

open my $report, '>', '/report.txt' or die;
$old_handle = select $out; # выбрать поток для отчета
select $report;
$^ = 'HEAD';
$~ = 'REPORT';
# описание форматов для отчета
while(<DATA>) { # чтение одной записи данных
   ($authors, $title, $year, $nick) = split ':';
   write $report; # вывод одной строки отчета
}
close $report or die;
# формат для заголовка страницы
format HEAD =
           Классические книги по языку Perl 
               издательства O'Reilly
                                               Лист @#
                                                    $%
---------------+--------------------+----+------------
 Авторы        | Заглавие           |Год | Прозвище
---------------+--------------------+----+------------
.
format REPORT =
^<<<<<<<<<<<<<<|^<<<<<<<<<<<<<<<<<<<|@###|@>>>>>>>>>>>
$authors, $title, $year, $nick
^<<<<<<<<<<<<<<|^<<<<<<<<<<<<<<<<<<<|    |  ~~                        
$authors, $title                            
---------------+--------------------+----+------------
.
__DATA__
Cozens S.:Advanced Perl Programming,2nd ed.:2005:Panther Book
Friedl J.E.F.:Mastering Regular Expressions:1997:Owls Book
...

Результатом работы этой программы будет такой отчет, размещенный в файле report.txt:

Классические книги по языку Perl
               издательства O'Reilly
                                               Лист  1
---------------+--------------------+----+------------
 Авторы        | Заглавие           |Год | Прозвище
---------------+--------------------+----+------------
Cozens S.      |Advanced Perl       |2005|Panther Book
               |Programming,2nd ed. |    |
---------------+--------------------+----+------------
Friedl J.E.F.  |Mastering Regular   |1997|   Owls Book
               |Expressions         |    |
---------------+--------------------+----+------------
Schwartz R.L., |Learning Perl, 4th  |2005|  Llama Book
Phoenix T.,    |ed.                 |    |
brian d foy    |                    |    |
---------------+--------------------+----+------------

Конечно, изученные в этой лекции средства отчетов не могут сравниться с современными специализированными построителями отчетов, но во многих случаях бывает достаточно форматирования выходных данных в виде простых отчетов, которое в Perl делается достаточно легко, просто и наглядно. Эта лекция была "лирическим отступлением" перед тем как начать углубленное изучение техники программирования на языке Perl.

< Лекция 9 || Лекция 10: 12345 || Лекция 11 >
Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам