hilfdirselbst.ch
Facebook Twitter gamper-media

"Geht nicht" ist keine gültige Fehlermeldung!

« « 1 2 » »  
Anonym
Beiträge: 22827
22. Mai 2003, 13:55
Beitrag #1 von 28
Bewertung:
(5843 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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 Top
 
X
oesi50  A  S
Beiträge: 2315
22. Mai 2003, 14:20
Beitrag #2 von 28
Beitrag ID: #36426
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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)
Top
 
Anonym
Beiträge: 22827
22. Mai 2003, 14:43
Beitrag #3 von 28
Beitrag ID: #36431
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
22. Mai 2003, 14:56
Beitrag #4 von 28
Beitrag ID: #36434
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


wie sehen denn Deine Daten aus?
poste bitte nicht alle, sondern nur ein paar Zeilen als Beispiel.

als Antwort auf: [#36418] Top
 
Anonym
Beiträge: 22827
22. Mai 2003, 15:15
Beitrag #5 von 28
Beitrag ID: #36437
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
22. Mai 2003, 15:38
Beitrag #6 von 28
Beitrag ID: #36439
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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)
Top
 
Anonym
Beiträge: 22827
22. Mai 2003, 15:55
Beitrag #7 von 28
Beitrag ID: #36441
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
Anonym
Beiträge: 22827
22. Mai 2003, 16:26
Beitrag #8 von 28
Beitrag ID: #36449
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
22. Mai 2003, 16:51
Beitrag #9 von 28
Beitrag ID: #36459
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


achso,
Du musst natürlich
"<tabelle.csv"
durch
"<C:\\Beispiel.csv"
ersetzen, sonst wird das nix
Grüße Oesi
als Antwort auf: [#36418] Top
 
Anonym
Beiträge: 22827
23. Mai 2003, 09:46
Beitrag #10 von 28
Beitrag ID: #36559
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
23. Mai 2003, 09:53
Beitrag #11 von 28
Beitrag ID: #36564
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
Anonym
Beiträge: 22827
23. Mai 2003, 11:28
Beitrag #12 von 28
Beitrag ID: #36590
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
23. Mai 2003, 11:34
Beitrag #13 von 28
Beitrag ID: #36595
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


Hi,
Du willst mich wohl jetzt veralbern :-)

Wozu soll denn die .csv Datei da sein?
Grüße Oesi
als Antwort auf: [#36418] Top
 
Anonym
Beiträge: 22827
23. Mai 2003, 12:40
Beitrag #14 von 28
Beitrag ID: #36611
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
oesi50  A  S
Beiträge: 2315
23. Mai 2003, 13:15
Beitrag #15 von 28
Beitrag ID: #36618
Bewertung:
(5840 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Auslesen von Werten für Grafik


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] Top
 
« « 1 2 » »  
X