Perl - Formats

Perl utilise un modèle d'écriture appelé «format» pour produire des rapports. Pour utiliser la fonctionnalité de format de Perl, vous devez d'abord définir un format, puis vous pouvez utiliser ce format pour écrire des données formatées.

Définir un format

Voici la syntaxe pour définir un format Perl -

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

Ici FormatNamereprésente le nom du format. lefieldlineest la manière spécifique, les données doivent être formatées. Les lignes de valeurs représentent les valeurs qui seront entrées dans la ligne de champ. Vous terminez le format avec une seule période.

Prochain fieldlinepeut contenir n'importe quel texte ou détenteurs de champ. Les détenteurs de champ contiennent de l'espace pour les données qui y seront placées à une date ultérieure. Un fieldholder a le format -

@<<<<

Ce champ est justifié à gauche, avec un espace de champ de 5. Vous devez compter le signe @ et les signes <pour connaître le nombre d'espaces dans le champ. Les autres détenteurs de champ comprennent -

@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder

Un exemple de format serait -

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

Dans cet exemple, $ name sera écrit comme justifié à gauche dans les 22 espaces de caractères et après cet âge sera écrit dans deux espaces.

Utilisation du format

Afin d'appeler cette déclaration de format, nous utiliserions le write mot-clé -

write EMPLOYEE;

Le problème est que le nom du format est généralement le nom d'un descripteur de fichier ouvert, et l'instruction d'écriture enverra la sortie à ce descripteur de fichier. Comme nous voulons que les données soient envoyées au STDOUT, nous devons associer EMPLOYEE au descripteur de fichier STDOUT. Cependant, nous devons d'abord nous assurer que STDOUT est notre descripteur de fichier sélectionné, en utilisant la fonction select ().

select(STDOUT);

Nous associerions ensuite EMPLOYEE à STDOUT en définissant le nouveau nom de format avec STDOUT, en utilisant la variable spéciale $ ~ ou $ FORMAT_NAME comme suit -

$~ = "EMPLOYEE";

Lorsque nous faisons maintenant un write (), les données seraient envoyées à STDOUT. N'oubliez pas: si vous allez écrire votre rapport dans un autre descripteur de fichier au lieu de STDOUT, vous pouvez utiliser la fonction select () pour sélectionner ce descripteur de fichier et le reste de la logique restera le même.

Prenons l'exemple suivant. Ici, nous avons des valeurs codées en dur juste pour montrer l'utilisation. En utilisation réelle, vous lirez les valeurs d'un fichier ou d'une base de données pour générer des rapports réels et vous devrez peut-être réécrire le rapport final dans un fichier.

#!/usr/bin/perl

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

select(STDOUT);
$~ = EMPLOYEE;

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

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

Une fois exécuté, cela produira le résultat suivant -

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

Définir un en-tête de rapport

Tout va bien. Mais vous seriez intéressé à ajouter un en-tête à votre rapport. Cet en-tête sera imprimé en haut de chaque page. C'est très simple de le faire. En plus de définir un modèle, vous devrez définir un en-tête et l'affecter à la variable $ ^ ou $ FORMAT_TOP_NAME -

#!/usr/bin/perl

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

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

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

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

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

Votre rapport ressemblera maintenant à -

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

Définir une pagination

Qu'en est-il si votre rapport prend plus d'une page? Vous avez une solution pour cela, utilisez simplement$% ou $ FORMAT_PAGE_NUMBER vairable avec en-tête comme suit -

format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
===================================                               
.

Maintenant, votre sortie ressemblera à ceci -

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

Nombre de lignes sur une page

Vous pouvez définir le nombre de lignes par page à l'aide d'une variable spéciale $= (ou $ FORMAT_LINES_PER_PAGE), Par défaut, $ = sera 60.

Définir un pied de page de rapport

Alors que $ ^ ou $ FORMAT_TOP_NAME contient le nom du format d'en-tête actuel, il n'y a pas de mécanisme correspondant pour faire automatiquement la même chose pour un pied de page. Si vous avez un pied de page de taille fixe, vous pouvez obtenir des pieds de page en cochant la variable $ - ou $ FORMAT_LINES_LEFT avant chaque écriture () et imprimer le pied de page vous-même si nécessaire en utilisant un autre format défini comme suit -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Pour un ensemble complet de variables liées au formatage, veuillez vous référer à la section Variables spéciales Perl .