Чтение онлайн

на главную

Жанры

Язык программирования Perl
Шрифт:

Поле отчета - это пространство указанной ширины, расположенное в определенном месте отчета, куда помещаются данные в нужном представлении. (Например, конкретное поле в отчете может быть описано таким образом - "в начале первой строки заголовка каждой страницы должна выводиться текущая дата в следующем виде: день (две цифры с ведущим нулем), месяц (две цифры с ведущим нулем) и год (четыре цифры с ведущим нулем), разделенные точками".) Поля отчета в описании формата представлены в виде так называемых поледержателей (fieldholders). Поледержатель (или переменная поля) представляет из себя шаблон, описывающий тип поля, его ширину в символах, выравнивание значения внутри поля и другие преобразования, которые нужно выполнить над данными при размещении их в этом поле во время формирования отчета. Поледержатель начинается с символа начала шаблона (@ или ^), за которым следуют символы описания шаблона. Число символов в шаблоне, включая символ начала шаблона, определяет ширину помещаемых в отчет данных. Несколько примеров поледержателей с

пояснениями приведены в таблице 10.1:

Таблица 10.1. Примеры описания полей в формате отчета

Поледержатель Описания формата и преобразований
@<<<<<<<<<<< Вывести текстовое значение в поле шириной в 12 символов. Выровнять его по левому краю, дополнив при необходимости пробелами справа до ширины поля. Слишком длинное значение усечь до ширины поля
@<<<<<<<<... Аналогично предыдущему примеру, но с выведением в конце поля многоточия, если значение усечено
@####.### Вывести числовое значение в поле шириной в 9 символов, отведя 5 цифр под целую и 3 цифры - под дробную часть числа. Выровнять его по правому краю и дополнить при необходимости целую часть числа пробелами слева до ширины поля и округлить дробную часть до 3 знаков. При попытке вывести число, целая часть которого не умещается в ширину поля, заполнить поле символом '#' как признак
@0###.### Так же, как в предыдущем примере, но с дополнением целой части значения ведущими нулями до ширины поля

Полный список символов, применяемых для описания полей и форматов, приводится в таблице 10.2.

Таблица 10.2. Символы, применяемые при описании полей и форматов

Символ Описание Примеры использования
@ начало обычного поля @ @<< @||| @>> @##
^ начало специального поля ^ ^<< ^||| ^>> ^##
< текстовое поле с выравниванием значения влево и добавлением пробелов справа @<<<<< ^<<<
| текстовое поле с центрированием значения и добавлением пробелов с обеих сторон @||||| ^|||
> текстовое поле с выравниванием значения вправо и добавлением пробелов слева @>>>>> ^>>>
# числовое поле с выравниванием значения вправо с добавлением пробелов слева @#### ^###
0 (вместо первого #) числовое поле с выравниванием значения вправо и добавлением нулей слева @0### ^0##
. десятичная точка в числовом поле @.### @0##.##
... закончить текстовое поле многоточием, чтобы показать усечение значения @<<<<<...
@* поле переменной ширины со значением, состоящим из нескольких строк @*
^* поле переменной ширины для следующих строк многострочного значения ^*
~ подавление вывода строки с пустыми значениями полей ^* ~
~~ повторять строку, пока все значения полей не станут пустыми ~~ ^*
{} группировка списка значений, который располагается на нескольких строках аргументов {$one, $two, $three }
# (первым символом в строке) строка комментария в описании формата (не может располагаться между строкой шаблонов и строкой аргументов) # это комментарий
. (единственным символом на отдельной строке) конец формата format REPORT = описание формата .

То, как применяются поледержатели при описании формата, можно увидеть из следующего примера:

format STDOUT =

Учетная
карточка пользователя N @0###

$number

– --------------------------------------------------------

Фамилия @<<<<<<<<<<<<<< | Login @<<<<<<<

$last_name, $login

Имя @<<<<<<<<<<< | Группа @<<<<<<<<<<<<<<<<<

$first_name, $group

Отчество @<<<<<<<<<<<<<<<<<< |

$middle_name

E-mail @<<<<<<<<<<<<<<<<<< | Телефон @>>>>>>>>>

$email, $phone

Ограничение дискового пространства @####.## Мегабайт

$quota

– --------------------------------------------------------

Дата регистрации @# @<<<<<<<<< @### года

{$day,

$month_name,$year}

.

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

Для форматированного вывода отчетов применяется функция write, которая оформляет очередную порцию данных в соответствии с форматом отчета и выводит их в указанный выходной поток. Обращение к функции write иногда называют вызовом формата. В качестве аргумента функции write может передаваться файловый манипулятор выходного потока. Вызванная без аргументов, она направляет отчет в текущий выходной поток. Перед обращением к ней нужно заполнить новыми данными переменные, перечисленные в строках аргументов текущего формата. Обычно write вызывается в цикле для вывода в отчет очередной строки. По историческим причинам для заполнения полей отчета часто используются глобальные переменные. Лексические переменные, объявленные с помощью my, доступны в формате только тогда, когда формат и лексические переменные объявлены в одной области видимости. Подробно об областях видимости переменных будет рассказано в лекции 12.

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

# данные в записи входного файла разделены запятыми

open my $in, '<', 'users.txt' or die;

while (my $line = <$in>) {

local ($last_name, $first_name, $middle_name,

$login, $group, $email, $phone, $quota, $number,

$day, $month_name, $year) = split ',', $line;

# данные для отчета помещены в переменные

write STDOUT; # данные выводятся в STDOUT по формату

}

close $in or die;

# здесь располагается описание формата...

В результате выполнения этой программы в поток STDOUT будет выведен отчет, состоящий вот из таких карточек:

Учетная карточка пользователя N 00001

– --------------------------------------------------------

Фамилия Wall | Login larry

Имя Larry | Группа root

Отчество |

E-mail larry@wall.org | Телефон +123456789

Ограничение дискового пространства 9876,54 Мегабайт

Поделиться:
Популярные книги

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

В теле пацана 6

Павлов Игорь Васильевич
6. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана 6

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Брак по-драконьи

Ардова Алиса
Фантастика:
фэнтези
8.60
рейтинг книги
Брак по-драконьи

Горькие ягодки

Вайз Мариэлла
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Горькие ягодки

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Эксперимент

Юнина Наталья
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Эксперимент

В теле пацана

Павлов Игорь Васильевич
1. Великое плато Вита
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
В теле пацана

Кодекс Крови. Книга III

Борзых М.
3. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга III

Шестое правило дворянина

Герда Александр
6. Истинный дворянин
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Шестое правило дворянина

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Боги, пиво и дурак. Том 3

Горина Юлия Николаевна
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3

Live-rpg. эволюция-4

Кронос Александр
4. Эволюция. Live-RPG
Фантастика:
боевая фантастика
7.92
рейтинг книги
Live-rpg. эволюция-4