ein Kapitel zurück                                           ein Kapitel weiter

Wir stellen uns folgendes Szenario vor. Sie sind Fondsmanager und bekommen täglich einen gewissen Anteil Geld. Diesen Investieren sie in Fonds. Sie wollen nun für Ihre Kunden eine wöchentliche Statistik über die Rendite der Fonds erstellen. Stellen wir uns vor wir haben folgende CSV-Datei....

Mo:10000:8432
Di:10000:12234
Mi:20000:23120
Do:10000:12321
Fr:5000:4033
Sa:2000:1023
So:5000:4002

Diese nennen wir umsatz.csv Folgende Bedeutung lassen wir dabei Mo:10000:8432 zukommen. Am Montag morgens investieren sie 10000 Euro. Am Montag abend bleiben Ihnen davon nur noch 8432 Euro.

Nun gehen wir wie folgt vor. Wir lesen die einzelnen Werte Zeilenweise ein und trennen diese voneinander. Als nächstes erstellen wir ein Image. Nun berrechnen wir den den Gewinn oder Verlust und geben diesen pro Tag als Prozent an. Die einzelnen Tage geben wir als Balkendiagramm aus. Rot bedeutet dabei Verlust und Grün Gewinn. Am Schluss wollen wir noch einen blauen Strich als Durchschnitt der Woche verwenden.

Und so sieht unser Code dabei aus.............

#!/usr/bin/perl -w


use GD;

#neues Image
$image = new GD::Image(160,230);

$black=$image->colorAllocate(0,0,0);
$red  =$image->colorAllocate(255,0,0);
$green=$image->colorAllocate(0,255,0);
$grey =$image->colorAllocate(127,127,127);
$white=$image->colorAllocate(255,255,255);
$blue =$image->colorAllocate(0,0,255);

$image->fill(1,1,$white);

$var=10;
$durchschnitt=0;
open(FH, "umsatz.csv");
while(<FH>){
 ($tag,$ausgaben,$einnahmen) = split(":",$_);

 #Verlust/Gewinn - Prozentual
 $prozent= (100/$ausgaben) * $einnahmen;
 $prozent_int=100-int($prozent);
  print "$tag $prozent\n";
 if($prozent < 100){
   $image->filledRectangle($var,$prozent,$var+20,100,$red);
   $image->string(gdTinyFont,$var+2,10,$prozent_int."%",$black);
   $image->string(gdSmallFont,$var+4,190,$tag,$black);
 }
 else{
 $image->filledRectangle($var,100,$var+20,$prozent,$green);
 $image->string(gdTinyFont,$var+2,10,$prozent_int."%",$black);
 $image->string(gdSmallFont,$var+4,190,$tag,$black);
 }
 $var+=20;
 $durchschnitt+=$prozent;
 }

$durchschnitt/=7;

$image->line(0,$durchschnitt,219,$durchschnitt,$blue);


#Das Gittermuster....
$image->line(10,100,199,100,$black);
for($var=10; $var<160; $var+=20){
 $image->dashedLine($var,0,$var,199,$black);
 }
$image->char(gdSmallFont,2,95,"0",$black);
$image->char(gdSmallFont,2,50,"-",$black);
$image->char(gdSmallFont,2,150,"+",$black);

$schnitt=$durchschnitt-100;
$image->string(gdSmallFont,5,210,"Wochenschnitt : ".int($schnitt)."%",$blue);


$png = $image->png;
open(PNG,"> gd16.png") or die ("Fehler bei open.....\n");
# Einen Binär-Stream sicherstellen.
binmode PNG;
print PNG $png;
close(PNG);

Und so siehts aus :

Bild: gd16.png


Zugegeben das Beispiel hat jetzt nicht viel mit der Realität zu tun. War auch nicht meine Absicht. Es geht mir ledeglich darum Ihnen zu zeigen wie einfach es ist ein Balken-Diagramm zu erstellen.

Zu weiteren Anwenungsbeispielen kommen wir im nächsten Kapitel, dem Chart-Modul, welches auf das GD-Modul aufbaut. Außerdem werden wir das GD-Modul noch öfteren bei der CGI-Programmierung verwenden.

Wer übrigens die Programmiersprache C beherrscht, kann sich die ganzen Beispiele bei meinem C-Kurs ebenfalls ansehen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf