Zwei TStringLists vergleichen (eine zeile soll gefunden werden)



  • Hi,
    Hmm. Habe es jetzt seit ungefaehr einer Stunde versucht mit den for-Schleifen aber ich kriege es nicht hin.



  • zeig mal deine versuche dann könnete man dir besser helfen



  • Hallo

    sollte ungefährt so aussehen :

    TStringList* list1 = new TStringList();
      list1->Text = "Das\r\nist\r\nder\r\nerste\r\nTeil";
      TStringList* list2 = new TStringList();
      list2->Text = "Das\r\nist\r\nder\r\nzweite\r\nTeil";
    
      int lastl2;
      for (int l1 = 0; l1 < list1->Count; ++l1)
      {
        lastl2 = -1;
        for (int l2 = 0; l2 < list2->Count; ++l2)
        {
          if (list1->Strings[l1] == list2->Strings[l2])
          {
            Application->MessageBox(AnsiString("String <" + list1->Strings[l1] + "> l1 : " + IntToStr(l1)
              + " l2 : " + IntToStr(l2)).c_str(), "Gleicher String", MB_OK);
            lastl2 = l2;
          }
        }
        if (lastl2 == -1)
          Application->MessageBox(AnsiString("String <" + list1->Strings[l1] + "> l1 : " + IntToStr(l1)).c_str()
            , "String nicht vorhanden", MB_OK);
    
      }
      delete list1;
      delete list2;
    

    bis bald
    akari



  • Wie wär's mit IndexOf?



  • @akari: also ich hab aus dem was du mir geschickt hast selbst einen code gemacht weil das nicht genau dem entsprach was ich brauche. Hab aber anscheinend einen kleinen Fehler gemacht:

    TStringList *list1 = new TStringList();
    list1->LoadFromFile("Lösungen.txt");
    TStringList *list2 = new TStringList();
    list2->LoadFromFile("Wörterbuch.txt");
    int lastl2;
    for (int l1 = 0; l1 < list1->Count; ++l1)
     {
     lastl2 = -1;
     for (int l2 = 0; l2 < list2->Count; ++l2)
      {
      if(list1->Strings[l1] == list2->Strings[l2])
       {
       Label2->Caption = list2->Strings[l2];
       lastl2 = l2;
       }
      }
     }
    if (lastl2 == -1)
     {
     Label2->Caption="Nichts gefunden";
     }
    delete list1;
    delete list2;
    

    Label2 zeigt nachdem vorgang immer "Nichts gefunden an" obwohl in beiden TStringLists die gleiche Zeile einmal vorkommt.

    Sieht jemand den Fehler? ^^



  • Hallo

    @ Blubby : deine Überprüfung ist im Grunde überflüssig, da du lastl2 erst nach der äußeren Schleife überprüfst. Du must das aber wiee ich in jedem Durchgang auswerten.

    @ Jansen : ja hast recht... die innere Schleife kann durch IndexOf ersetzt werden.

    bis bald
    akari



  • akari schrieb:

    Hallo

    @ Blubby : deine Überprüfung ist im Grunde überflüssig, da du lastl2 erst nach der äußeren Schleife überprüfst. Du must das aber wiee ich in jedem Durchgang auswerten.

    @ Jansen : ja hast recht... die innere Schleife kann durch IndexOf ersetzt werden.

    bis bald
    akari

    heißt das ich brauche lastl2 gar nicht? Oder muss es drin sein



  • Hallo

    du brauchst rür jede einzelne Zeile aus list1 eine einzelne Überprüfung von lastl2. Wie Jansen bereits gesagt hat kannst du das jetzt auch einfacher haben :

    ...
    int l2;
    for (int l1 = 0; l1 < list1->Count; ++l1)
    {
      if ((l2 = list2->IndexOf(list1->Strings[l1])) > -1)
      {
        // zeile mit index l2 gefunden
      }
      else
      {
        // zeile nicht gefunden
      }
    }
    ...
    

    bis bald
    akari



  • vielen dank an euch!



  • Hab noch eine Frage was kein neues Topic wert ist 😃

    Kann ich irgendwie das Wörterbuch aus MS Word extrahieren? Denn ich brauche eine Liste mit deutschen wörtern (nicht alle aber die allgemeinen)



  • Das hat a) absolut nichts mit dem Thema des Threads zu tun, gehört also in jedem Fall in einen eigenen Thread, und hat b) auch nichts mit dem C++Builder zu tun, für solche Fragen gibt es hier z.B. "Rund um die Programmierung" oder besser noch "Rund um den PC".



  • Jansen schrieb:

    Das hat a) absolut nichts mit dem Thema des Threads zu tun, gehört also in jedem Fall in einen eigenen Thread, und hat b) auch nichts mit dem C++Builder zu tun, für solche Fragen gibt es hier z.B. "Rund um die Programmierung" oder besser noch "Rund um den PC".

    tut mir leid mach ich sofort


Anmelden zum Antworten