[GastForen Archiv Perl und CGI Auslesen von Werten für Grafik

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Archiv - Archivierte Foren
Themen
Beiträge
Moderatoren
Letzter Beitrag

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

22. Mai 2003, 13:55
Beitrag # 1 von 28
Bewertung:
(8343 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich versuche zur Zeit ein Programm zu schreiben, dass ein Balkendiagramm darstellen soll. Bis jetzt habe ich nur eines geschrieben , wo die Höhe der Balken festgelegt wurde.
Ich möchte aber gerne, dass man zunächst Daten aus einer Exceltabelle ausliest und diese dann grafisch darstellt.
Ich hoffe mir kann dabei jemand helfen. Es ist wirklich wichtig.
Hier ist mein bisheriges kleines Programm. Bitte nicht lachen:-)

#!/usr/bin/perl
use strict;
use GD;
use Chart::bars;
my($obj);

$obj = Chart::Bars->new (600,400);
$obj->set ('title' => 'Foo Bar');
$obj->add_pt ('foo', 100, 100);
$obj->add_pt ('bar', 150, 150);
$obj->add_dataset ('foo', 'bar');
$obj->add_dataset (10, 10);
$obj->add_dataset (10, 10);

$obj->cgi_png ();

$obj->png ("foo2.png");

print "Content-type: text/html\n\n";


Hoffe ihr könnt damit was anfangen.

LG Muse
X

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

22. Mai 2003, 14:20
Beitrag # 2 von 28
Beitrag ID: #36426
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo muse,

zum Auslesen von Excel-Dateien gibt es diverse Perl Module
zB. diesen
http://search.cpan.org/...0.2602/ParseExcel.pm
oder diesen:
http://search.cpan.org/...imple-1.01/Simple.pm

Du kannst aber auch die Excel-Tabelle als .csv Datei speichern und diese dann einfach als Textdatei einlesen.

Bsp.:
-----------------------------
open(DAT,"<tabelle.csv");
while(<DAT>){
chomp;
@zeile = split(/;/,$_);
# mache irgendwas mit der Zeile
$spalte1 = $zeile[0];
$spalte2 = $zeile[1];
.
usw.
.
}
close(DAT);
-----------------
Das ; beim split ist der Spaltentrenner der vom Excel generiert wird.
wenn Du einen anderen verwendest, dann ersetze das ; einfach.
Grüße Oesi


als Antwort auf: [#36418]
(Dieser Beitrag wurde von oesi50 am 22. Mai 2003, 14:34 geändert)

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

22. Mai 2003, 14:43
Beitrag # 3 von 28
Beitrag ID: #36431
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Oesi,

vielen Dank für den Tip, aber ich habe schon versucht die Daten aus der Exceltabelle auszulesen, in dem ich diese als Textdatei abgespeichert habe. Das klappt auch. Mein Problem ist nur, dass ich nicht weiß, wie ich aus diesen Daten ein Diagramm darstellen kann. Wie muss demnach die Schleife aussehen?

LG Muse


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

22. Mai 2003, 14:56
Beitrag # 4 von 28
Beitrag ID: #36434
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
wie sehen denn Deine Daten aus?
poste bitte nicht alle, sondern nur ein paar Zeilen als Beispiel.



als Antwort auf: [#36418]

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

22. Mai 2003, 15:15
Beitrag # 5 von 28
Beitrag ID: #36437
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Die Werte sehen in eine CSV-Datei z.B. so aus:

10;100
11;92
12;200


Links soll die Zeit darstellen und rechts ist die Position. Diese Werte will ich jetzt in Abhängigkeit im diagramm darstellen lassen.

Hoffe du kannst mir weiterhelfen.

LG Muse


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

22. Mai 2003, 15:38
Beitrag # 6 von 28
Beitrag ID: #36439
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
probier mal das:
----------------------------
#!/usr/bin/perl
use strict;
use GD;
use Chart::bars;
my($obj);

$obj = Chart::Bars->new (600,400);
$obj->set ('title' => 'Foo Bar');
$obj->add_pt ('foo', 100, 100);
$obj->add_pt ('bar', 150, 150);
$obj->add_dataset ('foo', 'bar');
open(DAT,"<tabelle.csv");
while(<DAT>){
chomp;
my @zeile = split(/;/,$_);
my $spalte1 = $zeile[0];
my $spalte2 = $zeile[1];
$obj->add_dataset ($spalte1, $spalte2);
}
close(DAT);

$obj->cgi_png ();

$obj->png ("foo2.png");
-----------------------
Grüße Oesi


als Antwort auf: [#36418]
(Dieser Beitrag wurde von oesi50 am 22. Mai 2003, 15:39 geändert)

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

22. Mai 2003, 15:55
Beitrag # 7 von 28
Beitrag ID: #36441
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
ich habe es ausprobiert, aber es hat auch nicht geklappt.
Ich habe zwar einen Graphen gesehen, aber leider nur mit den Werten, die du durch diese zeilen erstellt hast:

$obj->add_pt ('foo', 100, 100);
$obj->add_pt ('bar', 150, 150);

Das wollte ich ja gerade nicht. Es soll nur ein Graph erstellt werden mit den Werten aus der CSV-Tabelle.
Hier nochmal eine Version mit deinen Ideen, was leider auch nicht klappt:

#!/usr/bin/perl

print "Content-type: text/html\n\n";
use Chart::Lines;

$chart=new Chart::Lines 300,200;

%attr=(
"title"=>"Position",
"grid_lines"=>1,
"transparent"=>1,
);

$chart->set(%attr);

open(DAT,"C:\\Beispiel.csv");
while(<DAT>){
chomp;
my @zeile = split(/;/,$_);
my $spalte1 = $zeile[0];
my $spalte2 = $zeile[1];
$obj->add_dataset ($spalte1, $spalte2);
}
close(DAT);
binmode STDOUT;
print $obj->png;

$chart->png ("Juhu.png");

Hast du vielleicht noch eine Idee, wie man das machen könnte?

LG Muse


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

22. Mai 2003, 16:26
Beitrag # 8 von 28
Beitrag ID: #36449
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
dann versuche mal diese Variante:
--------------------------------
#!/usr/bin/perl
use strict;
use GD;
use Chart::bars;

my $obj = Chart::Bars->new;
$obj->set ('title' => 'Foo Bar');
my(@daten);
open(DAT,"<tabelle.csv");
while(<DAT>){
chomp;
my ($sp1,$sp2) = split(/;/,$_);
push @{$daten[0]}, $sp1;
push @{$daten[1]}, $sp2;
}
close(DAT);

$obj->png ("foo2.png", \@daten);
---------------------------------------


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

22. Mai 2003, 16:51
Beitrag # 9 von 28
Beitrag ID: #36459
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
achso,
Du musst natürlich
"<tabelle.csv"
durch
"<C:\\Beispiel.csv"
ersetzen, sonst wird das nix
Grüße Oesi


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

23. Mai 2003, 09:46
Beitrag # 10 von 28
Beitrag ID: #36559
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für die Hilfe.

Jetzt wird zumindest eine Bilddatei erzeugt. Jedoch sehe ich das Bild nicht im Browser, wenn ich das Programm über den Webserver aufrufe.
Woran kann das denn liegen?
Wie kann ich das Programm gestalten, wenn ich mehrere Zahlen auslesen will und nicht nur zwei Spalten.

Hoffe du kannst mir helfen.

LG Michèle


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

23. Mai 2003, 09:53
Beitrag # 11 von 28
Beitrag ID: #36564
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,
> Woran kann das denn liegen?
ersetze:
$obj->png ("foo2.png", \@daten);
durch:
$obj->cgi_png (\@daten);
und schon gehts im Browser.

>Wie kann ich das Programm gestalten, wenn ich mehrere Zahlen auslesen will und nicht nur zwei Spalten.

Welche Koordinaten außer x/y willst Du denn dann noch darstellen ?

Grüße Oesi


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

23. Mai 2003, 11:28
Beitrag # 12 von 28
Beitrag ID: #36590
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke die Darstellung im Browser hat geklappt.

Ich will aber nicht nur drei Balken darstellen, sondern auch mal mehrere.
Ich kann doch nicht die ganze Zeit auf den Index zugreifen und dann ausgeben, das wird bei 20 Werten aber eine ganz schöne Tipparbeit, wie kann ich die Schleife gestalten?

Bsp.:

for $i(0..$#daten){

push @{$daten[$i]}, $sp[$i+1];
push @{$daten[$i+1]}, $sp[$i+1];}

:-) oder so ähnlich!!!

Meinst du vielleicht es wäre sinnvoller wenn ich anstatt des Chart-Moduls das GDGraph-Modul verwende?

LG Muse


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

23. Mai 2003, 11:34
Beitrag # 13 von 28
Beitrag ID: #36595
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi,
Du willst mich wohl jetzt veralbern :-)

Wozu soll denn die .csv Datei da sein?
Grüße Oesi


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

Anonym
Beiträge gesamt: 22827

23. Mai 2003, 12:40
Beitrag # 14 von 28
Beitrag ID: #36611
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Sorry,

das Problem habe ich selbst behoben. Das war eine blöde Frage.
$sp1 und $sp2 steht ja nur für x und y-Achse.

Und wenn ich mehr Daten in die csv-Datei einlese, dann werden die ja durch die Schleife ausgelesen.
Was ist aber, wenn in der Datei ganz viele verschiedene Werte stehen, ich aber nur bestimmte zur Auswertung benötige?!

Wie kann ich dann auf diese zugreifen?

Nochmal zu meiner Frage, findest du es sinnvoller mit GD::Graph zu arbeiten statt mit Chart?

Ich muss nämlich eine Projektarbeit verfassen und bin mir noch nicht sicher.

LG Muse


als Antwort auf: [#36418]

Auslesen von Werten für Grafik

oesi50
  
Beiträge gesamt: 2315

23. Mai 2003, 13:15
Beitrag # 15 von 28
Beitrag ID: #36618
Bewertung:
(8340 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi,
da ich die konkrete Aufgabenstellung nicht kenne, kann ich Dir weder zu- noch abraten.
Grüße Oesi
eine Auswahl an Modulen gibt es hier:
http://cpan.org/...html#ID18_Images_Pix


als Antwort auf: [#36418]
X