ein Kapitel zurück                                           ein Kapitel weiter

Um eine Ausgabe tabellarisch zu Gestallten, bietet sich der Report-Generator write an. Ich glaube jeder kennt das, zum Beispiel in C, die Ausgabe von printf. Testen, Passt nicht, ein Whitespace wegnehmen, wieder testen, passt wieder nicht ...u.s.w.

Zuerst müssen wir den Kopf- und Rumpfteil codieren. Dies geschieht mit dem Befehl format und endet mit einem '.' .........

format STDOUT_TOP=
.
format STDOUT=
.

Das Suffix _TOP bei STDOUT_TOP bedeutet das es sich hier um den Kopfteil handelt und ohne das Suffix _TOP haben wir den Rumpfteil. Jetzt wollen wir uns schnell ein Einfaches Beispiel ansehen.....

#!/usr/bin/perl -w

sub Read{
  local *FH=shift;
  while(<FH>){print;}
 }

open(FH_READ,"/usr/include/stdio.h") or die $!;
#!/usr/bin/perl -w

@array1=("Kurs1""Kurs2""Kurs3");
@array2=(20.1, 33.2, 30.3);
@array3=("+1.3""-2,4""-3.2");

print "\n\n";

for($i=0; $i<3; $i++){
   ($name, $stand, $plusminus)=($array1[$i],$array2[$i],$array3[$i]);
   write;
   }

print "\n\n";


format STDOUT_TOP=
****************************************************************
*                                                              *
*                    Kurstand vom 15.10.2001                   *
*                                                              *
****************************************************************

Kurs               Stand                Plusminus
------            -------              -----------
.

format STDOUT=
@<<<<<<<<<             @<<<<<<<<                  @<<<<<<<<
$name,$stand,$plusminus
.


Und die Ausgabe lautet....

****************************************************************
*                                                              *
*                    Kurstand vom 15.10.2001                   *
*                                                              *
****************************************************************

Kurs               Stand                Plusminus
------            -------              -----------
Kurs1              20.1                   +1.3
Kurs2              33.2                   -2,4
Kurs3              30.3                   -3.2

Sie sehen es ist total simpel. Folgende Zeilen will ich genauer erklären.....

#!/usr/bin/perl -w

open(FH,"dat.csv") or die $!;
while(<FH>){
 chomp;
 ($vorn,$name,$street,$plz,$ort,$alter)=(split(m/,/));
 write;
 }

print "\n\n";


format STDOUT_TOP=
****************************************************************
*                                                              *
*                  Adressdatenbank 15.10.2001                  *
*                                                              *
****************************************************************

Vorname    Name           Strasse           PLZ     Wohnort              Alter
------------------------------------------------------------------------------
.

format STDOUT=
@<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<< 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<  
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   @<<<<<<<<
$vorn,$name,$street,$plz,$ort,$alter
.


Dies ist der Rumpfteil oder Body wenn sie wollen. Diese @<<<<< sind Platzhalter. Darunter befinden sich die Variablen. Es sind genau drei Platzhalter und drei Variablen zu finden, was bedeutet, das die Platzhalter durch die Variablen ersetzt werden. Folgende Platzhalter gibt es in Perl......

  • @<<<<<<< - Linksbündig; @ plus Anzahl '<' geben die Länge des Ausgabenfeldes an
  • @>>>>>> - Rechtsbündig; @ plus Anzahl '>' geben die Länge des Ausgabenfeldes an
  • @|||||| - Zentrierte Ausgabe; @ plus Anzahl '|' geben die Länge des Ausgabenfeldes an.
  • @###.### - Zahlenformat

Ausgelöst wird die ganze Ausgabe durch write.

Das Beispiel soeben hat eigentlich nicht viel Sinn gemacht. Sinnvoller ist es schon, ein CSV-Datei (dies ist eine Datei wo die einzelnen Elemente ein bestimmtes Trennzeichen haben, meist ein Komma oder Kommata) einzulesen. Beispielsweise........

Frank,Mustermann,Musterstrasse 10,88888,Musterhausen,33
Albert,Scheizer,Kleinhausstrasse 5,12345,Augsburg,99
Stefan,Wecker,Kohlstrasse 8,32343,Berlin,23

Dies Datei, nennen wir sie dat.csv lesen wir nun mit folgendem Programm ein und geben diese sauber formatiert mit dem Report-Generator aus..........

#!/usr/bin/perl -w

open(FH,"dat.csv") or die $!;
while(<FH>){
 chomp;
 ($vorn,$name,$street,$plz,$ort,$alter)=(split(m/,/));
 write;
 }

print "\n\n";


format STDOUT_TOP=

Seite: @<<Name<   des Formats: @<<Name<<Kopfseite<<<<<<<<    @<<<<<<<<<<<<<<<<<<<<<<<<
$%,$~,$^
Zeilen pro Seite : @<<briggebliebenen<<<<            Ü : @<<<<<<<<<<<<<<<<<
$=,$-

Vorname    Name           Strasse           PLZ     Wohnort              Alter
------------------------------------------------------------------------------
.

format STDOUT=
@<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
@<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   @<<<<<
$vorn,$name,$street,$plz,$ort,$alter
.


Auch für den Report-Generator gibt es reservierte Variablen.....

  • $~ - Name des Formats
  • $^ - Name des Kopfformats
  • $% - Aktuelle Seite
  • $= - Anzahl Zeilen pro Seite
  • $- - Anzahl Zeile die noch Übrig sind pro Seite

Diese reservierten Variablen wollen wir natürlich auch noch in Ihrer Ausführung ansehen.........

#!/usr/bin/perl -w

open(FH,"dat.csv") or die $!;
while(<FH>){
 chomp;
 ($vorn,$name,$street,$plz,$ort,$alter)=(split(m/,/));
 write;
 }

print "\n\n";


format STDOUT_TOP=

Seite: @<<Name<   des Formats: @<<Name<<Kopfseite<<<<<<<<    @<<<<<<<<<<<<<<<<<<<<<<<<
$%,$~,$^
Zeilen pro Seite : @<<briggebliebenen<<<<            Ü : @<<<<<<<<<<<<<<<<<
$=,$-

Vorname    Name           Strasse           PLZ     Wohnort              Alter
------------------------------------------------------------------------------
.

format STDOUT=
@<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<< 
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
@<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   @<<<<<
$vorn,$name,$street,$plz,$ort,$alter
.


HINWEIS: Wegen Darstellungsproblemen mussten einige Zeilen mit @<<<.... gebrochen werden!!!

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf