Учебные материалы по математике | Perl — форматы вывода | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Perl — форматы вывода


Форматы вывода

Формат – это шаблон. В нем определяются:

А. Постоянная часть:

—  заголовки столбцов;

—  метки;

—  неизменный текст и др.

Б. Переменная часть:

—  текущие данные, что вы указываете в отчете.

Для использования формата надо сделать три операции:

1.  Определение формата.

2.  Загрузка данных, что выводятся на печать.

3.  Вызов формата

Обычно первый этап – один раз, два остальных — многократно. Обычно при компиляции программы. Для создания форматов во время выполнения используется функция eval ().

Определение формата

Может стоять в любом месте программы.

Синтаксис

Первая строка содержит служебное слово format, за которым идет имя формата и знак =. Имя формата – как имена для других конструкций.

format имя_формата=строка полей

значение1, значение2,………

строка полей

значение1, значение2,………

и. т.д.

Имя формата – из отдельного пространства имен. Обычно имена форматов совпадают с именами дескрипторов файлов.

Внимание! Потом сам шаблон, которой заканчиваеися точкой!

Шаблон состоит из строк полей. Любая строка полей содержит:

—  неизменный текст;

—  поледержатели;

—  строка значений.

Каждому значению соответствует один поледержатель. Значения в строке идут через запятую. Текст в значении после символа "n" отбрасываются.

Пример:

format STUDENT=

————————————-

@<<<<<<<<<<<<<<<

$FIO

@<<<<, @<

$group? $semestr

————————————-

Один из поледержателей для имени группы, например, специальности ПО имеет пять позиций — @<<<<<. Знак < говорит о том, что выравнивание происходит по левой границе.

Неизменный текст – это строки вида

————————————-

Вызов формата

Вызов формата проихрдит при помощи функции write, которая получает имя дескриптора файла и генерирует для этого файла текст, используя текущий для данного дескриптора формат.

По умолчанию – имя формата, что и имя дескриптора файла, то есть для дескриптора STDOUT -> формат STDOUT.

Пример. Используя формат STUDENT, выведем несколько записей.

Здесь

STUDENT – дескриптор файла, в котором будет записываться данные о студенте.

stu. txt – название файла, в который будет идти запись. Применение символа ">" означает, что этот файл создается для записи.

Функция die выводит сообщение, если функция open не смогла открыть и создать файл Stu. txt.

STUAD — дескриптор файла, из которого будут считываться данные.

addr. txt — название файла, из которого будут считываться данные.

open (STUDENT, ">stu. txt")||die ("can’t create");

open (STUAD,"addr. txt")|| die (can’t open addr. txt);

while (<STUAD>) # Прочитать данные из файла

# addr. txt

{ chomp; # Удалить символ новой строки

($FIO,$group,$semestr)=split(/ /); # Загрузить переменные с ФИО,

# именем группы и номером

№ семестра. Каждая строка

#разделяется на три элемента,

#разделенных пробелом.

write (STUDENT); # Посылка в файл stu. txt и печать по формату STUDENT полученной триады. Каждое поле в формате заменяется соответствующим значением из следующей строки:

}

Переменные в программе те же, что и в формате.

Поледержатели

А. Текстовые поля

Обычно начинаются со знака @. Символы после него – тип поля. Число символов +@ задают ширину поля.

1.  @<<<<< — поле из 6 символов, выровненного по левому краю. Дополняются пробелами справа, если значение меньше, чем длина поля. Если значение слишком длинное, то оно усекается.

2.  @>>> — поле из 4 символов, выровненных по правому краю (пробелы дополняются слева)

3.  @|||| — поле из 5 символов, которое центрировано.

Б. Числовые поля

Для чисел с фиксированной запятой, причем значение может быть выражением.

@###.## => 1245.99

Внимание! Нельзя установить формат для чисел с плавающнй запятой, для чисел в квадратных скобках или для чисел, меньших нуля. Для этого необходимо разрабатывать программы.

