AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listboxen vergleichen

Ein Thema von Paulh · begonnen am 29. Sep 2012 · letzter Beitrag vom 1. Okt 2012
Antwort Antwort
Seite 1 von 3  1 23      
Paulh

Registriert seit: 29. Mai 2011
34 Beiträge
 
Delphi XE3 Professional
 
#1

Listboxen vergleichen

  Alt 29. Sep 2012, 18:26
Hallo,

ich sitze in letzter Zeit an einem Program, dass Backup löschen soll, es soll immer ein Backup pro Tag behalten werden.
Das sortieren klappt so weit, heisst ich weiss welche Backups ich behalten will, dafür habe ich zwei Listboxen, eine
die die zubehaltenden Backups anzeigt[Listbox1] und eine die alle Backups anzeigt[Listbox2].

Das Problem besteht darin, dass ich es nicht hin bekomme heraus zufinden welches Backup jetzt gelöscht werden soll oder
nicht. Hier ist der Code den ich dafür vorgesehen hatte:

Delphi-Quellcode:
for I := 0 to Listbox2.Items.Count-1 do
begin
  for Ia := 0 to Listbox1.Items.Count-1 do
    begin

      if NOT (Listbox2.Items[i]=Listbox1.Items[ia]) then
      begin
           //Die sollen gelöscht werden
      end;
    end;
end;
Vielen Dankt im vorraus !
Gruß Paulh - Minecaft Server
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:33
Versuchs doch mal mit Listbox1.Items.IndexOf(Listbox2.Items[i])

Result ist gleich der Index des gesuchten Elements, oder, wenn es diese nicht gibt, -1

Das hilft dir bestimmt weiter.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Paulh

Registriert seit: 29. Mai 2011
34 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:36
Meinst du so ?

if NOT (Listbox1.Items.IndexOf(Listbox2.Items[i])=-1) then
Gruß Paulh - Minecaft Server
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#4

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:37
Oder mit ein bischen Quelltext:

Delphi-Quellcode:
for i := Listbox1.items.count-1 downto 0 do begin
  if Listbox2.items.indexof(Listbox1.items[i])=-1 then begin
    if DeleteFile(Listbox1.items[i]) then
      Listbox1.delete(i);
  end;
end;
Hier gehe ich die Listbox1 von unten nach oben durch. Wenn das jeweilige Element in der Listbox2 nicht vorhanden ist, dann wird das Backup gelöscht. Ist das Löschen erfolgreich, wird das Element aus Listbox1 auch auch gleich entfernt.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#5

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:39
Meinst du so ?

if NOT (Listbox1.Items.IndexOf(Listbox2.Items[i])=-1) then
Ich hätte jetzt geschieben:

if Listbox1.items.IndexOf(Listbox2.Items[i])>-1 then ist aber im Grunde das gleiche. Möglicherweise ist der verzicht auf NOT etwas schnellen, aber das wird ggf. auch vom Compiler optimiert, wäre aber auch bei dieser Operation zu vernachlässigen, da die Rechner heute so schnell sind, dass das eh nicht auffallen würde. (Meine Meinung )
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:43
Oder mit ein bischen Quelltext:

Delphi-Quellcode:
for i := Listbox1.items.count-1 downto 0 do begin
  if Listbox2.items.indexof(Listbox1.items[i])=-1 then begin
    if DeleteFile(Listbox1.items[i]) then
      Listbox1.delete(i);
  end;
end;
Hier gehe ich die Listbox1 von unten nach oben durch. Wenn das jeweilige Element in der Listbox2 nicht vorhanden ist, dann wird das Backup gelöscht. Ist das Löschen erfolgreich, wird das Element aus Listbox1 auch auch gleich entfernt.
Achso, noch eine kleine Ergänzung:

das "downto" würde ich diese Stelle verwenden, weil wenn du es anders herum macht, also "for i:=0 to Listbox1.items.count-1" dann kommst du ja irgendwann an eine Stelle, wo aus Listbox1 ein Element löscht. Nach dem Löschen ist Listbox1.Items.count ja kleiner, und die Schleife will am Ende irgendwann auf ein Element zugreifen, was ja gar nicht mehr existiert. Dann hagelt es eine Exception.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:50
Du kannst das Problem reduzieren, indem du nicht die Listboxen anschaust sondern die Items[] Properties.
Dabei handelt es sich um TStrings-Objekte. (bzw. von der Klasse TStrings abgeleitet).

Also willst du zwei Stringlisten "vergleichen".
Vergleichen ist auch nicht das richtige Wort, sondern es dreht sich eher um Mengenlehre.
Man kann die Schnittmenge zweier Stringlisten bilden oder die Vereinigungsmenge oder auch die Restmenge (Menge A ohne B).

siehe auch Code-Library: http://www.delphipraxis.net/20262-me...inglisten.html

Wenn man mal das Prinzip der Mengenlehre begriffen hat, dann braucht man nicht im Nebel stochern sondern kann gezielt das Richtige tun.
Und somit hoffe ich, dass alle die hier schnell aus der Hüfte mit etwas Code geschossen haben noch etwas dazulernen.
  Mit Zitat antworten Zitat
Paulh

Registriert seit: 29. Mai 2011
34 Beiträge
 
Delphi XE3 Professional
 
#8

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:52
Habe es jetzt mit einer 3. Listbox versucht und es kommt aber immer noch ein mischmasch raus

Delphi-Quellcode:
for i := Listbox1.items.count-1 downto 0 do begin
  if NOT (Listbox2.items.indexof(Listbox1.items[i])=-1) then begin
    //if DeleteFile(Listbox1.items[i]) then
      Listbox3.Items.Add(Listbox2.Items[i]);
  end;
end;
Gruß Paulh - Minecaft Server
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#9

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:52
Zitat:
Du kannst das Problem reduzieren, indem du nicht die Listboxen anschaust sondern die Items[] Properties.
Dabei handelt es sich um TStrings-Objekte. (bzw. von der Klasse TStrings abgeleitet).

Also willst du zwei Stringlisten "vergleichen".
Vergleichen ist auch nicht das richtige Wort, sondern es dreht sich eher um Mengenlehre.
Man kann die Schnittmenge zweier Stringlisten bilden oder die Vereinigungsmenge oder auch die Restmenge (Menge A ohne B).

siehe auch Code-Library: Mengenoperationen mit Stringlisten

Wenn man mal das Prinzip der Mengenlehre begriffen hat, dann braucht man nicht im Nebel stochern sondern kann gezielt das Richtige tun.
Und somit hoffe ich, dass alle die hier schnell aus der Hüfte mit etwas Code geschossen haben noch etwas dazulernen.


Und was ist jetzt daran einfacher?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Listboxen vergleichen

  Alt 29. Sep 2012, 18:53
das "downto" würde ich diese Stelle verwenden, weil ...
Auch wenn es die Höflichkeit gebietet in der Kommunikation immer die Ich-Form zu wählen um den Gegenüber nicht vor den Kopf zu stoßen, wie z. B. "würde ich", ändert es nichts daran, dass hier ein "musst du" angebracht ist, denn es gibt nur die eine Variante. Alles andere führt zum Knall
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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