Homepage Inspire-world | Forum
CGI/Perl Workshops Tabellenzeilen mit Farbwechsel

 Inhaltsverzeichnis/Workshops Übersichtsseite/Tabellenzeilen mit Farbwechsel
So, in dem Workshop soll mal bischen Design ins Spiel kommen. Es geht darum Daten aus einer Datei auszulesen und die einzelnen Tabellenreihen mit wechselnden Farben darzustellen.

1. Das komplette Beispielscript

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.


 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Tabellenzeilen mit Farbwechsel
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!