Schrift
[thread]726[/thread]

CSV auf Website als GD:Tortendiagramm: Anfängerproblem :)

Leser: 1


<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
tomi-w
 2006-05-12 15:45
#7577 #7577
User since
2006-05-12
11 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo zusammen,

ich setze mich seit einiger Zeit mit Perl auseinander und stehe nun vor dem Problem, dass ich eine Datenbank als CSV-Datei vorliegen habe, diese auf eine Website eingebunden habe und nun diese Werte als Tortendiagramm mit GD darstellen möchte.

Einlesen der CSV-Datei und Ausgabe als HTML:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/usr/bin/perl -w

$TITLE="Einlesen";
print "Content-type: text/html\n\n";

open(EINGABE, "<daten.csv") || die;

print "<html>\n<head>\n<title>$TITLE</title>\n</head>\n<body bgcolor=\"#ffffff\">\n\n";

print "<h1 align=\"center\">$TITLE</h1>\n<hr />\n\n";

print "<table border=\"2\" cellpadding=\"3\" cellspacing=\"1\">\n";

$header = <EINGABE>;
@zeile = split(";", $header);
print "<tr>";
foreach $zeile (@zeile) {
print "<th bgcolor=\"#ffffff\">$zeile</th>";
}
print "</tr>\n";

@tabelle = sort(<EINGABE>);
foreach $zeile (@tabelle) {
@zeile2 = split(";", $zeile);
print "<tr>";
foreach $zeile2 (@zeile2) {
print "<td bgcolor=\"#ffffff\">$zeile2</td>";
}
print "</tr>\n";
}

print "</table>\n</form>\n\n</body>\n</html>\n";

close(EINGABE);


Beispiel der CSV-Datenbank:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
"Monat";"Umsatz"
"Jan 2006";50
"Feb 2006";80
"Mrz 2006";85
"Apr 2006";90
"Mai 2006";78
"Jun 2006";69
"Jul 2006";65
"Aug 2006";20
"Sep 2006";25
"Okt 2006";60
"Nov 2006";65
"Dez 2006";68


Hat jemand eine Idee, wie ich die Daten grafisch darstellen kann?

Bin für jeden Tipp mega dankbar!

Gruß
Thomas
GwenDragon
 2006-05-12 16:24
#7578 #7578
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Zum Einlesen der CSV-Daten bitte CPAN:Text::CSV bzw. CPAN:Text::CSV_XS nehmen.

Du meinst, mit welchem Programm?

CPAN:GDGraph\n\n

<!--EDIT|GwenDragon|1147437075-->
tomi-w
 2006-05-12 16:34
#7579 #7579
User since
2006-05-12
11 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ja richtig.

Ich habe es auch schon geschafft ein Diagramm zu zeichnen, weiß aber einfach nicht, wie ich die Daten aus der CSV auslesen und die Werte in das Diagramm überführen kann :(

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/perl -wT

use strict;
use CGI;
use GD::Graph::pie;

use constant TITLE => "Test";

my $q = new CGI;
my $graph = new GD::Graph::pie( 300, 300 );
my @data = (
[ qw( Mon Tue Wed Thu Fri ) ],
[ 33, 24, 23, 19, 21 ],
);

$graph->set(
title => TITLE,
'3d' => 0
);

my $gd_image = $graph->plot( \@data );

print $q->header( -type => "image/png", -expires => "-1d" );

binmode STDOUT;
print $gd_image->png;
GwenDragon
 2006-05-12 21:01
#7580 #7580
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
So ungefähr ;)

--> snip <--
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $csv = Text::CSV->new();    # create a new object
my ( $line, @data );
open (DATEI, "meinedaten.csv");
while( defined( $line = <DATEI> ) ) {
 my $status = $csv->parse($line);         # CSV felder parsen

 if ($status) {
   @columns = $csv->fields();            # da sind die Spalten
   push @data, [ @colums ];              # Daten sichern
 } else {
    die ("Fehler: " . $csv->error_input ); # Fehler melden
 }
}
close (DATEI);

--> snip <--\n\n

<!--EDIT|GwenDragon|1147453780-->
tomi-w
 2006-05-13 14:18
#7581 #7581
User since
2006-05-12
11 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für den Tipp, aber sei mir bitte nicht böse wenn ich nochmal ganz doff nachfragen muss, wo ich den Code platzieren soll. Wie gesagt, ich bin gerade dabei mich in Perl einzuarbeiten und tue mich hier und da noch ein wenig schwer ;)

Ich habe mir das so gedacht, dass ich zunächst die CSV über das Script einlese und anzeige (funktioniert ja). Dann soll der User über einen Link auf eine neue Seite kommen, die ausschließlich das Diagramm darstellen soll...

Danke nochmals,
Thomas
renee
 2006-05-13 14:24
#7582 #7582
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl -wT

use strict;
use CGI;
use GD::Graph::pie;

use constant TITLE => "Test";

my $csv = Text::CSV->new(); # create a new object
my $line;
my @data = ([ qw( Mon Tue Wed Thu Fri ) ]);

open (DATEI, "<","meinedaten.csv");
while( defined( $line = <DATEI> ) ) {
my $status = $csv->parse($line); # CSV felder parsen

if ($status) {
@columns = $csv->fields(); # da sind die Spalten
push @data, [ @colums ]; # Daten sichern
} else {
die ("Fehler: " . $csv->error_input ); # Fehler melden
}
}
close (DATEI);

my $q = new CGI;
my $graph = new GD::Graph::pie( 300, 300 );


$graph->set(
title => TITLE,
'3d' => 0
);

my $gd_image = $graph->plot( \@data );

print $q->header( -type => "image/png", -expires => "-1d" );

binmode STDOUT;
print $gd_image->png;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
bloonix
 2006-05-13 14:27
#7583 #7583
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Gwen,

Code: (dl )
while( defined( $line = <DATEI> ) ) { 


wofür ist das defined gut? Warum nicht while(my $line = <DATEI>) {?

Gruß,
opi\n\n

<!--EDIT|opi|1147516066-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
pq
 2006-05-13 14:56
#7584 #7584
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
das defined() ist notwendig, weil theoretisch eine zeile (die letzte) nur 0 und kein
newline enthalten kann.
andererseits macht perl bei while (my $line = <$fh>) automatisch ein
defined drumherum. zu sehen mit perl -MO=Deparse ...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2006-05-13 15:57
#7585 #7585
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Ich schreibe lieber mal etwas zu viel.

Quote
andererseits macht perl bei while (my $line = <$fh>) automatisch ein
defined drumherum. zu sehen mit perl -MO=Deparse ...
Aha.

Aber besser konservativ programmieren ;)
bloonix
 2006-05-13 16:01
#7586 #7586
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=GwenDragon,13.05.2006, 13:57]Ich schreibe lieber mal etwas zu viel.[/quote]
das ist keinesfalls schlimm. ich wollte nur ne wissenlücke füllen :)
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2006-05-12 15:45.