String aus Text suchen und in Feld schreiben
|
Seitenanfang |
| hallo, ich habe eine Datei mit vielen Quelltexten von Emails und ich möchte gerne alle Mails heraussuchen und in ein Feld schreiben, die den String "To: " vorangestellt haben. Also nicht komplett alle Mailadressen, sondern nur die "Destination"-Mailadressen. Die einzelnen Mails habe ich schon in ein anderes Feld geschrieben (@mail). Der Anfang ist mir klar: Alle Feldindexe durchgehen, aber wie funktioniert das dann mit dem Heraussuchen von nur mit "to: " beginnenden Mails. Also for-Schleife: for(my $i = 0; $i < $#mail; $i++){ ... so und dann ? }
hoffe, dass mir jemand helfen kann. Danke im Voraus :)
Datum: 01.11.2004-22:13

|
re: String aus Text suchen und in Feld schreiben
|
Seitenanfang |
| Hallo, ich hab das mal so if ($line =~ /To: (.+)<(.+)>/i) { dest_mail_addr=$2; } gelöst und es hat funktioniert. Ciao Ingo
Datum: 02.11.2004-07:48

|
re: String aus Text suchen und in Feld schreiben
|
Seitenanfang |
Danke für deine Antwort. Ich habe jetzt das Problem, dass ich garkeine Zeilen in eine Variable (wie du verwendet hast: $line) bekomme.Die Mails sind in einem Feld abgelegt (@mail). Wie durchlaufe ich die einzelnen Feldelemente jetzt zeilenweise, um deinen Vegleich zu machen ?? while(<@mail[$i]>) geht ja nicht. Gruss und danke im Voraus
Datum: 03.11.2004-18:31

|
re: String aus Text suchen und in Feld schreiben
|
Seitenanfang |
| my $line; foreach $line (@mail) { if ($line =~ /To: (.+)<(.+)>/i) { dest_mail_addr=$2; } }
Datum: 03.11.2004-22:07

|
re: String aus Text suchen und in Feld schreiben
|
Seitenanfang |
| Geht bei mir irgendwie nicht, 3 Fehler. Wo werden denn da die jeweiligen feldelemente angesprochen, dass war ja mein Problem. dann einfach aus dem @mail ein @mail[$i] machen ? Naja geht auch nicht. Mhmm :(
Datum: 03.11.2004-22:27

|
re: String aus Text suchen und in Feld schreiben
|
Seitenanfang |
| Hallo, Dein Problem kann ich nicht analysieren, wenn Du nicht die Fehlermeldungen mitteilst. Das hier ist der Blick in die Glaskugel.
my $line;foreach $line (@mail) { if ($line =~ /To: (.+)<(.+)>/i) { dest_mail_addr=$2; last; } }
Die foreach-Schleife teilt das Array @mail in die einzelnen Elemente auf, die ja die Zeilen der Mail enthalten. Dann wird jede Zeile daraufhin untersucht, ob sie eine Zeile nach dem Muster: To: John Do <john@do.xx> enthält. Das, was in den spitzen Klammern steht, ist das, was uns interessiert. Einzig bei mehrfach weitergeleiteten Mails gibt es mehrere Treffer. Für nur den ersten Treffer, der ja im Mailheader steht und wichtig ist, für den könnte man dann die Schleife mittels last verlassen - so wie es jetzt oben eingetragen ist. Was könnte falsch laufen? @mail enthält gar keine oder nicht die erwarteten Daten. Dann gibt es keinen Treffer und die weitere Verarbeitung geht baden. Das Codeschnipselchen kann - so denke ich - keine Fehler erzeugen.
Datum: 04.11.2004-08:06

|