Philipp Hasenfratz: Probleme im normalen Leben?

Beitrag lesen

Halihallo Norbert

Nur, der Code bleibt derselbe!

Das ist mir schon klar. Nur: Bemühe dich bitte das nächste mal gleich den relevanten
Code zu posten und deine Frage klar zu formulieren. Wir sind weder Hellseher, noch haben
wir grosse Lust uns durch A4 Seiten Code zu wälzen. Ich glaube das kannst du verstehen,
oder?

Inhalt öffnen, Inhalt einlesen, wieder schliessen

open(MAIN3,"./body.txt") || die $!;
@main3 = <MAIN3>;
close(MAIN3);
Nun hab ich die relevanten Begriffe in @main3.

Hm. Fast: die relevanten Begriffe und ein Zeilenumbruch.
chomp @main3;
entfernt diese.

foreach (@main3) {
for (; $x <= $#$Lines; $x++) {

Das würde ich der logik halber umkehren. Zuerst über alle Zeilen der Mail iterieren
und jeweils eine Zeile mit allen Stopwords (@main3) vergleichen, so macht es IMHO mehr
Sinn, obwohl das andere natürlich auch geht.

if ($Lines->[$x] =~ m/$_/i) {

Tja, hier ist der Fehler wohl bemerkbar geworden. Wenn die Begriffe in @main3 alle noch
ein Zeilenumbruch enthalten, wird es hier nur wahr, wenn der Begriff am Ende der Zeile
stünde.

Das wäre das, was ich selber anzubieten hab. Aber im Versuch tats das eben nicht.

Dann musst du schrittweise reduzieren, bis du den Fehler findest. Erstelle Debug-Ausgaben
von Variablen oder Schritten in Kontrollstrukturen, so findet man den Fehler oftmals
selber sehr schnell.

Außerdem möchte ich, daß nach dem ersten gefundenen Begriff nicht mehr weiter gesucht wird, weil die Mail ja dann quasi schon gelöscht ist. Quasi aber eben nur, weil sie ganz real erst dann gelöscht wird, wenn $pop3->quit(); gelaufen ist.

Du hast etwas in der Art:
foreach (@lines_of_body) {
   foreach my $stop_word (@stopwords) {
      if ($_ =~ m/$stop_word/i) { $pop->delete; }
   }
}

Was hälst du von:
foreach (@lines_of_body) {
   my $delete_status = 0;
   foreach my $stop_word (@stopwords) {
      if ($_ =~ m/$stop_word/i) { $pop->delete; $delete_status=1; break; }
   }
   if ($delete_status == 1) {break;}
}

Und zum besseren Verständnis des Gesamtscriptes hatte ich halt den Scriptrest auch mal gepostet und den relevanten Teil zwischen die ###########-Linien gesetzt.

Ich neige gar dazu dir recht zu geben. Nur zuoft fehlt der globale Kontext und lokal
(im kleinen Teilcode) lassen sich einige Fehler nicht erkennen.

Das hab ich aber auch so beschrieben, oder?

Nicht ganz. Du hattest gar keine Frage gestellt, bzw. sie derart offen gelassen, dass
ich zumindest nicht gewusst hatte, was du eigentlich von uns erwartest.

Wenn ich dich kurz zittieren darf:
"wie durchsuche ich den emailbody einer mail nach Begriffen, die in einer seperaten Datei stehen, um die Mail dann ggf. zu löschen.

Hier mein Versuch: (der entscheidende Teil steht zwischen den #####)"

OK, wir wissen dass du den E-Mail Body nach Begriffen durchsuchen möchtest und die Mail
ggf. löschen willst. Dann kommt ein "Hier mein Versuch:" und ein Rattenschwanz an Code.
Wo war die Frage? - Was wolltest du wissen? - Oder wolltest du uns nur dein Script
vorstellen?
Ich hoffe du verstehst jetzt, warum ich erst nicht so richtig auf dein Problem einge-
gangen bin, ich wusste nicht welches... Du darfst das nicht mit deinen Augen sehen, klar
kennst du dein Problem, wir nicht. Uns musst du es mit gezielten Fragen zeigen.

Viele Grüsse

Philipp