Sortie au format Perl


Perl est un langage de traitement de données textuelles très puissant.

En Perl, vous pouvez utiliser le format pour définir un modèle, puis utiliser l'écriture pour générer des données selon le modèle spécifié.

La syntaxe de définition du formatage Perl est la suivante :

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

Analyse des paramètres :

  • FormatName : Nom du format.

  • fieldline : Une ligne de format utilisée pour définir le format d'une ligne de sortie, avec des caractères comme @,^,<,>,|.

  • value_one, value_two... : Ligne de données, utilisée pour insérer des valeurs dans la ligne de format précédente, toutes sont des variables Perl.

  • . : symbole de fin.

Ce qui suit est un exemple de formatage simple :

#!/usr/bin/perl

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

Le résultat de l'exécution de l'exemple ci-dessus est :

first: google
second: php
third: taoba

Ligne de format (ligne graphique) syntaxe

  • Les lignes de format commencent par @ ou ^, ces lignes n'effectuent aucune forme de substitution de variable. Les champs

  • @ (à ne pas confondre avec le symbole de tableau @) sont des champs ordinaires.

  • @,^ La longueur de <, >,| détermine la longueur du champ. Si la variable dépasse la longueur définie, elle sera tronquée.

  • <, >,| représentent également respectivement l'alignement à gauche, l'alignement à droite et l'alignement au centre. Le champ

  • ^ est utilisé pour le remplissage de blocs de texte multilignes.

Format du champ de valeur

Le format du champ de valeur est tel qu'indiqué dans le tableau suivant :

格式值域含义
@<<<左对齐输出
@>>>右对齐输出
@|||中对齐输出
@##.##  固定精度数字  
@*多行文本

Le premier caractère de chaque champ de valeur est le caractère de remplissage de ligne. Lorsque le caractère @ est utilisé, aucun formatage du texte n'est effectué.

Dans le tableau ci-dessus, à l'exception du champ de valeur multiligne @*, la largeur du champ est égale au nombre de caractères spécifié y compris le caractère @ Par exemple :

@###.##

signifie sept. caractères de large, quatre décimales avant et deux décimales après.

L'exemple est le suivant :

#!/usr/bin/perl

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

select(STDOUT);
$~ = EMPLOYEE;

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

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

Le résultat de sortie de l'exemple ci-dessus est :

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

Variable de format

  • $~ ($ FORMAT_NAME) : nom du format $^ ($FORMAT_TOP_NAME) : Le nom du format d'en-tête actuel est stocké dans

  • $% ($FORMAT_PAGE_NUMBER) : Le numéro de page de sortie actuel

  • $= ($FORMAT_LINES_PER_PAGE) : Nombre de lignes dans chaque page

  • $| ($FORMAT_AUTOFLUSH) : s'il faut actualiser automatiquement le stockage du tampon de sortie

  • $^L ($FORMAT_FORMFEED) : la chaîne qui doit être affichée avant l'en-tête de chaque page (sauf la première page) est stockée dans

Ce qui suit est un simple façon d'utiliser $~ Exemple de formatage :

#!/usr/bin/perl

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

format MYFORMAT = # 定义格式 MYFORMAT 
=================================
      Text # php中文网
=================================
.
write;

Le résultat de sortie de l'exécution de l'exemple ci-dessus est :

=================================
      Text # php中文网
=================================
=================================
      Text # php中文网
=================================

Si $~ n'est pas spécifié, le format nommé STDOUT sera affiché :

#!/usr/bin/perl

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

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

Le résultat de l'exécution de l'exemple ci-dessus est :

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

Dans l'exemple suivant, nous démontrons l'utilisation de la variable $^ ou $FORMAT_TOP_NAME en ajoutant des informations d'en-tête de rapport :

#!/usr/bin/perl

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

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

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

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

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

Le résultat de sortie de l'exemple ci-dessus est :

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

Nous pouvons également utiliser $% ou $FORMAT_PAGE_NUMBER pour définir la pagination du rapport :

#!/usr/bin/perl

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

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

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

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

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

Le résultat de sortie de l'exemple ci-dessus est :

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

Sortie vers d'autres fichiers

Par défaut, la fonction d'écriture affiche les résultats dans le fichier de sortie standard STDOUT. Nous pouvons également lui faire afficher les résultats dans n'importe quel autre fichier. La méthode la plus simple consiste à transmettre la variable de fichier en tant que paramètre à écrire, tel que :

write(MYFILE);

Le code ci-dessus écrit les sorties dans le fichier MYFILE en utilisant le format d'impression par défaut nommé MYFILE.

Mais de cette façon, vous ne pouvez pas utiliser la variable $~ pour changer le format d'impression utilisé. La variable système $~ n'affecte que la variable de fichier par défaut, nous pouvons modifier la variable de fichier par défaut, modifier $~, puis appeler write.

#!/usr/bin/perl

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

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

Après une exécution réussie, nous pouvons afficher le contenu du fichier tmp comme indiqué ci-dessous :

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

Lorsque nous pouvons utiliser select pour modifier la variable de fichier par défaut, il renvoie la représentation interne du variable de fichier par défaut actuelle, de cette façon, nous pouvons créer des sous-programmes et les afficher selon nos propres idées sans affecter les autres parties du programme.

#!/usr/bin/perl

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

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

Après une exécution réussie, nous pouvons afficher le contenu du fichier tmp, comme indiqué ci-dessous :

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