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

Problem bei einer Übung: Übung aus einem Buch



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
pl
 2007-06-05 01:24
#77232 #77232
User since
2007-06-05
26 Artikel
BenutzerIn
[default_avatar]
Hallo ich bin totaler Newbie und Perl ist meine erste Programmier-sprache, die ich lerne. Außerdem bin ich erst 15 Jahre alt.

Und nun meine Frage, in meinem Buch für den Einstieg in Perl steht folgende Übung:

Schreiben Sie ein Programm, das jede Eingabezeile ausgibt, in der fred orkommt. (Andere Eingabezeilen sollen nicht behandelt werden.) Findet das Muster auch Fred, frederick oder Alfred? Erstellen sie eine kleine Testdatei, in der " fred feuerstein" und seine Freund vorkommen. Benutzen Sie diese Datei als Eingabe für dieses Programm.

Die Lösung sieht folgendermaßen aus:
Code: (dl )
1
2
3
4
5
while (<>) {
if (/fred/) {
print;
}
}


Kann mir nun vielleicht jemand erklären warum man hier "while" benutzt? While wiederholt die Schleife doch so oft bis sie wahr ist. Ich seh hier einfach keinen Zusammenhang! :(

Danke im Vorraus
Gruß Jakob
sid burn
 2007-06-05 02:06
#77233 #77233
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=pl,04.June.2007, 23:24]Die Lösung sieht folgendermaßen aus:
Code: (dl )
1
2
3
4
5
while (<>) {
if (/fred/) {
print;
}
}


Kann mir nun vielleicht jemand erklären warum man hier "while" benutzt? While wiederholt die Schleife doch so oft bis sie wahr ist. Ich seh hier einfach keinen Zusammenhang! :(

Danke im Vorraus
Gruß Jakob[/quote]
Nein,
while wiederholt die Schleife solange wie der Ausdruck war ist. Solange bis der Ausdruck war ist, ist die until schleife.

Ansonsten wo steckt den dein genaues Problem?

Code: (dl )
while( <> )

Geht entweder jede Zeile aus den angegeben Dateien in @ARGV durch, oder STDIN. Die aktuelle Zeile wird in $_ gespeichert.

Code: (dl )
if (/fred/)

Die Regex in der if bedingung schaut ob 'fred' in $_ vorkommt, wenn ja ist die if Bedingung erfüllt und es wird:

Code: (dl )
print;

ausgeführt. Ohne Argument gibt es $_ aus, also unsere aktuelle Zeile.


while wird solange ausgeführt wie wir noch neue Zeilen bekommen. Also alle Zeilen werden durchgearbeitet. Wenn alle zeilen abgearbeitet wurde kommt ein 'undef' und die while Schleife ist abgebrochen.

Ansonsten würde ich das Beispiel im neuen Perl etwas anders schreiben:

Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl
use strict;
use warnings;

while ( my $line = <> ) {
if ( $line =~ m/fred/ ) {
print $line;
}
}


Aber eigentlich würde ich anstatt der Regex sogar lieber ein "index" in diesem Fall nehmen. Ist Perfomanter. Soll Groß kleinschreibung egal sein, dann vorher den String mit lc klein machen und dann index nutzen.\n\n

<!--EDIT|sid burn|1180994915-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Strat
 2007-06-05 02:11
#77234 #77234
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
kennst du meine Einfuehrung in Perl unter http://www.fabiani.net/ -> Vortraege? Da steht sehr ausfuehrlich drinnen, warum while und nicht foreach

/fred/ findet nur fred in genau dieser Schreibweise (auch Alfred oder frederick), nicht aber Fred, FRED oder Frederik.

Wenn du nur genau fred als wort finden willst, nicht aber Alfred, dann hilft /\bfred\b/ , siehe das Kapitel Regulaere Ausdruecke in meiner Einfuehrung.


/fred/i findet Fred, AlFred, FRED, ...

sid burn hat noch mehr gute sachen geschrieben\n\n

<!--EDIT|Strat|1180995175-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pl
 2007-06-05 12:50
#77235 #77235
User since
2007-06-05
26 Artikel
BenutzerIn
[default_avatar]
Hey danke für die Antworten:)

"while wird solange ausgeführt wie wir noch neue Zeilen bekommen. Also alle Zeilen werden durchgearbeitet. Wenn alle zeilen abgearbeitet wurde kommt ein 'undef' und die while Schleife ist abgebrochen." => das hat mir geholfen, danke!

Was Regex ist weiß ich allerdings nicht.

In den Vorträgen find ich mich nicht so gut zurecht, kannst du mri vielleicht den genauen Link geben?
renee
 2007-06-05 13:03
#77236 #77236
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
RegEx sind Reguläre Ausdrücke. Hier mal ein paar Links zu Einführungen:

*) http://www.tekromancer.com/perl2/7.html
*) http://www.regenechsen.de/phpwcms/index.php?regex_allg
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/
renee
 2007-06-05 13:04
#77237 #77237
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Link zu "Einführung in Perl" von Strat: http://fabiani.net/talks/strat_perl_intro_v0.07.pdf
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/
MisterL
 2007-06-05 13:29
#77238 #77238
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Aus reiner Neugierde: wie heisst das Buch zum Üben ?
An die RegEx sollte man sich erst richtig heranmachen, wenn die Perl Basis solide ist ;-)

Gruss MisterL
“Perl is the only language that looks the same before and after RSA encryption.”
renee
 2007-06-05 13:48
#77239 #77239
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Naja, die Grundlagen von RegEx sind Sprachenübergreifend und hat erstmal nichts mit einer Sprache an sich zu tun. RegEx ist ein allgemeines Thema bei Computern...
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/
sid burn
 2007-06-05 13:57
#77240 #77240
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=MisterL,05.June.2007, 11:29]Aus reiner Neugierde: wie heisst das Buch zum Üben ?
An die RegEx sollte man sich erst richtig heranmachen, wenn die Perl Basis solide ist ;-)

Gruss MisterL[/quote]
Also die Übung kommt mir noch sehr bekannt vor.

Das ist das Buch "Einführung in Perl". Allerdiengs gibt es in dem Buch 3 Kapitel zu Regulären Ausrrücken. ...
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
MisterL
 2007-06-05 14:09
#77241 #77241
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Quote
Das ist das Buch "Einführung in Perl"

Kenne ich vom Inhalt her (noch) nicht. Man hat halt andere Prioritäten ;-)
Und RegEx sind in (hoffentlich) allen Sprachen vorzufinden. Aber Perl ist für die Datenmanipulation doch direkt prädestiniert, von daher die explizite Erwähnung.
“Perl is the only language that looks the same before and after RSA encryption.”
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2007-06-05 01:24.