Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Einträge zweier Listboxen an bestimmten Stellen vergl. (https://www.delphipraxis.net/122353-eintraege-zweier-listboxen-bestimmten-stellen-vergl.html)

Ginko 14. Okt 2008 19:14


Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Hallo, ich habe ein Problem und es wäre toll wenn da jemand eine Idee zu hätte.
Also folgendes ich will die Einträge zweier Listboxen an bestimmten Stellen vergleichen.

Also zB so:
Listbox1
02
04
03
05

Listbox2
01 02
03 04

Hier sollte dann nur 05 übertragen werden, da der Wert nicht in Listbox2 enthalten ist.

Ich habe es mit einer Schleife versucht, war aber weniger erfolgreich....

Delphi-Quellcode:
 for s := 0 to listbox1.items.count -1 do
    begin
      for t := 0 to listbox2.items.count -1  do
        begin
          if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
             (listbox2.Items[t][1]) + (listbox2.Items[t][4])then break
             else
               if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
                  (listbox2.Items[t][7]) + (listbox2.Items[t][10]) then break
               else
                 if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
                    (listbox2.Items[t][1]) + (listbox2.Items[t][4])then
                     begin
                       if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
                          (listbox2.Items[t][7]) + (listbox2.Items[t][10]) then
                           stringgrid1.Rows[0].Add (listbox1.items[s][8] + ' ' +
                           listbox1.items[s][10] + ' ' + listbox1.items[s][12] + '   v');    
                     end;
        end;
    end;

Ginko 15. Okt 2008 11:26

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Ist es vielleicht möglich die Listbox2 in eine Menge zusammenzufassen und zu prüfen ob die Werte der Listbox1 sich in der Menge befinden ?

nahpets 15. Okt 2008 11:38

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Hallo,

mir ist nicht klar, was Du da machst und was Du eigentlich machen möchtest und wo genau Dein Problem liegt:

Delphi-Quellcode:
if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
   (listbox2.Items[t][1]) + (listbox2.Items[t][4])then break
   else
   if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
      (listbox2.Items[t][7]) + (listbox2.Items[t][10]) then break
      else
      if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
         (listbox2.Items[t][1]) + (listbox2.Items[t][4])then
         begin
         if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
            (listbox2.Items[t][7]) + (listbox2.Items[t][10]) then
               stringgrid1.Rows[0].Add (listbox1.items[s][8] + ' ' + 
               listbox1.items[s][10] + ' ' + listbox1.items[s][12] + '   v');
Du vergleichst für jeden Eintrag das 1 und 4 Zeichen der Listbox1 mit dem 1 und 4 Zeichen der Listbox2, sind die gleich raus.
Du vergleichst für jeden Eintrag das 1 und 4 Zeichen der Listbox1 mit dem 7 und 10 Zeichen der Listbox2, sind die gleich raus.
Du vergleichst für jeden Eintrag das 1 und 4 Zeichen der Listbox1 mit dem 1 und 4 Zeichen der Listbox2, sind die ungleich, dann vergleichst Du das 1 und 4 Zeichen der Listbox1 mit dem 7 und 10 Zeichen der Listbox2, sind die ungleich, dann erfolgt eine Ausgabe.

Ausgehend von Deinen Beispielen kann ich nicht erkennen, dass diese Bedingungen jemals erfüllt sein können.
Stell' bitte mal konkrete Beispieldaten zur Verfügung, eventuell wird das ja dann etwas transparenter.

Ginko 15. Okt 2008 12:32

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Gut ich versuche es mal:

Listbox1
0),2) x o x
0),4) o x x
2),6) o x x
4),5) x x o
4),6) x o x

Listbox2
0),2),4),6) o o x
0),4),2),6) o o x


Hier sollte der Wert 4),5) x x o rausgeschrieben werden da er nicht in der Listbox 2 an den bestimmten Stellen vorhanden ist.
Also meine Schleife vergleicht wie du gesagt hast die Werte. Das Problem ist nur, wenn jetzt
0),4) mit 0),2),4),6) verglichen wird, schreibt er den Wert raus und das soll ja nicht geschehen,
weil der Wert 0),4) an der 2ten Stelle ja in der Listbox 2 steht.

nahpets 15. Okt 2008 13:41

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Hallo,

ich bin mit nicht sicher, aber meinst Du es eventuell so?
Delphi-Quellcode:
if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
   (listbox2.Items[t][1]) + (listbox2.Items[t][4])then break
   else
   if (listbox1.Items[s][1]) + (listbox1.Items[s][4]) =
      (listbox2.Items[t][7]) + (listbox2.Items[t][10]) then break
      else
      if (
           (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
           (listbox2.Items[t][1]) + (listbox2.Items[t][4])
         )
         and
         (
            (listbox1.Items[s][1]) + (listbox1.Items[s][4]) <>
            (listbox2.Items[t][7]) + (listbox2.Items[t][10])
         ) then
               stringgrid1.Rows[0].Add (listbox1.items[s][8] + ' ' + 
               listbox1.items[s][10] + ' ' + listbox1.items[s][12] + '   v');

Ginko 15. Okt 2008 13:57

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Nein leider nicht, die Schleife hat den selben Effekt wie meine.

angos 15. Okt 2008 14:35

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
hoffe ich hab dich richtig verstanden:
Delphi-Quellcode:
[...]
var
  s, t: integer;
  bGefunden: Boolean;
begin
  for s := 0 to listbox1.items.count -1 do
  begin
    bGefunden := False;
    for t := 0 to listbox2.items.count -1  do
    begin
      if pos(ListBox1.Items[s], ListBox2.Items[t]) then
      begin
        bGefunden := True;
        Break;
      end;
    end;
    if not bGefunden then
    begin
      // ListBox1.Items[s] kommt nicht in ListBox2 vor. Mach nun was du willst
    end;
  end;
end;
[...]
Gruß
Ansgar

DeddyH 15. Okt 2008 14:41

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Delphi-Quellcode:
if pos(ListBox1.Items[s], ListBox2.Items[t]) > 0 then //der Vergleich auf > 0 fehlte

Ginko 15. Okt 2008 15:20

Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
 
Juhuu es klappt danke euch :hello: :bounce1: :bounce1: :hello:

und zwar so :
Delphi-Quellcode:
    for s := 0 to listbox1.items.count -1 do
    begin
      bGefunden := False;
      for t := 0 to listbox2.items.count -1  do
      begin
        if (pos(listbox1.Items[s][1],listbox2.Items[t][1]) > 0) and
            (pos(listbox1.Items[s][4],listbox2.Items[t][4]) > 0) or
            (pos(listbox1.Items[s][1],listbox2.Items[t][7]) > 0) and
            (pos(listbox1.Items[s][4],listbox2.Items[t][10]) > 0) then
        begin
          bGefunden := True;
          Break;
        end;
      end;
      if not bGefunden then
      begin
         showmessage(listbox1.Items[s]);
      end;
    end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz