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 .