Форматы.
В Perl реализован удобный метод
создания форматированных отчетов. С
помощью оператора format вы описываете
заголовки, размеры полей, указываете
положение данных на листе в удобной
текстовой форме. Затем выполняете команду
write(файл), которая выводит
отформатированные данные в указанный файл.
Оператор format имеет следующий синтаксис:
format имя =
FORMLIST
.
Обратите внимание на то, что
описание формата идет после строки format и
заканчивается символом '.' в начале строки.
Здесь 'имя' - это имя формата,
такое же как и имя указателя выходного
файла. Если 'имя' отсутствует то значение по
умолчанию - STDOUT.
FORMLIST - это строки формата. Они бывают трех
типов:
- Комментарий. Строка начинается символом
'#'.
- Описатель полей данных
(picture).
- Строка аргументов используемых
описателем.
Описатель - это строка, которая
выводится в виде "как есть" за
исключением специально обозначенных
форматов полей данных. Каждое поле
начинается либо символом '@', либо '^'. В
описательной строке указывается только
положение и вид выводимых данных, но не
имена полей и переменных. Для этого
предназначена следующая строка аргументов
которая следует всегда после описателя и
содержит имена переменных или целые
выражения в порядке указанном описателем.
Размер и вид поля в описателе
обозначается следующими символами:
| "<<<<"
| - выравнить значение по правому краю.
|
| ">>>>"
| - -//- по левому.
|
| "||||"
| - -//- по центру.
|
| "####.###"
| - формат числа с точкой.
|
| "@*"
| - многострочная строка. Данные
выводятся в колонку.
|
Размер поля равен количеству указанных
символов.
Символ '^' в начале поля имеет специальное
значение.
Так:
- "^####" - пусто если переменная не
определена.
для строчного скаляра:
- "^<<<<<" - Выводится сколько
возможно символов, а значение переменной
меняется на остаток, вывод которого можно
продолжить на следующих строках, которые
могут иметь свои поля.
Пример:
#!/usr/local/bin/perl
#
# Программа печати пригласительного билета
#
$кому = "Чапаеву Василию Ивановичу";
$от_кого = "Компания МММ";
$адрес = "Москва, ул. Петровка, д 38";
$текст = "Уважаемый Василий Иванович!
Компания МММ имеет честь пригласить
Вас и Ваших близких на презентацию наших
новых хромовых сапог, сделанных
на уровне мировых стандартов качества и
дизайна.";
format STDOUT =
П Р И Г Л А С И Т Е Л Ь Н Ы Й Б И
Л Е Т
----------------------------------------------------------------------
Кому:
@<<<<<<<<<<<<<<<<<<<<<<<<<<
| ^|||||||||||||||||||||||||||||||
$кому, $текст
| ^|||||||||||||||||||||||||||||||
$текст
От кого:
@<<<<<<<<<<<<<<<<<<<<<<<
| ^|||||||||||||||||||||||||||||||
$от_кого, $текст
| ^|||||||||||||||||||||||||||||||
$текст
Адрес:@<<<<<<<<<<<<<<<<<<<<<<<<<<
| ^|||||||||||||||||||||||||||||||
$адрес, $текст
| ^|||||||||||||||||||||||||||||||
$текст
| ^|||||||||||||||||||||||||||||||
$текст
| ^|||||||||||||||||||||||||||||||
$текст
----------------------------------------------------------------------
Отпечатано в типографии ИТУ 38
.
write(); # Вывод данных.
exit 0; # Конец программы
Результат:
П Р И Г Л А С И Т Е Л Ь Н Ы Й
Б И Л Е Т
----------------------------------------------------------------------
Кому: Чапаеву Василию Ивановичу
| Уважаемый Василий Иванович!
| Компания МММ имеет честь
От кого: Компания МММ
| пригласить Вас и Ваших близких
| на презентацию наших новых
Адрес:Москва, ул. Петровка, д 38
| хромовых сапог, сделанных на
| уровне мировых стандартов
| качества и дизайна.
|
----------------------------------------------------------------------
Отпечатано в типографии ИТУ 38
Специальные переменные:
- $~
- построчный формат содержимого.
- $^
- формат заголовка листа.
- $%
- номер листа.
- $=
- строк в листе.
Если вы хотите использовать одни и те же
форматы для разных файлов, то самый простой
путь:
use FileHandle;
# Указать в начале программы
format_name файл имя_формата; #
Формат содержимого листа.
format_top_name файл имя_формата; # Формат
заголовка листа.
write(файл);
# вывод данных.
Здесь 'файл' имеется ввиду указатель файла
полученный командой open();
Если вам нужно в теле листа
выводить разного рода форматы (например
заголовки групп или отбивку листа), то
применяйте format_name.
|