Опубликован: 17.08.2006 | Уровень: для всех | Доступ: платный
Лекция 10:

Отчеты

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

Многострочные значения

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

format STDOUT =                            
Гамлет:
@*                                   
$multi_line_text
(У. Шекспир)
.
$multi_line_text = "Быть\nИли не быть?\nВот в чем вопрос.";          
write STDOUT;

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

Гамлет:
Быть
Или не быть?
Вот в чем вопрос.
     (У. Шекспир)

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

# выводимое многострочное значение
$text = "Что значит имя?\nРоза пахнет розой\n"
      . "Хоть розой назови ее, хоть нет.";
write STDOUT;
# описание формата отчета
format STDOUT =
^*                                
$text
^*                                
$text
^* ~
$text
^* ~
$text
   У.Шекспир, "Ромео и Джульетта"
.

Обратите внимание, что в формате для вывода значения переменной $text предусмотрены четыре строки. Причем первые две строки отчета (с шаблоном ^* ) будут выводиться в любом случае: даже если $text содержит только одну строку текста, вторая строка будет заполнена пробелами. Чтобы не выводить пробельных строк, в описании третьей и четвертой строк указан шаблон подавления пустых строк (одна тильда, ~), который может располагаться в любом месте строки шаблона. После выполнения приведенной программы текст будет выведен в таком виде:

Что значит имя?
Роза пахнет розой
Хоть розой назови ее, хоть нет.
   У.Шекспир, "Ромео и Джульетта"

Если заранее неизвестно минимальное количество выводимых строк, можно применить шаблон повторения многострочного поля (две тильды подряд в любом месте строки, ~~ ). В этом случае строка шаблона будет применяться многократно, пока не будет исчерпано многострочное значение, при этом пустые строки выводиться не будут. Тильды в шаблоне подавления пустых строк и в шаблоне повторения строк при выводе отчета заменяются на пробелы. Таким образом, формат в последнем примере можно заменить на следующий:

format STDOUT =
^* ~~
$text
   У.Шекспир, "Ромео и Джульетта"                                
.

В результате будет выведен точно такой же отчет, как и с использованием предыдущего формата, но последний формат гораздо короче и выводит любое количество строк.

Для описания в формате текстового значения, которое должно выводиться на несколько строк, применяется поледержатель следующего вида: ^<<<<<. Это специальное поле иногда называется "заполняемым полем". Оно предназначается для форматирования текстового значения, которое при выводе в отчет делится на строки, не превышающие ширину шаблона. Деление на строки производится по границам слов. Источником выводимого текста обязательно должна быть переменная со скалярным значением, из которой при каждом ее употреблении в формате извлекается столько слов, сколько поместится в соответствующем поле отчета. Заполнение шаблона текстом и вывод отчета в несколько строк иллюстрирует следующий пример:

my $shakespeare = 'Две равно уважаемых семьи '
   . 'В Вероне, где встречают нас событья, '
   . 'Ведут междоусобные бои '
   . 'И не хотят унять кровопролитья.';
my $text = $shakespeare;
write STDOUT;
# описание формата вывода
format STDOUT =                            
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<                                   
   $text                                
      У.Шекспир, "Ромео и Джульетта"
.

В этом примере для организации неявного цикла вывода также применяется шаблон повторения строк, поскольку неизвестно, сколько строк будет заполнено выводимым текстом. При выполнении примера будет выведен текст в таком виде:

Две равно уважаемых семьи В Вероне,
   где встречают нас событья, Ведут
   междоусобные бои И не хотят унять
   кровопролитья.
      У.Шекспир, "Ромео и Джульетта"

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

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

Добрый день.

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

 

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

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

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

 

Илья Циртаутас
Илья Циртаутас
Россия, Сергиев Посад