В. Многостроковые поля

Поледержатель — @* в отдельной строке.

Пример

format STDOUT =

Начало

@*

$long_str

Конец

.

.. … … …

.. … … …

$long_str="FrednBettynBobn";

write;

Получаем:

Начало

Fred

Betty

Bob

Конец

Г. Заполненные поля

Позволяет создавать целый текстовый абзац, разбиение на строки которого выполнено по границам слова. Для этого применяется несколько элментов формата. В них символы @ соответствуют ^. Значение для такого поля только или скалярная переменная, или элемент массива, или значение хеша, но не выражением, возвращающим скалярное значение. При заполнении поля из переменной "выдираются" необходимые слова. При последующем применении – из переменной, что осталось и т. д.

format PEOPLE =

Name: @<<<<<<<<< Comm: ^<<<<<<<<<<<<<<

$Name, $Comment

^<<<<<<<<<<<<<<

$Comment

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

Если текста меньше, то могут быть пустые строки. Чтобы их не было – символ ~ для подавления.

~ ^<<<<<<<<

Сам символ ~ печатается как пробел и может ставиться в любом месте шаблона. В этой строке не будет выводиться, если строки будут пустые или состоять из пробелов.

Если текста больше, то можно поставить

~~ ^<<<<<<<<,

то этот шаблон повторяется до тех пор, пока не будет "", то есть пока не получим пустую строку. В этой строке не должно быть постоянного текста.

Формат начала страницы

Применяется, если текста больше, чем на одной странице. Имя такого формата – имя дескриптора файла + _TOP. Имя дескриптора и TOP обязательно ПРОПИСНЫМИ буквами.

format ADDR_TOP=

My Addresses—Page@<$%

ADDR – имя файла. По умолчанию длина страницы – 60 строк.

Переменная $% хранит количество вызовов формата начала страницы для конкретного дескриптора файла. Поэтому ее можно использовать как нумератор страниц.

Изменение в форматах установок по умолчанию

1.  Изменение дескриптора файла select().

По умолчанию вывод print идет на стандартеый вывод STDOUT. Чтобы изменить его, надо применить select().

Аргумент – имя дескриптора – скалярная переменная с именем дескриптора.

Функция select() может быть как подпрограмма или как функция, тогда она возвращает имя ранее выбранного дескриптора. Дескртиптор, установленный select(), действует до следующего переопределения, то есть до следующей команды select.

$oldhandle= select LOGFILE;

print "This goes to LOGFILE";

select $oldhandle; # Восстановление предыдущего

# дескриптора

2.  Изменение имени формата

Имя формата по умолчанию совпадает с именем дескриптора файла. Для смены имени формата, не меняя дескриптора файла, надо изменить значение встроенной переменной $~.

$~="ADDRESSLABEL";

Эта переменная может быть доступна как для чтения, так и для записи.

Что будет, если мы выполним следующий фрагмент прграммы?

$oldhandle= select REPORT;

$~="SUMMARY";

Это значит, что мы устанавливаем для дескриптора файла REPORT имя формата SUMMARY.

3.  Изменение имени формата начала страницы

Для этого — $^. Доступно для чтения и для записи.

4.  Изменение длины страницы

Для этого — $=

$old=select LOGF;

$= = 30;

…………………………………

select $old;

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

5.  Изменение положения на странице

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

Функция write автоматически уменьшает значение $- на число выведенных строк. Когда $- равно нулю, то вызывается формат начала страницы и $- полагается равной $=; (длина страницы).

Пример:

write;

………………………………

print "Дополнительная строкаn";

$- —; #Декремент $-

………………………………

write; # с учетом дополнительной строки

В начале программы $- устанавливается в 0 для каждого дескриптора файла.

Работа с файлами и каталогами

Необходим дескриптор файла (handler).

Стандартные функции – как в Си

—  STDIN – стандартный ввод;

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020