AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Schleife bringt verschiedene Ergebnisse

Ein Thema von ereetzer · begonnen am 14. Aug 2011 · letzter Beitrag vom 14. Aug 2011
Antwort Antwort
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#1

Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 15:12
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

Geändert von ereetzer (14. Aug 2011 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.509 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 15:23
Zitat:
if i = lvOrganisation.Items.Count -1 then exit;
Wozu?
Warum nicht for i := 0 to lvOrganisation.Items.Count - 2 do ?

Zitat:
if CompareFile(FileName1, FileName2) = True then
Sowas macht man nicht!

if CompareFile(FileName1, FileName2) then
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#3

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 15:31
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.
  Mit Zitat antworten Zitat
Gargoyl

Registriert seit: 11. Mär 2007
68 Beiträge
 
#4

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 15:33
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.
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#5

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 15:42
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.
  Mit Zitat antworten Zitat
ereetzer

Registriert seit: 21. Mär 2003
86 Beiträge
 
Delphi XE Starter
 
#6

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 17:10
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
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#7

AW: Schleife bringt verschiedene Ergebnisse

  Alt 14. Aug 2011, 20:10
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...
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf