Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

$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;

Geschrieben

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 :)

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...