Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Schleife bringt verschiedene Ergebnisse (https://www.delphipraxis.net/162247-schleife-bringt-verschiedene-ergebnisse.html)

ereetzer 14. Aug 2011 14:12

Schleife bringt verschiedene Ergebnisse
 
Hallo,

vorab: ich habe mit 2 Dateien kopiert um diese Funktion zu testen, hab jetzt
also 2 doppelte Dateien.

Mit unten stehendem Code bringt er mal gar kein Ergebnis, mal nur die 2. doppelte Datei
mal korrekt beide doppelte Dateien und mdann auch noch beim ersten Click die 2. Kopie und beim nochmaligem Click beide Kopien.

Woran liegts? Ich kann es nicht erkennen.

ps:
Die Funktion CompareFile ist hier aus dem Forum von negaH

Delphi-Quellcode:
procedure TForm1.Button18Click(Sender: TObject);
var
  i: integer;
  FileName1, FileName2: string;
begin
  Gauge1.MaxValue := lvOrganisation.Items.Count - 1;

  for i := 0 to lvOrganisation.Items.Count - 1 do
  begin
    if i = lvOrganisation.Items.Count -1 then exit;

    FileName1 := lvOrganisation.Items[i].SubItems[0] +  lvOrganisation.Items[i].SubItems[1];
    FileName2 := lvOrganisation.Items[i+1].SubItems[0] +  lvOrganisation.Items[i+1].SubItems[1];
    if CompareFile(FileName1, FileName2) = True then ListBox1.Items.Add('doppelt?: ' + FileName1);

    Application.ProcessMessages;
    Gauge1.Progress := i;
  end;  // i
end;
Gruß

ereetzer

himitsu 14. Aug 2011 14:23

AW: Schleife bringt verschiedene Ergebnisse
 
Zitat:

Delphi-Quellcode:
if i = lvOrganisation.Items.Count -1 then exit;

Wozu?
Warum nicht
Delphi-Quellcode:
for i := 0 to lvOrganisation.Items.Count - 2 do
?

Zitat:

Delphi-Quellcode:
if CompareFile(FileName1, FileName2) = True then

Sowas macht man nicht!

Delphi-Quellcode:
if CompareFile(FileName1, FileName2) then

ereetzer 14. Aug 2011 14:31

AW: Schleife bringt verschiedene Ergebnisse
 
Da hast Du recht, habs auch schon geändert, ändert aber nichts am Problem.

Am häufigsten kommt einfach gar kein Ergebniss.
als 2.häufigstes Ergebnis kommt erst die 2. Kopie-->bei nochmal klicken dann beide
Und ganz selten korrekt beide Dateien.

Gargoyl 14. Aug 2011 14:33

AW: Schleife bringt verschiedene Ergebnisse
 
So wie ich das sehe vergleichst du immer nur benachbarte Elemente miteinander, also [i] mit [i+1]. D.h. du kannst doppelte nur finden wenn sie in der Liste hintereinander stehen. Tun sie das nicht, z.B. wenn die Doppelten in [3] und [5] stehen, werden sie nicht gefunden da [3] nie mit [5] verglichen wird. Du Vergleichst nur ... [2] mit [3], [3] mit [4], [4] mit [5], [5] mit [6] ... aber die Elemente [3] mit [5] vergleichst du nie miteinander.

Oder ist die Liste lvOrganisation.Items[] irgendwie nach Dateigröße sortiert?

D.h. je nachdem wie du die Liste füllst sind die doppelten mal hintereinander in der Liste, und mal nicht. Entsprechend ist dein Ergebnis unterschiedlich.

ereetzer 14. Aug 2011 14:42

AW: Schleife bringt verschiedene Ergebnisse
 
Hmm, Du hast recht.

Aber in diesen Testzeilen stehen die doppelten Dateien tatsächlich IMMER hintereinander
(Am Dateiname hängt einfach nur nochmal "Kopie").

...

So, hab schnell mal eine doppelte Schleife getestet: genau das gleiche: verschiedene Ergebnisse und logischerweise längere Vergleichsdauer.

ereetzer 14. Aug 2011 16:10

AW: Schleife bringt verschiedene Ergebnisse
 
Hmm, wenn ich mich nicht täusche, liegts an CompareFile.

In dieser Unit sind noch andere Funktionenenthalten, womit es auch funktioniert.

Warum also nicht mit CompareFile(File1, File2). Ich selbst kann nicht erkennen, warum.

Hier die Unit FileCompare
http://www.delphipraxis.net/51018-da...rgleichen.html

FredlFesl 14. Aug 2011 19:10

AW: Schleife bringt verschiedene Ergebnisse
 
Was für Dateien vergleichst Du eigentlich? Nicht das die sich laufend ändern... ;-)

Lass Dir mal die Dateinamen ausgeben, die verglichen werden und die angeblich identisch sind...


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 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