.
Имя текущего формата для шапки страницы, связанного с текущим выходным потоком, хранится в специальной переменной $^ ($FORMAT_TOP_NAME). При выводе отчета, если очередная строка не помещается на текущей странице, в выходной поток выводится символ прогона страницы, счетчик страниц увеличивается на единицу, и в начале следующей страницы в текущий поток выводится заголовок страницы отчета.
В описании формата отчета применяется несколько видов строк. Строка шаблонов (или строка полей) описывает поля отчета для заполнения данными. За каждой строкой шаблона следует одна или несколько строк аргументов (или строк значений), содержащих список источников данных (литералов, имен переменных и выражений, разделенных запятыми) для заполнения полей. Литеральная строка содержит информацию, без изменения выводимую в отчет. После литеральной строки строка значений не указывается. Строка комментариев, начинающаяся с символа #, служит для записи в формате примечаний и не выводится в отчет. В следующем примере приводятся образцы разных типов строк в описании формата:
format STDOUT =
1. Строка шаблонов содержит поля: @<<<<< и @###.##
'поле1', $field2
# 3. Комментарий: во 2-й строке данные для вставки в 1-ю
4. Литеральная строка выводится "как есть".
.
В комментариях и литеральных строках нет ничего особенного, самое интересное содержится в строках шаблонов, содержащих описания полей отчета.
Поле отчета - это пространство указанной ширины, расположенное в определенном месте отчета, куда помещаются данные в нужном представлении. (Например, конкретное поле в отчете может быть описано таким образом - "в начале первой строки заголовка каждой страницы должна выводиться текущая дата в следующем виде: день (две цифры с ведущим нулем), месяц (две цифры с ведущим нулем) и год (четыре цифры с ведущим нулем), разделенные точками".) Поля отчета в описании формата представлены в виде так называемых поледержателей (fieldholders). Поледержатель (или переменная поля) представляет из себя шаблон, описывающий тип поля, его ширину в символах, выравнивание значения внутри поля и другие преобразования, которые нужно выполнить над данными при размещении их в этом поле во время формирования отчета. Поледержатель начинается с символа начала шаблона (@ или ^), за которым следуют символы описания шаблона. Число символов в шаблоне, включая символ начала шаблона, определяет ширину помещаемых в отчет данных. Несколько примеров поледержателей с пояснениями приведены в таблице 10.1:
Таблица 10.1. Примеры описания полей в формате отчета
Поледержатель | Описания формата и преобразований |
---|---|
@<<<<<<<<<<< | Вывести текстовое значение в поле шириной в 12 символов. Выровнять его по левому краю, дополнив при необходимости пробелами справа до ширины поля. Слишком длинное значение усечь до ширины поля |
@<<<<<<<<... | Аналогично предыдущему примеру, но с выведением в конце поля многоточия, если значение усечено |
@####.### | Вывести числовое значение в поле шириной в 9 символов, отведя 5 цифр под целую и 3 цифры - под дробную часть числа. Выровнять его по правому краю и дополнить при необходимости целую часть числа пробелами слева до ширины поля и округлить дробную часть до 3 знаков. При попытке вывести число, целая часть которого не умещается в ширину поля, заполнить поле символом '#' как признак |
@0###.### | Так же, как в предыдущем примере, но с дополнением целой части значения ведущими нулями до ширины поля |
Полный список символов, применяемых для описания полей и форматов, приводится в таблице 10.2.
Таблица 10.2. Символы, применяемые при описании полей и форматов
Символ | Описание | Примеры использования |
---|---|---|
@ | начало обычного поля | @ @<< @||| @>> @## |
^ | начало специального поля | ^ ^<< ^||| ^>> ^## |
< | текстовое поле с выравниванием значения влево и добавлением пробелов справа | @<<<<< ^<<< |
| | текстовое поле с центрированием значения и добавлением пробелов с обеих сторон | @||||| ^||| |
> | текстовое поле с выравниванием значения вправо и добавлением пробелов слева | @>>>>> ^>>> |
# | числовое поле с выравниванием значения вправо с добавлением пробелов слева | @#### ^### |
0 | (вместо первого #) числовое поле с выравниванием значения вправо и добавлением нулей слева | @0### ^0## |
. | десятичная точка в числовом поле | @.### @0##.## |
... | закончить текстовое поле многоточием, чтобы показать усечение значения | @<<<<<... |
@* | поле переменной ширины со значением, состоящим из нескольких строк | @* |
^* | поле переменной ширины для следующих строк многострочного значения | ^* |
~ | подавление вывода строки с пустыми значениями полей | ^* ~ |
~~ | повторять строку, пока все значения полей не станут пустыми | ~~ ^* |
{} | группировка списка значений, который располагается на нескольких строках аргументов | {$one, $two, $three } |
# | (первым символом в строке) строка комментария в описании формата (не может располагаться между строкой шаблонов и строкой аргументов) | # это комментарий |
. | (единственным символом на отдельной строке) конец формата | format REPORT = описание формата . |