Latest web development tutorials

Perl форматированный вывод

Perl является очень мощным данных языка обработки текста.

Perl, может быть использован для определения формата шаблона, а затем использовать выходные данные записи данных с помощью указанного шаблона.

Формат Perl определен синтаксис выглядит следующим образом:

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

Аналитические параметры:

  • FORMATNAME: имя формата.
  • Fieldline: формат строки, формат , используемый для определения выходной линии, похожий на @, ^, <,>, | такие персонажи.
  • value_one, value_two ......: ряды данных, которые используются для вставки значений в передней формат строки, все переменные Perl.
  • : End символ.

Ниже приведен простой пример отформатирован:

#!/usr/bin/perl

$text = "google w3big taobao";
format STDOUT =
first: ^<<<<<  # 左边对齐,字符长度为6
    $text
second: ^<<<<< # 左边对齐,字符长度为6
    $text
third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断
    $text  
.
write

Выполните приведенный выше пример выход:

first: google
second: w3big
third: taoba

Формат строки (строка графического) Синтаксис

  • Формат строки @ или ^ в начале, эти линии не подвергаются какой-либо форме подстановки переменных.
  • @ Поле (не следует путать с массивом маркеров @) является обычным полем.
  • @, <,>, ^ После | длина определяет длину поля, если переменная превышает определенную длину, она будет урезана.
  • <,>, | Кроме того, представляют собой, выравнивание по левому краю, по правому краю, по центру выравнивается.
  • ^ Поля для многострочного заполнения текстового блока.

Диапазон Формат

Диапазон форматов, следующим образом:

формат Диапазон Значение
@ <<< Левый выход
@ >>> Выравниваются по правому краю выходной
@ ||| Совместите выход
@ ## ##. Фиксированная точность номер
@ * Несколько строк текста

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

В приведенной выше таблице, в дополнение к Многострочный @ * диапазон, широкий поле, равны указанному количеству символов в символ @, в том числе, например:

@###.##

Она представляет собой семь символов в ширину, после четырех до десятичной точки, запятой две.

Примерами могут служить следующие:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
	$name = $_;
	$age = $a[$i];
	$salary = $s[$i++];
	write;
}

В приведенном выше примере выход:

===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Переменный формат

  • $ ~ ($ FORMAT_NAME): Название формата $ ^ ($ FORMAT_TOP_NAME): Имя текущего формата хранится в заголовке
  • $% ($ FORMAT_PAGE_NUMBER): номер текущего вывода страницы
  • $ = ($ FORMAT_LINES_PER_PAGE): количество строк на странице
  • $ | ($ FORMAT_AUTOFLUSH): следует ли автоматически очищать буфер памяти выходной
  • $ ^ L ($ FORMAT_FORMFEED): на каждой странице (кроме первой страницы) заголовка требуется до вывода строки хранится в

Ниже приведен простой в использовании $ экземпляр - формат:

#!/usr/bin/perl

$~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
write;           # 输出 $~ 所指定的格式

format MYFORMAT = # 定义格式 MYFORMAT 
=================================
      Text # 本教程
=================================
.
write; 

Выполните приведенный выше пример выход:

=================================
      Text # 本教程
=================================
=================================
      Text # 本教程
=================================

Если вы не указать $ ~ при случае, выходной формат называется STDOUT:

#!/usr/bin/perl

write;         # 不指定$~的情况下会寻找名为STDOUT的格式

format STDOUT =
~用~号指定的文字不会被输出
----------------
  STDOUT格式
----------------
.

Выполните приведенный выше пример выход:

----------------
  STDOUT格式
----------------

В следующем примере мы добавим информацию в заголовок отчета, чтобы продемонстрировать переменные $ ^ или $ FORMAT_TOP_NAME:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

В приведенном выше примере выход:

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Мы также можем использовать $% или $ FORMAT_PAGE_NUMBER набор для разбиения на страницы отчета:

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

# 添加分页 $% 
format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
=================================== 
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n){
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

В приведенном выше примере выход:

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Вывод в другой файл

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

write(MYFILE);

Написать код, указанный выше, чтобы использовать выход формата печати по умолчанию в файл с именем MYFILE MYFILE в.

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

#!/usr/bin/perl

if (open(MYFILE, ">tmp")) {
$~ = "MYFORMAT";
write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。

format MYFILE = # 与文件变量同名 
=================================
      输入到文件中
=================================
.
close MYFILE;
}

После успешной реализации, мы можем просмотреть содержимое файла TMP, следующим образом:

$ cat tmp 
=================================
      输入到文件中
=================================

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

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {
select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中
$~ = "OTHER";
write;           # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER

format OTHER =
=================================
  使用定义的格式输入到文件中
=================================
. 
close MYFILE;
}

После успешной реализации, мы можем просмотреть содержимое файла TMP, следующим образом:

$ cat tmp 
=================================
      输入到文件中
=================================
=================================
  使用定义的格式输入到文件中
=================================