perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 19
Click for quality!




12.02.2012 / 03:43

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragwhile???
Seitenanfang
Hallo
erstmal zum Sachverhalt. Ich hab eine Quelle.dat in folgendem Format
KN P 5612|rot|Opel|Hans Spiddel|
FN KT 2|gruen|VW|Michael Kohlhaas|
VS RT 926|rot|Opel|Peter Pan|

jetzt will ich das Kennzeichen eingeben und perl soll mir alle daten einer zeile angeben und die andern nicht.
ich dachte ich löse das mal auf die nachfolgende art. leider klappt es nicht. kann mir einer von euch weiterhelfen ich komme einfach nicht weiter.

Mal als ganzes Beispiel ich geb den wert ein "rot"
dann soll dieses ergebnis rauskommen

"KN P 5612 Hans Spiddel Opel rot
VS RT 926 Peter Pan Opel rot"

was heißt ist der wert in mehr als einer zeile sollen alle möglichen ergebnise gezeigt werden mit allen daten.

#!/usr/bin/perl

$wert= <STDIN>;

$gefunden = 0;

open(LESEN,"<Quelle.dat") or scripterror("Fehler: Kann Quelle.dat nicht oeffnen!",$!);
while ($linie = <LESEN>) {
chomp($linie);

($Kennzeichen,$Farbe,$Marke,$Halter) = split(/|/, $linie);

if ($wert eq $Kennzeichen or $Farbe or $Marke or $Halter ) {

$gefunden = 1;
last;
}
}
close(LESEN);

if (!$gefunden) {
print "Nicht gefunden!!!";
exit;
} else {
print "$Kennzeichen\n";
print "$Halter\n";
print "$Marke\n";
print "$Farbe\n";
}

Datum: 29.04.2008-16:36

Beitragre: while???
Seitenanfang
Schaust Du hier: http://board.perl-community.de/thread/11720/

Datum: 29.04.2008-18:20

Beitragre: while???
Seitenanfang
($Kennzeichen,$Farbe,$Marke,$Halter) = split(/|/, $linie);

if ($wert eq $Kennzeichen or $Farbe or $Marke or $Halter ) {

=========================
Zwei Dinge:
beim split /\|/ anstelle von /|/ ( | hat Sonderbedeutung !)

beim if : $wert eq $kennzeichen or $wert eq $Farbe or ...

Datum: 30.04.2008-18:08

Beitragre: while???
Seitenanfang
und noch ein kleiner Fehler:

auch die eingangsvariable $wert mit chomp vom "\n" befreien ...

=====================================
#!/usr/bin/perl

$wert= <STDIN>;

chomp $wert;

$gefunden = 0;

#open(LESEN,"<Quelle.dat") or scripterror("Fehler: Kann Quelle.dat nicht oeffnen!",$!);
#while ($linie = <LESEN>) {

# Wert aus Array -> wie im File ...

foreach $linie (
"KN P 5612|rot|Opel|Hans Spiddel|"
,"FN KT 2|gruen|VW|Michael Kohlhaas|"
,"VS RT 926|rot|Opel|Peter Pan|" ) {

# chomp($linie);

($Kennzeichen,$Farbe,$Marke,$Halter) = split(/\|/, $linie);

# zur besseren Lesbarkeit mit klammern
if (($wert eq $Kennzeichen) or ($wert eq $Farbe) or ($wert eq $Marke) or ($wert eq $Halter) ) {

$gefunden = 1;
last;
}
}
# close(LESEN);

if (!$gefunden) {
print "Nicht gefunden!!!";
exit;
} else {
print "$Kennzeichen->";
print "$Halter->";
print "$Marke->";
print "$Farbe\n";
}

Datum: 30.04.2008-19:05

Beitragre: while???
Seitenanfang
Hallo,
Das ist unsere Antwort:
Wir hoffen,das ist das, was Du möchtest
Viele Grüße

#!/usr/bin/perl

$wert = "";
print 'Suchwert eingeben: ';
chomp($wert = <STDIN>);

@a = ();
@b = ();
$gefunden = 0;

open(LESEN,"<Quelle.dat") or scripterror("Fehler: Kann Quelle.dat nicht oeffnen!",$!);
while ($linie = <LESEN>)
{
chomp($linie);

@a = split(/\|/,$linie);

if (($wert eq $a[0]) or ($wert eq $a[1]) or ($wert eq $a[2]) or ($wert eq $a[3]))
{
@b = (@b , $linie);
$gefunden = 1;
next;
}
}
close(LESEN);

if (!$gefunden) {
print "Nicht gefunden!!!";
exit;
} else {

$i = 0;
while ($i <= $#b)
{print $b[$i++], "\n";}
}

Datum: 06.05.2008-14:28

Beitragre: while???
Seitenanfang
Dazu ein paar Anmerkungen:

* Man sollte immer use strict; und use warnings; verwenden. Siehe auch http://wiki.perl-community.de/bin/view/Wissensbasis/UseStrict
* Es wurde keine Subroutine "scripterror" definiert
* Statt "@b = (@b , $linie);" einfach "push @b, $linie;" schreiben
* Statt

$i = 0;
while ($i <= $#b)
{print $b[$i++], "\n";}

einfach

print $_,"\n" for @b

* Das explizite "exit" ist hier nicht notwendig, da das Programm sowieso fertig ist, nachdem der Satz ausgegeben wurde
* Das explizite "next" ist nicht unbedingt notwendig, da nach dem "next" ja kein Code mehr kommt, der innerhalb der Schleife ist.

Datum: 07.05.2008-11:50

-






-
-