Eintrag in CheckListBox suchen -> Fehlermeldung in for-Schleife



  • Hallo!

    Ich suche per Schleife einen Eintrag in meiner CheckListBox. Leider bekomm ich immer eine seltsame Fehlermeldung, keine Ahnung warum

    Hier mein Code

    for(int i=0;i<=CheckListBox1->Count;i++)
        {
          for(int j=0;j<=Memo2->Lines->Count;j++)
          {
    
            AnsiString Information = Memo2->Lines->Strings[j];
            if(CheckListBox1->Items->Strings[i] == Information)
            {
              ShowMessage("Eintrag gefunden -> " + CheckListBox1->Items->Strings[i] + " an Position " + IntToStr(i));
              break;
            }
          }
        }
    

    Die Fehlermeldung lautet

    Im Projekt Start.exe ist eine Exception der Klasse EStringListError aufgetreten. Meldung: List index out of bounds(19). Prozess wurde angehalten....
    

    Kann mir da jemand weiterhelfen? Hab keine Ahnung wo der Fehler liegen könnte.

    Schöne Grüße



  • Hallo

    for(int i=0;i<=CheckListBox1->Count;i++)
    {
      for(int j=0;j<=Memo2->Lines->Count;j++)
    

    Wenn du ein Array von x Elementen hast, haben die Elemente die Indexe von 0 bis x-1.

    bis bald
    akari



  • Das hab ich schon verstanden....

    Ich erklär mal was ich machen möchte:

    Ich habe eine CheckListBox in der sich Einträge befinden. Dann gibt es noch ein Memo in dem sich natürlich auch Einträge befinden.

    Nun möchte ich per for-Schleife abfragen welche der Einträge in meinem Memo auch einem Eintrag in der CheckListBox entspricht und das Ergebnis entsprechend weiterverarbeiten.

    Leider komm ich hier im Moment nicht weiter.

    Ist mein Lösungsansatz falsch?

    Gruß

    Maik



  • Hallo

    Das hab ich schon verstanden....

    Nein, hast du nicht, denn dann hättest du die Abbruchbedingungen schon geändert

    for(int i=0;i < CheckListBox1->Count;i++)
    {
      for(int j=0;j < Memo2->Lines->Count;j++)
    

    Desweiteren läßt sich die innere Schleife durch die Verwendung von TStrings::IndexOf() ersetzen.

    bis bald
    akari



  • ...dann gib mir wenigstens im Ansatz mal ne Hilfe wo das Problem liegt, ich komm hier echt grad nicht weiter.



  • Hallo

    *seufz* Ich habe doch schon Ansätze gegeben...
    Also hier für Copy&Paste :

    AnsiString Information;
    int Pos;
    for(int j=0;j < Memo2->Lines->Count;j++) // < anstatt <=
    {
      Information = Memo2->Lines->Strings[j];
      if((Pos = CheckListBox1->Items->IndexOf(Information)) > -1)
      {
        ShowMessage("Eintrag gefunden -> " + Information + " an Position " + IntToStr(Pos));
        }
      }
    

    bis bald
    akari


  • Mod

    Hallo

    normalerweise sollte man da sagen

    Bitte mal aufstehen, du sitzt auf der Leitung 😃
    (wer lesen kann ist echt im Vorteil - alles bitte nochmal durchlesen !!! - besonders den Beitrag von akari)

    Mfg
    Klaus



  • Danke erstmal.

    Ich hatte meine Abbruchbedingung in der Schleife vorhin auch schon mal so gehabt. Leider passiert dann wie bei deinem Beispiel garnichts.

    Desweiteren ist es so, dass mein Memo deutlich weniger Einträge hat als die CheckListBox, deshalb die zweite Schleife.

    Habt ihr ne Idee warum er bei der Bedingung

    for(int j=0;j < Memo2->Lines->Count;j++) // < anstatt <=
    

    garnichts mehr macht?

    Gruß



  • Wenn beispielsweise

    Memo2->Lines->Count = 10

    ist - Von wo bis wo gehen diese 10 Zeilen?

    Also bitte vervollständigen

    1. Zeile ist [ ]

    letzte Zeile ist [ ]

    das sind insgesamt 10 Zeilen



  • Hallo

    @ maikmueller : Es passiert nichts, weil keine der Zeilen aus dem Memo in der CheckListBox vorhanden sind. Last sich ganz einfach so ausprobieren :

    AnsiString Information;
    int Pos;
    for(int j=0;j < Memo2->Lines->Count;j++) // < anstatt <=
    {
      Information = Memo2->Lines->Strings[j];
      if((Pos = CheckListBox1->Items->IndexOf(Information)) > -1)
      {
        ShowMessage("Eintrag gefunden -> " + Information + " an Position " + IntToStr(Pos));
        } 
      else
      {
        ShowMessage("Eintrag nicht gefunden -> " + Information + "); 
        }
      }
    

    bis bald
    akari



  • Wenn beispielsweise

    Memo2->Lines->Count = 10

    ist - Von wo bis wo gehen diese 10 Zeilen?

    Also bitte vervollständigen

    1. Zeile ist [0]

    letzte Zeile ist [9]

    das sind insgesamt 10 Zeilen

    Ist das richtig?

    Ich versteh deine Antwort nicht!



  • Hallo

    Ja, deine Antwort ist richtig. Und christians Frage soll dich nochmal auf das stoßen, was ich dir schon im ersten Post von mir gesagthabe.
    Das du < anstatt <= verwenden must.

    bis bald
    akari



  • @Akari:

    Es passiert nichts, weil keine der Zeilen aus dem Memo in der CheckListBox vorhanden sind...

    Das ist Quatsch, mindestens 5 Einträge des Memo kommen auch in der CheckListBox vor.

    Gruß

    Maik



  • Hallo

    Offenbar eben doch nicht. Oder glaubst du dein Computer belügt dich?
    Benutzt die erweiterte Routine mit dem else-Teil. Dann wirst du sehen, das es keine Übereinstimmung gibt.
    Übwigens können solche Unterschiede schon durch Leerzeichen o.ä. auftreten.

    bis bald
    akari



  • Hallo!

    Danke für die zahlreichen Beiträge gestern. Habs inzwischen geschafft, alles funktioniert wunderbar.

    War gestern irgendwie neben der Kappe. Es funktioniert halt nicht, wenn man versucht eine Dateiversion mit einem Dateinamen zu vergleichen, dass war das Problem der ganzen Sache.

    Sorry und vielen Dank.

    Gruß

    Maik


Anmelden zum Antworten