|
![ein Kapitel weiter](../weiter.gif)
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 weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|