[GastForen Archiv Perl und CGI Schleife funktioniert nicht

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

Schleife funktioniert nicht

Anonym
Beiträge gesamt: 22827

6. Jun 2003, 09:33
Beitrag # 1 von 22
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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;
X

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 10:24
Beitrag # 2 von 22
Beitrag ID: #38490
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

Anonym
Beiträge gesamt: 22827

6. Jun 2003, 10:47
Beitrag # 3 von 22
Beitrag ID: #38499
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 10:51
Beitrag # 4 von 22
Beitrag ID: #38501
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe mich jetzt auch angemeldet.

LG Muse


als Antwort auf: [#38480]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 11:20
Beitrag # 5 von 22
Beitrag ID: #38511
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hi Muse,
kann es sein,das Du als Ergebnis immer 100 erhälst?

Grüße Oesi


als Antwort auf: [#38480]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 11:28
Beitrag # 6 von 22
Beitrag ID: #38514
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 11:36
Beitrag # 7 von 22
Beitrag ID: #38516
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 11:49
Beitrag # 8 von 22
Beitrag ID: #38521
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 11:52
Beitrag # 9 von 22
Beitrag ID: #38524
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
'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]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 11:58
Beitrag # 10 von 22
Beitrag ID: #38527
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 12:05
Beitrag # 11 von 22
Beitrag ID: #38528
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
es geht nicht nur um next!
Bitte verwende das komplett so!
Grüße Oesi


als Antwort auf: [#38480]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 12:12
Beitrag # 12 von 22
Beitrag ID: #38531
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 12:38
Beitrag # 13 von 22
Beitrag ID: #38535
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

Muse
Beiträge gesamt: 13

6. Jun 2003, 13:43
Beitrag # 14 von 22
Beitrag ID: #38561
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]

Schleife funktioniert nicht

oesi50
  
Beiträge gesamt: 2315

6. Jun 2003, 15:12
Beitrag # 15 von 22
Beitrag ID: #38590
Bewertung:
(4613 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
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]
X

Aktuell

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/

Veranstaltungen
01.03.2023 - 09.03.2023

Online
Mittwoch, 01. März 2023, 00.00 Uhr - Donnerstag, 09. März 2023, 00.00 Uhr

Online Webinar

Wie gehen wir mit diesen Veränderungen um? Was ist notwendig, damit wir die Digitalisierung im Unternehmen klappt? Veränderungsprozesse verstehen und entsprechend handeln Mitarbeiter als Botschafter Webseite mit WordPress erstellen SEA /SEO (Ads aufschalten)

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: B. Isik, E-Mailinfo AT snfa DOT ch

https://www.fernstudiumfitness.ch/digitalisierung-schweiz/