Perl - Formate

Perl verwendet eine Schreibvorlage, die als "Format" bezeichnet wird, um Berichte auszugeben. Um die Formatierungsfunktion von Perl zu verwenden, müssen Sie zuerst ein Format definieren und dann dieses Format zum Schreiben formatierter Daten verwenden.

Definieren Sie ein Format

Es folgt die Syntax zum Definieren eines Perl-Formats:

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

Hier FormatNamerepräsentiert den Namen des Formats. DasfieldlineAuf diese Weise sollten die Daten formatiert werden. Die Wertezeilen stellen die Werte dar, die in die Feldzeile eingegeben werden. Sie beenden das Format mit einem einzelnen Punkt.

Nächster fieldlinekann beliebigen Text oder Feldhalter enthalten. Die Feldhalter bieten Platz für Daten, die zu einem späteren Zeitpunkt dort abgelegt werden. Ein Feldhalter hat das Format -

@<<<<

Dieser Feldhalter ist linksbündig mit einem Feldbereich von 5. Sie müssen das @ -Zeichen und das <-Zeichen zählen, um die Anzahl der Leerzeichen im Feld zu ermitteln. Andere Feldhalter sind -

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

Ein Beispielformat wäre -

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

In diesem Beispiel wird $ name innerhalb von 22 Zeichen als linksbündig und nach diesem Alter in zwei Leerzeichen geschrieben.

Verwenden des Formats

Um diese Formatdeklaration aufzurufen, verwenden wir die write Schlüsselwort -

write EMPLOYEE;

Das Problem ist, dass der Formatname normalerweise der Name eines geöffneten Dateihandles ist und die write-Anweisung die Ausgabe an dieses Dateihandle sendet. Da die Daten an STDOUT gesendet werden sollen, müssen wir EMPLOYEE dem STDOUT-Dateihandle zuordnen. Zunächst müssen wir jedoch mithilfe der Funktion select () sicherstellen, dass STDOUT unser ausgewähltes Dateihandle ist.

select(STDOUT);

Wir würden dann EMPLOYEE mit STDOUT verknüpfen, indem wir den neuen Formatnamen mit STDOUT setzen und die spezielle Variable $ ~ oder $ FORMAT_NAME wie folgt verwenden:

$~ = "EMPLOYEE";

Wenn wir jetzt ein write () ausführen, werden die Daten an STDOUT gesendet. Denken Sie daran: Wenn Sie Ihren Bericht in einem anderen Dateihandle anstelle von STDOUT schreiben möchten, können Sie mit der Funktion select () dieses Dateihandle auswählen, und der Rest der Logik bleibt unverändert.

Nehmen wir das folgende Beispiel. Hier haben wir fest codierte Werte, nur um die Verwendung anzuzeigen. Bei der tatsächlichen Verwendung lesen Sie Werte aus einer Datei oder Datenbank, um tatsächliche Berichte zu erstellen, und müssen möglicherweise den Abschlussbericht erneut in eine Datei schreiben.

#!/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;
}

Bei der Ausführung wird das folgende Ergebnis erzielt:

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

Definieren Sie einen Berichtskopf

Alles sieht gut aus. Sie möchten jedoch Ihrem Bericht eine Kopfzeile hinzufügen. Dieser Header wird oben auf jeder Seite gedruckt. Das ist sehr einfach. Abgesehen von der Definition einer Vorlage müssten Sie einen Header definieren und ihn der Variablen $ ^ oder $ FORMAT_TOP_NAME zuweisen -

#!/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;
}

Jetzt sieht Ihr Bericht so aus:

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

Definieren Sie eine Paginierung

Was ist, wenn Ihr Bericht mehr als eine Seite umfasst? Sie haben eine Lösung dafür, verwenden Sie einfach$% oder $ FORMAT_PAGE_NUMBER zusammen mit dem Header wie folgt vairable -

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

Jetzt sieht Ihre Ausgabe wie folgt aus:

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

Anzahl der Zeilen auf einer Seite

Sie können die Anzahl der Zeilen pro Seite mithilfe einer speziellen Variablen festlegen $= (oder $ FORMAT_LINES_PER_PAGE), Standardmäßig ist $ = 60.

Definieren Sie eine Berichtsfußzeile

Während $ ^ oder $ FORMAT_TOP_NAME den Namen des aktuellen Header-Formats enthält, gibt es keinen entsprechenden Mechanismus, um automatisch dasselbe für eine Fußzeile zu tun. Wenn Sie eine Fußzeile mit fester Größe haben, können Sie Fußzeilen abrufen, indem Sie vor jedem Schreiben () die Variable $ - oder $ FORMAT_LINES_LEFT überprüfen und die Fußzeile bei Bedarf selbst in einem anderen Format drucken, das wie folgt definiert ist:

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Eine vollständige Liste der Variablen zum Formatieren finden Sie im Abschnitt Perl-Spezialvariablen .