Форматирование вывода в Perl
Perl — очень мощный язык обработки текстовых данных.
В Perl можно использовать format для определения шаблона, а затем write для вывода данных в соответствии с указанным шаблоном.
Синтаксис определения формата Perl выглядит следующим образом:
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
Пояснение параметров:
- FormatNameИмя формата.
- fieldlineСтрока формата, используемая для определения формата строки вывода, подобно символам, таким как @, ^, <, >, |.
- value_one,value_two……Строки данных, используемые для вставки значений в предшествующие строки формата; все они являются переменными Perl.
- .Символ завершения.
Ниже приведён простой пример форматирования:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
first: google second: example third: taoba
Синтаксис строки формата (строки-изображения)
- Строки формата начинаются с @ или ^, и в этих строках не выполняется никакая подстановка переменных.
- @-поле (не путать с символом массива @) — обычное поле.
- Символы <, >, | после @, ^ определяют длину поля; если переменная превышает заданную длину, она будет усечена.
- Символы <, >, | также обозначают выравнивание по левому краю, по правому краю и по центру соответственно.
- Поля ^ используются для заполнения многострочных текстовых блоков.
Форматы полей
Форматы полей показаны в следующей таблице:
| Формат | Значение поля |
|---|---|
| @<<< | Вывод с выравниванием по левому краю |
| @>>> | Вывод с выравниванием по правому краю |
| @||| | Вывод с выравниванием по центру |
| @##.## | Число с фиксированной точностью |
| @* | Многострочный текст |
Первый символ каждого поля — это символ заполнения строки. Когда используется символ @, форматирование текста не выполняется.
В приведённой выше таблице, за исключением многострочного поля @*, ширина поля равна количеству указанных символов, включая символ @, например:
@###.##
Указывает ширину в семь символов: четыре до десятичной точки и две после десятичной точки.
Пример приведён ниже:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
=================================== Ali 20 2000.00 =================================== =================================== Example 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Переменные формата
- $~ ($FORMAT_NAME): имя формата $^ ($FORMAT_TOP_NAME): в нём хранится имя текущего формата заголовка
- $% ($FORMAT_PAGE_NUMBER): номер текущей страницы вывода
- $= ($FORMAT_LINES_PER_PAGE): количество строк на странице
- $| ($FORMAT_AUTOFLUSH): нужно ли автоматически сбрасывать буфер вывода
- $^L ($FORMAT_FORMFEED): строка, которую нужно выводить перед заголовком на каждой странице (кроме первой), хранится в
Ниже приведён простой пример форматирования с использованием $~:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
=================================
Text # Example
=================================
=================================
Text # Example
=================================
Если $~ не указан, будет выведен формат с именем STDOUT:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
---------------- STDOUT格式 ----------------
В следующем примере мы демонстрируем использование переменных $^ или $FORMAT_TOP_NAME, добавляя информацию в заголовок отчёта:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== Example 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Мы также можем использовать $% или $FORMAT_PAGE_NUMBER, чтобы задать нумерацию страниц для отчёта:
Пример
Выполнение приведённого выше примера даёт следующий вывод:
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== Example 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
Вывод в другие файлы
По умолчанию функция write выводит результаты в стандартный выходной файл STDOUT. Мы также можем заставить её выводить результаты в любой другой файл. Самый простой способ — передать файловую переменную в качестве параметра в write, например:
write(MYFILE);
В приведённом выше коде write по умолчанию использует формат печати с именем MYFILE для вывода в файл MYFILE.
Однако таким образом вы не можете использовать переменную $~ для изменения используемого формата печати. Системная переменная $~ работает только с файловой переменной по умолчанию. Мы можем изменить файловую переменную по умолчанию, изменить $~, а затем вызвать write.
Пример
После успешного выполнения мы можем просмотреть содержимое файла tmp, как показано ниже:
$ cat tmp
=================================
输入到文件中
=================================
Когда мы используем select для изменения файловой переменной по умолчанию, он возвращает внутреннее представление текущей файловой переменной по умолчанию. Таким образом, мы можем создавать подпрограммы для вывода по нашему усмотрению, не влияя на другие части программы.
Пример
После успешного выполнения мы можем просмотреть содержимое файла tmp, как показано ниже:
$ cat tmp
=================================
输入到文件中
=================================
=================================
使用定义的格式输入到文件中
=================================
Другие расширения