attheo Geschrieben 17. April 2002 Geschrieben 17. April 2002 hi leute, ich habe ein perl-skript, dass ne text datei ausliest und die daten, die hinter dem ": " stehen in die jeweilige variablen schreibt, so sollte "$seite=1" sein. Ist es aber nicht, sondern "1 ", also mit nem leerzeichen dahinter. Also hab ich "$seite=~s/ //g if($seite=~/ /);" in die nächste zeile geschrieben.. dies ändert jedoch auch nichts.. wisst ihr wo das problem liegt?? kann es sein, dass das return in der textdatei mit ausgelesen wird? das probier ich gleich nochmal aus.. wenn das nicht geht, weiß ich nicht mehr weiter.. gruß attheo p.s. Inhalt der text datei: seite: 1 titel: Meine_Seite Zitieren
dr.disk Geschrieben 17. April 2002 Geschrieben 17. April 2002 $seite=~s/ //g if($seite=~/ /); Dann zerpflücken wir das Ding mal: In allen Zeilen in denen ein Leerzeichen vorkommt werden Sie entfernt. Was Du wolltest ist aber wohl: open FH, "< datei"; while <FH> { print "$1\n" if m/: (.*)/o; } close FH; Zitieren
attheo Geschrieben 17. April 2002 Autor Geschrieben 17. April 2002 habs hingekriegt!! hätte einfach nur anstatt $seite=~s/ //g if($seite=~/ /); $seite=~s/\s//g; nehmen müssen.. @dr.disk: würde mich aber trotzdem interessieren was genau in deiner lösung gemacht wird. " while <FH> {print "$1\n" if m/: (.*)/o; }" ich kenn nur @inhalt=<FH>; was macht den while? zeilenweise? was war nochmal $1? und den kommpletten if-zweig versteh ich auch nicht :-( klär mich bitte auf Zitieren
dr.disk Geschrieben 17. April 2002 Geschrieben 17. April 2002 Hier nochmals der Code: while <FH> { print "$1\n" if m/: (.*)/o; } Also dann mal los: while <FH> liest die Datei Zeilenweise ein, da nirgend steht in welche Variable wird bei Perl $_ genommen. Wenn Du $_ nicht kennst: Buch oder manpage lesen - mit der kann man wunderhübsche Sachen machen. m/: (.*)/o ist Patternmatching, also wahr sobald der Ausdruck paßt. Ich suche nach einem :, gefolgt von einem Leerzeichen und danach alles was noch kommt. Punkt steht für ein beliebiges Zeichen, * für beliebig oft. Die Klammern weisen den Teil auf den der Ausdruck zwischen ihnen paßt einer Variablen zu, nämlich $#, wobei # für die Nummer des Klammernpaares steht. Ich hab nur eine Klammer, deswegen heißt die bei mir $1. Jetzt dürfte auch das print klar sein: gib $1 und ein newline aus, aber nur dann wenn das Patternmatching erfolgreich, also true war. Das o nach dem Patternmatching steht für optimize, damit wird die RegEx kompiliert. Vorteil: sobald ich Sie nochmals brauche geht's schneller. Nachteil: sollten da Variablen drin stehen werden Änderungen an diesen ignoriert. Hoffe mal, die Erklärung hilft weiter. Zitieren
attheo Geschrieben 17. April 2002 Autor Geschrieben 17. April 2002 vielen dank!! weiß jetzt bescheid.. gruß attheo Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.