Dies ist die Beispieldatei die angezeigt werden soll:
Diese Datei kann natürlich auch noch viele andere Werte enthalten. Hier nur ein einfaches Beispiel.
Müller|mueller@mueller.de
Meier|meier@meier.de
Muster|max@muster.com
Schulze|schulze@schulze.net
Chef|chef@meinedomain.org
Hier das Script:
#!/usr/bin/perl
########################################
open (FILE, "daten.dat");
@DATA=<FILE>;
close(FILE);
print "Content-type: text/html\n\n";
print qq~
<html><head><title>Adressenliste</title></head>
<body bgcolor=#FFFFFF>
<table width=350 border=0 cellpadding=1 cellspacing=2 align=center>
<tr bgcolor=#000099><td>
<font face=verdana color=#FFFFFF size=2><b> Name </b></font></td>
<td><font face=verdana color=#DDDDDD size=2><b> E-Mail </b></font></td>
</tr>
~;
$total = 0;
foreach $linie (@DATA) {
($name,$email) = split(/\|/, $linie);
$total++;
if ($total =~ /[0,2,4,6,8]$/) {
$bgcolor = "#EEEEEE";
}
else {
$bgcolor = "#CCCCCC";
}
print "<tr bgcolor=\"$bgcolor\"><td><font face=\"Verdana\" size=\"2\"> $name </td>";
print "<td><font face=\"Verdana\" size=\"2\"> $email </td></tr>\n";
}
print qq~
</table></body></html>
~;
Script Demo: ansehen
Erläuterungen dazu:
In dem ersten Abschnitt wird die Datei gelesen und alles in das Array @DATA gespeichert.
open (FILE, "daten.dat");
@DATA=<FILE>;
close(FILE);
Der nächste Abschnitt zwischen print qq~ und ~; stellt den HTML Kopf und den Tabellentitel dar.
Nun wird es interessant, der nächste Abschnitt erzeugt die wechselnden Tabellenreihenfarben.
$total = 0;
foreach $linie (@DATA) {
($name,$email) = split(/\|/, $linie);
$total++;
if ($total =~ /[0,2,4,6,8]$/) {
$bgcolor = "#EEEEEE";
}
else {
$bgcolor = "#CCCCCC";
}
Zunächst einmal wird der Zähler auf 0 gesetzt $total = 0;
Dann folgt eine foreach Schleife die die einzelnen Zeilen der Datei durchläuft
foreach $linie (@DATA) {
($name,$email) = split(/\|/, $linie);
$total++; erhöht den Zähler immer um 1 pro Zeile
if ($total =~ /[0,2,4,6,8]$/) { Festlegung welches Muster angewendet werden soll.
$bgcolor = "#EEEEEE"; obwohl diese Farbe zuerst steht wird diese in der zweiten
Tabellenzeile angezeigt und die Farbe $bgcolor = "#CCCCCC"; in der ersten Datenausgabe Tabellenreihe.
Warum? Nun mit 0 geht es los, der erste Zähler ist 1, das bedeutet wenn man dieses Muster anwendet (0,2,4,6,8) das zuerst die Farbe
von else { $bgcolor = "#CCCCCC"; angewendet wird. Dann erst trifft 2 zu und der erste Farbwert $bgcolor = "#EEEEEE";
findet Anwendung.
Nun werden die Zeilen der Tabelle bei der print Anweisung noch ausgegeben, darunter dann das Dateiende.
Weitere Tipps:
1. Schreibt man das Muster so if ($total =~ /[0,1,3,5]$/) { erfolgt die Sortierung genau andersherum
2. Fügt man vor die print Anweisung noch hinzu
if ($name eq "Muster") {
$bgcolor = "coral";
}
wird die Zeile mit dem entsprechenden Namen in der Farbe dargestellt. Gut zu nutzen wenn man Daten sucht und die Übereinstimmungen
farblich hervorheben will. Dann muss man natürlich die Daten erst an das Script per Formulareingabe übergeben...
3. Wollte man alle Namen die mit M beginnen farblich hervorheben müsste man statt der If Abfrage
if ($name eq "Muster") {
$bgcolor = "coral";
}
Dieses verwenden
if ($name =~ /^M/) {
$bgcolor = "steelblue";
}
Das ^ ist die Aweisung das das Muster am Anfang stehen muss, M der Buchstabe der als Muster gesucht wird.
4. Mit diesem Ausdruck, beidem das $ nach dem Suchmuster steht muss der Buchstabe am Ende vorkommen, also bei dem Name "Chef"
if ($name =~ /f$/) {
$bgcolor = "steelblue";
}
5. Mit solchen Ausdrücken
if ($name =~ /^M/) {
$bgcolor = "steelblue";
}
kann man sehr viel anfangen, z.B. könnte man hier auch je nach Anfangsbuchstabe eine Datei zum schreiben öffnen
und eine Trennung der Datensätze nach Alphabet erreichen. Oder auch für Wochentage entsprechende Logdateien oder anderes automatisch schreiben lassen.
|