Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7259[/thread]

Programmierproblem: while Schleife

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2005-09-07 12:51
#57718 #57718
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
print "Viewer\n\n";
print "Bitte Pfad zur Datei eingeben: ";
$eingabe =<STDIN>;
chomp($eingabe);
if($eingabe eq ""){
$eingabe="/home/gerhard/xml.ome";
}
my ($a,$reihe)=0,"";

#Öffnen der Datei
open(Datei,$eingabe) or die "Datei konnte nicht gefunden werden nicht gefunden Default wird verwendet";


while($zeile=<Datei> && $a==0){

if($zeile=~/</g || $zeile=~/<\//g){
$zeile =~ s/</\n</g;
$zeile =~ s/<\//\n\n<\//g;
}

$reihe = $reihe.$zeile;
}

print "$reihe\n\n\n";



Hallo zusammen,
habe folgendes Problem bei diesem Programm. Und zwar in der While Schleife while($zeile=<Datei> && $a==0). $a wird vorher der Wert null zugewiesen. Entfernen ich $a aus der while läuft das Programm. Mit $a eben nicht. Eigentlich hat $a momentan keine Funktion in dem Programm.

Edit @Relais: Code-Tags spendiert\n\n

<!--EDIT|Relais|1126086134-->
Relais
 2005-09-07 13:47
#57719 #57719
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Guest,07.09.2005, 10:51]Mit $a eben nicht. Eigentlich hat $a momentan keine Funktion in dem Programm.[/quote]
Ich würde sagen, das ist ganz einfach, laß das $a einfach weg.

Daß es nicht funktioniert, liegt daran, daß der &&-Operator stärkere Priorität hat als der ==-Operator.

Edit: Du kannst entweder die beiden Ausdrücke rechts und links vom &&-Operator in Klammern setzen, das würde ich aber nicht unbedingt empfehlen, oder aber den &&-Operator mit dem and-Operator austauschen.

Da $a auf "0" gesetzt wurde ergibt die Prüfung auf && $a FLASCH und die While-Schleife wird beendet.

Ein weiterer Tipp: $a und $b sind in Perl globale Variablen. Verwende welche mit sprechenden Namen stattdessen. Und wenn sie auch nur $test_schalter oder so etwa heißen.\n\n

<!--EDIT|Relais|1126086854-->
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
trappatonie
 2005-09-07 13:58
#57720 #57720
User since
2005-09-07
1 Artikel
BenutzerIn
[default_avatar]
Ja danke erstmal für die schnelle Antwort.
Kurz zur Erklärung. Der Code war eigentlich länger und das $a sollte zusätzlich dazu dienen die SChleife abzubrechen. Im geposteten Code ist $a natürlich nicht notwendig. Ich habe nur den Code soweit verkürzt bis ich bemerkte das der Fehler auftritt wenn der $a vergleich in der while Schleife steht
renee
 2005-09-07 14:12
#57721 #57721
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
while($zeile=<Datei> && ($a==0)){


sollte helfen...
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/
pq
 2005-09-08 03:23
#57722 #57722
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Guest,07.09.2005, 10:51]
Code: (dl )
my ($a,$reihe)=0,"";
[/quote]
hättest du warnings benutzt (info Wiki:hier), wüsstest du, dass das nicht tut, was du willst.
$reihe ist danach undef.
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
sri
 2005-09-08 04:45
#57723 #57723
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Oh, ein Programmierproblem, das haette ich hier jetzt nich erwartet...
Strat
 2005-09-08 14:59
#57724 #57724
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
nebenbei: eine while- oder foreach-schleife kann man auch mit dem kommando "last" abbrechen... siehe perldoc -f last
Code: (dl )
1
2
3
4
5
6
7
while (1) {
 my $input = <FH> or last;
 # ....
 last if ($irgendwas eq $sonstwas);
 # ...

} # while

oder besser:
Code: (dl )
1
2
while (not eof(FH)) {
# ...
\n\n

<!--EDIT|Strat|1126177206-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
<< >> 7 Einträge, 1 Seite



View all threads created 2005-09-07 12:51.