String-Array mittels eines Strings checken



  • ich möchte ein string-array das emailadressen enthält mittels einer einzigen emailadresse überprüfen.
    so in der art:

    - zum mailserver connecten
    - empfänger [i] nutzen
    - ist empfänger [i] im kompleten string-array nicht vorhanden?
    - dann wird die email vom server gelöscht

    ich versuche das so in der art:

    for(int i = 0; i < pop->MailMessage->ReceivedCount; i++)
        {
        	pop->RetrieveMessage(i);
            for(int i = 0; i < 15; i++) //15 ist die grösse des String-Array "Kontakte"
        	{
                if(pop->MailMessage->FromAddress == Kontakte[x])
                {
                	break;
                }
            }
        }
    

    wenn ich das so machen würde, würde zwar bei einer identischen emailadresse die for-schleife beendet werden aber ich möchte ja auch, das wenn nun des gesammten array keine identische adresse gefunden wird, die email gelöscht wird.

    so müsste man nun eine else anweisung unten dran machen, das geht ja aber nicht, weil sons würde ja gleich nach der ersten nicht-identität (auch wenn noch eine folgen könnte) die email gelöscht. versteht ihr was ich vor habe?



  • I: Was ist "x" (wo wird deklariert, etc?)
    II: Dein Code wird sich vermutlich nicht mal compilieren lassen...
    III: Schau dir deine Schleifenköpfe nochmals genauer an
    IV: Dein Problem liesse sich vermutlich mit einem "Found-Flag" lösen

    -junix



  • I: Was ist "x" (wo wird deklariert, etc?)
    Schreibfehler.sollte "i" sein..

    II: Dein Code wird sich vermutlich nicht mal compilieren lassen...
    Doch....

    III: Schau dir deine Schleifenköpfe nochmals genauer an
    Ja und dann?

    IV: Dein Problem liesse sich vermutlich mit einem "Found-Flag" lösen
    Kenne ich nicht. kleines beispiel evl.?



  • freaking schrieb:

    II: Dein Code wird sich vermutlich nicht mal compilieren lassen...
    Doch....

    Gut, wenn x i sein sollte, dann schon.

    freaking schrieb:

    III: Schau dir deine Schleifenköpfe nochmals genauer an
    Ja und dann?

    Richte ein spezielles Augenmerk auf die Variablen.
    Oder anders: Steppe mal mit dem Debugger durch die Schleifen.

    freaking schrieb:

    IV: Dein Problem liesse sich vermutlich mit einem "Found-Flag" lösen
    Kenne ich nicht. kleines beispiel evl.?

    Bool-Variable. Wenn gefunden, true, break, am Ende der Schleife prüfen ob gefunden oder regulär beendet.

    -junix



  • hallo

    danke erstmal für die antösse |-)
    hab mal überlegt und bin zum folgenden code gekommen:

    for(int x = 0; x < pop->MailMessage->ReceivedCount; x++)
        {
        	pop->RetrieveMessage(x);
            for(int i = 0; i < 15; i++)
        	{
                if(pop->MailMessage->FromAddress == Kontakte[i])
                {
                    found = true;
                    break;
                }
            }
            if(found == false)
            {
            	//....email löschen (RetrieveMessage(x))
            }
        }
    

    meintest du das so? kanns grad nicht testen... 🙂



  • So in etwa.
    Natürlich geht das mit der VCL auch viel einfacher. Angenommen Kontakte wäre eine TStringList:

    for(int x = 0; x < pop->MailMessage->ReceivedCount; x++)
      {
        pop->RetrieveMessage(x);
        if (Kontakte->IndexOf(pop->MailMessage->FromAddress) == -1)
          MailLöschen(x);
      }
    


  • danke.
    und junix:

    "Richte ein spezielles Augenmerk auf die Variablen.
    Oder anders: Steppe mal mit dem Debugger durch die Schleifen."

    du meinst damit schon das mit der integer variable oder? also weil ich zuerst in beiden for-schleifen die variable i genommen habe oder? ich dachte das macht nichts, da die seperat in den speicher geladen werden. 😕


Anmelden zum Antworten