hilfdirselbst.ch
Facebook Twitter gamper-media

"Geht nicht" ist keine gültige Fehlermeldung!

« « 1 2 » »  
Anonym
Beiträge: 22827
6. Jun 2003, 09:33
Beitrag #1 von 22
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Hallo,
ich brauch dringend Hilfe.
Ich möchte einen Graphen erstellen, was auch soweit klappt. Jedoch möchte ich die Werte für die y-Achse nicht aus der Datenbank auslesen, sondern berechnen lassen. Sie sollen in Prozent berechnet werden. Bis jetzt habe ich eine unnötig lange Schleife, die aber nicht funktioniert.

<code>
while(<DAT>){ if ($. == 1) {
($xtitle, $ytitle) = (split /;/)[1,0];
chomp($xtitle);
}

else{
chomp;
(@spalte) = split(/;/,$_);

if($spalte[1]<30&&$spalte[1]>=0)
{$spalte[1]='NNO';
$counter=$counter+1;}
elsif($spalte[1]<60&&$spalte[1]>=30) { $spalte[1]='NO';
$counter=$counter+1;}
elsif($spalte[1]<90&&$spalte[1]>=60) {
$spalte[1]='NOO';
$counter=$counter+1;
} elsif($spalte[1] <120&&$spalte[1]>=90) {
$spalte[1]='SOO';
$counter=$counter+1;}
elsif($spalte[1] <150&&$spalte[1]>=120) {
$spalte[1]='SO';
$counter=$counter+1;
} elsif($spalte[1] <180&&$spalte[1]>=150) {
$spalte[1]='SSO';
$counter=$counter+1;}
elsif($spalte[1] <210&&$spalte[1]>=180) {
$spalte[1]='SSW';
$counter=$counter+1;
} elsif($spalte[1] <240&&$spalte[1]>=210) {
$spalte[1]='SW';
$counter=$counter+1;}
elsif($spalte[1] <270&&$spalte[1]>=240) {
$spalte[1]='SWW';
$counter=$counter+1;
} elsif($spalte[1] <300&&$spalte[1]>=270) {
$spalte[1]='NWW';
$counter=$counter+1;}
elsif($spalte[1] <330&&$spalte[1]>=300) {
$spalte[1]='NW';
$counter=$counter+1;
} else{
$spalte[1]='NNW';
$counter=$counter+1;}
$gesamt=$gesamt+1;
}
my $wert=($counter/$gesamt)*100;

$hdaten{$spalte[1]}=$spalte[0]=$wert; Top
 
X
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 10:24
Beitrag #2 von 22
Beitrag ID: #38490
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


hi,
hast Du schon mal dein Programm im Debug-Modus untersucht?

perl -d deinprogramm.pl

Grüße Oesi
PS.: Melde Dich doch mal im Forum an (Anonym ist so unpersönlich).
als Antwort auf: [#38480] Top
 
Anonym
Beiträge: 22827
6. Jun 2003, 10:47
Beitrag #3 von 22
Beitrag ID: #38499
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Das habe ich noch nicht probiert.
Das muss ich doch in der Eingabeaufforderung tun. Das habe ich gerade versucht, aber dann kommt die Fehlermeldung:
"No such directory or file"

Aber hast du denn verstanden, was die Schleife machen soll?
Ich will, das in der Schleife geguckt wird, ob der Wert aus der Datenbank in dem Bereich liegt, wenn ja soll der counter hochgezählt werden. Zum Schluss soll die gesamte Anzahl berechnet werden. Aus diesen beiden Werten soll dann der prozentuale Wert berechnet werden und in der y-Achse ausgegeben werden.
Jedoch wird dann gar nichts im Browser angezeigt. habe auch über Data::Dumper untersucht, was in den Variablen drin steht, aber das stimmt schon nicht. Weiß aber nicht, wie ich die Schleife anders gestalten kann.
Hast du ne Idee?

LG Muse
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 10:51
Beitrag #4 von 22
Beitrag ID: #38501
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Habe mich jetzt auch angemeldet.

LG Muse
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 11:20
Beitrag #5 von 22
Beitrag ID: #38511
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


hi Muse,
kann es sein,das Du als Ergebnis immer 100 erhälst?

Grüße Oesi
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 11:28
Beitrag #6 von 22
Beitrag ID: #38514
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Hi Oesi,

nein, wenn ich das programm so laufen lasse, wie ich es dir geschickt habe, klappt es gar nicht.
Habe aber mal statt $wert als y-Werte einfach nur $gesamt angegeben.
Dann sollte eigentlich für jeden Wert der x-Achse der gleiche y-Wert angezeigt werden, da die Gesamtanzahl doch gleich ist.

Irgendwas haut bei der Schleife nicht hin, weiß aber leider nicht, wie ich sie anders machen soll.

LG muse
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 11:36
Beitrag #7 von 22
Beitrag ID: #38516
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


hi Muse,
mit 'klappt nicht' kann ich leider nichts anfangen.
Was gibst Du an Datein rein, was kommt an Daten raus, was steht wann in welchen Arrays?

Grüße Oesi
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 11:49
Beitrag #8 von 22
Beitrag ID: #38521
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Ich hab doch was gefunden:
gestalte mal den Anfang so hier:
while(<DAT>){
chomp;
if ($. == 1) {
($ytitle, $xtitle) = (split /;/);
next;
} else{
(@spalte) = split(/;/,$_);

if($spalte[1]<30&&$spalte[1]>=0) {


Grüße Oesi
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 11:52
Beitrag #9 von 22
Beitrag ID: #38524
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


'Klappt nicht' heißt, dass im Browser leider gar nichts angezeigt wird.

Als Input aus der Datenbank gebe ich die Werte: 30,60,90,120,150,180,210,240,270,300,330 mit.
Dann werden doch die Bereich definiert. Es soll dann gesehen werden, in welchen Bereichen diese Werte liegen. Der erste wert liegt z.b. in dem Bereich NO und der zweite in NOO usw.
Wenn man dem Wert einen Bereich zugeordnet hat, soll der counter hochgezählt werden und am Ende soll die Gesamtzahl berechnet werden.
Dann soll der counter zur Gesamtzahl ins Verhältnis gebracht werden und in Prozent auf der y-Achse dargestellt werden.

ich habe über Data::dumper mal versucht herauszufinden, was in $gesamt und in $counter steht, und zwar in dem Zeitpunkt, wo ich die Berechnung durchführen lassen möchte.
In $gesamt steht folgendes: Var1=\0, Var1=\'1', Var1=\'2'...Var1=\'11'

Und in counter steht genau dasselbe.
Normalerweise sollte in counter immer nur 1 stehen, weil jedem Bereich ein Wert zugeordnet wurde und in gesamt sollte 11 stehen, weil es 11 Werte sind. Also scheint die Schleife völlig falsch zu sein, aber leider weiß ich nicht was.

Hoffe ich konnte dir etwas weiterhelfen. Es ist schwierig zu erklären.

LG Muse
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 11:58
Beitrag #10 von 22
Beitrag ID: #38527
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Hallo Oesi,

habe deinen Vorschlag mit next versucht, aber das klappt leider auch nicht. Ich brauche das "(split /;/[1,0]);", damit ich dem Programm mitteilen kann, welche Spalten ich aus der Datenbank auswähle, um den Titel darstellen zu können.

LG muse
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 12:05
Beitrag #11 von 22
Beitrag ID: #38528
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


es geht nicht nur um next!
Bitte verwende das komplett so!
Grüße Oesi
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 12:12
Beitrag #12 von 22
Beitrag ID: #38531
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Das habe ich jetzt auch gemacht, aber die Ausgabe ist unverändert.
Ich versuche jetzt erstmal für die y-werte $gesamt einzusetzen, um zu prüfen, ob diese Werte stimmen, aber die Ausgabe mit deinem veränderten Code ist genauso wie meine.

LG Muse
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 12:38
Beitrag #13 von 22
Beitrag ID: #38535
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


hi,
so wie Dein Programm aufgebaut ist, sieht die DB-Datei so aus:

Y-Titel;X-Titel
;30
;60
;180
;30
.
.
.
habe ich das jetzt richtig verstanden, Du willst nur das Vorkommen der einzelnen Himmelsrichtungen zählen?

Grüße Oesi
als Antwort auf: [#38480] Top
 
Muse
Beiträge: 13
6. Jun 2003, 13:43
Beitrag #14 von 22
Beitrag ID: #38561
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


Genau so, die Dateien sind als csv-Dateien abgelegt.
Es können natürlich auch andere Werte drin stehen, wie :
;50
;60
;95
oder so.
Es sind in der Datei 2 Spalten vorhanden. Ich will jedoch nur die zweite Spalte mit den Windrichtungen benutzen, deshalb $spalte[1].

Dann will ich einfach sehen, in welchem Bereich liegen diese Werte und dann die Bezeichnung zuordnen.
Zum Schluss will ich wissen, wieviele Werte in diesem Bereich liegen. In meinem Anfangsbespiel jeweils einmal.
Die Gesamtanzahl soll auch berechnet werden.

Und dann den prozentualen Anteil am Gesamtwert als y-Werte darstellen.

Hoffe es ist jetzt klar geworden, was ich meine.

LG
Muse
als Antwort auf: [#38480] Top
 
oesi50  A  S
Beiträge: 2315
6. Jun 2003, 15:12
Beitrag #15 von 22
Beitrag ID: #38590
Bewertung:
(3715 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Schleife funktioniert nicht


hi Muse,

hier mal ein kleiner Codeschnipsel, der das realisiert, wovon ich glaube, das es so sein soll
#!/usr/bin/perl
my %hiri = ( # hier folgen jetzt die Himmelsrichtungen
'0' => 'N',
'90' => 'O',
'180' =>'S',
'270' => 'W'
);
open(DAT,"<daten.txt"); # Datendatei öffnen
my $gesamt=0;
while(<DAT>){
chomp;
if ($. == 1) {
($ytitle, $xtitle) = (split /;/);
next;
} else{
(@spalten) = split(/;/);
$hdaten{$spalten[1]}++;
$gesamt++;
}
}
close(DAT);

if ($gesamt>0) {# Division durch Null vermeiden
for (sort { $a <=> $b } keys %hdaten ){
push @{$daten[0]}, $hiri{$_};
push @{$daten[1]}, $hdaten{$_} *100/ $gesamt ;
}
}
# in @daten[0] sind jetzt die Werte der x Achse
# in @daten[1] sind jetzt die Werte der y Achse


Grüße Oesi
als Antwort auf: [#38480] Top
 
« « 1 2 » »  
X