|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
| Hallo zusammen, hab folgendes Problem: #!/usr/bin/perl -w print "Bitte Dateinamen eingeben\n"; $File = <STDIN>; open (DATA, "$File") || die "Kann die Datei nicht oeffnen!\n"; while (<DATA>) { @ls = grep /<d|w+\@["da"\-"sid"\.com]>/,<DATA>; open (DAT,'>F:/emailcom.txt'); print DAT "@ls"; print "It's done."; close (DAT); last; } close (DATA);
Wenn ich das Skript laufen lasse, filtert er mir das File nicht richtig und gibt alle Zeilen in denen die Email Adresse da-sid.de auftaucht in dem neuen File aus,anstatt die .com auszugeben. Woran liegt das????? Habe auch schon mehrere andere Regular Expressions ausprobiert mit genau dem gleichen Ergebnis. Bin am Verzweifeln und wäre um konstruktive Hilfe sehr dankbar. Gruss Alex
Datum: 26.03.2007-12:40

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
so habe dieses problem jetzt schon alleine in den griff bekommen@ls = grep /<*@da-sid.com>/,<DATA>;
allerdings gibt er mit bisweilen alle Zeilen mit in denen diese Email Adresse vorkommt aus und ich möchte das Ganz nochmal eingrenzen. Er soll nur noch die Zeilen ausgeben in denen der Empfänger diese Email Adresse beinhaltet. Dies macht er allerdings noch nicht. @ls = grep / \w{2} <*@da-sid.com>/,<DATA>;
soll bedeuten,dass davor ein to kommt, welches eindeutig festlegt, dass es sich dabei um die Empfängeradresse handelt. Allerdings wenn ich das Skript dann laufen lasse, gibt er mir gar keine Zeilen mehr aus. Um Hilfe wäre ich sehr dankbar! Gruss Alex
Datum: 26.03.2007-13:49

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
/ \w{2} <*@da-sid.com>/
matcht auf ein Leerzeichen gefolgt von 2 Wortzeichen (A-Z a-z 0-9 _), gefolgt von einen Leerzeichen, einen optional vorhanden '<', gefolgt von "@da-sid.com>". Wichtig ist dass du das '@' escapest. Damit du erkennst was der Unterschied ist folgendes Beispiel:
#!/usr/bin/perl my $str = 'user\@torito.de'; # my @torito = "test\n"; if($str =~ /@torito/) { print "matched\n"; } else { print "not matched\n"; }
Für das Script einmal so aus wie's ist und noch einmal nachdem du das '#' der kommentierten Zeile entfernst. Verleiche die Ausgaben. soll bedeuten,dass davor ein to kommt, welches eindeutig festlegt, dass es sich dabei um die Empfängeradresse handelt. Allerdings wenn ich das Skript dann laufen lasse, gibt er mir gar keine Zeilen mehr aus.
Dann schreib statt dem '\w{2}' einfach ein 'to' oder 'To'. /to\s+<[-A-Za-z0-9_.]+\@da-sid.com>/i
\s+ => ein oder mehrere Leerzeichen [-A-Za-z0-9_.] => eins dieser Zeichen zwischen [ und ] das 'i' am hinter der Regex gibt an dass die Groß-/Kleinschreibung nicht wichtig ist (ignore case), also ist es egal ob du 'to' oder 'To' oder 'TO' schreibst.
Datum: 26.03.2007-15:10

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
| Hallo - danke für deine Antworten. Hast mir sehr weitergeholfen. Ich wäre nie auf das \s+ gekommen. Hab Dank für diese genaue Erläuterung, hab jetzt wieder was dazugelernt! Danke! Gruss Alex
Datum: 27.03.2007-00:51

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
/<d|w+\@["da"\-"sid"\.com]>/
Die Regex matcht auf '<d' oder "ein Wort" gefolgt von einen '@' und der Zeichen 'd', 'a', '-', '"', 's', 'i', '.', 'c', 'o', 'm', gefolgt von einen '>';Eckige Klammern geben bei Regexp Zeichenklassen an, zwischen der öffnenden und der schließenden Klammer können mehrere Zeichen stehen, von denen eins zutreffen kann.
Datum: 26.03.2007-14:53

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
| Ihr denkt alle zu kompliziert: http://wiki.perl-community.de/bin/view/Wissensbasis/FaqFindInTextEmail
Datum: 26.03.2007-18:56

|
re: Email Adressen in File filtern und in neuem File ablegen
|
Seitenanfang |
| Die komplizierte Methode war notwendig, es ging mir in diesen Moment nicht um die Lösung des eigentlichen Problems, sondern viel mehr darum, dass das Verständnis für die Funktionsweise von REs wächst. Und so wie's scheint hat dies auch geklappt.
Datum: 27.03.2007-01:52

|
|

|

|

|
 |

|

|
|