![]() |
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; |
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 ?
|
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:
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.
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 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. |
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. |
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'); |
Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
Nein leider nicht, die Schleife hat den selben Effekt wie meine.
|
Re: Einträge zweier Listboxen an bestimmten Stellen vergl.
hoffe ich hab dich richtig verstanden:
Delphi-Quellcode:
Gruß
[...]
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; [...] Ansgar |
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
|
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 12:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz