![]() |
AW: 2 Textdateien vergleichen
Warum bei zwei Dateien überhaupt die Hashwerte bilden, wenn man nur wissen will, ob die beiden Files gleich sind? Den Aufwand, den Hash zu berechnen (gut, der hält sich in aller Regel in Grenzen), kann man sich doch sparen, und einfach den Dateiinhalt vergleichen. Oder sind Dinge wie CompareMem so CPU-lastig? :gruebel:
Mit Hashwerten würde ich nur arbeiten, wenn ich mehr als nur eine Datei habe, und z.B. in einem Dokumenten-Verwaltungssystem checken möchte, ob eine Datei bereits im System vorhanden ist oder nicht (zumindest mit einer i.A. ausreichend hohen Wahrscheinlichkeit). |
AW: 2 Textdateien vergleichen
Zitat:
Delphi-Quellcode:
schnell hingeschrieben ist, Geschwindigkeit keine Rolle spielt und man noch mehr zu tun hat. ;-)
THashMD5.GetHashStringFromFile(file1)=THashMD5.GetHashStringFromFile(file2)
|
AW: 2 Textdateien vergleichen
Zwei Hashwerte getrennt von zwei 4 GB großen (oder auch größeren) Dateien zu berechnen, dürfte deutlich einfacher sein, als beide Dateien ins Ram zu laden und sie dann dort zu vergleichen.
Zum Dublettensuchen nehme ich seit Jahr und Tag MD5. Ist sau schnell und treffsicher. Und Du musst nicht beide Dateien gleichzeitig im Speicher halten und Du muss nicht mal was Programmieren, um den Vergleich durchzuführen. Einfacher, als mit dem Beispiel von KodeZwerg, kriegst Du das nicht hin und alles mit bereits vorhanden Hausmitteln, mit hinlänglich bekannten und verbreiteten Algorithmen. In meiner Musikdateienverwaltung steht zu jeder Datei auch der entsprechende MD5-Hash. Kommt 'ne neue Datei, wird deren MD5 berechnet und der eindeutige Index haut mir das beim Speichern direkt um die Ohren. Wie willst Du sowas denn einfacher machen? So kannst Du sogar zwei Dateien vergleichen, von denen Du bis dahin nichtmal wusstest, dass ein Vergleich zur Dublettenerkennung erforderlich sein könnte. OK: Der Vorschlag von freimatz ist noch kürzer, den kann man klar verständlich irgendwo im Quelltext in 'nem If then else stehen haben und fertig. |
AW: 2 Textdateien vergleichen
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Hash’s kann man einsetzten um den kreuzweisen Vergleich vieler Dateien zu optimieren. Dabei muss man dann aber auf die Eigenheiten der Hash-Algorithmen eingehen. Und läuft Gefahr, dass die Optimierung bei manchen Situationen nach hinten los geht. |
AW: 2 Textdateien vergleichen
Ich denke eigentlich auch, dass das direkte Vergleichen mit frühem Abbruch am am schnellsten sein wird.
Zumindest wenn es statistisch verteilt ist, und sich die Files nicht nur am Ende unterscheiden. Es sei denn, der Hash wird für spätere Vergleiche "aufgehoben", dann könnte der Hash auch Sinn machen. Ich bin aber gar nicht sicher ob MD5 überhaupt noch zeitgemäß ist, das kommt doch aus der Hash-Urzeit. Gibt es da nicht mittlerweile viel effizientere Hashes für große Text- und Binärdateien ? |
AW: 2 Textdateien vergleichen
Falls das interessiert würde ich bei git nachschauen.
|
AW: 2 Textdateien vergleichen
Ja, gute Idee.
So einfach ist das bei GIT aber anscheinend auch nicht: ![]() |
AW: 2 Textdateien vergleichen
Hat mich jetzt interessiert.
Bei identen Dateien, egal welche Größe, ist Hash schneller, weil der Vergleich ja bis zum letzten Byte laufen muss. Wenn es Unterschiede gibt, und auch wenn die erst im letzten Viertel sind, ist der Vergleich schneller, auch hier unabhängig von der Größe. Die Dateien waren Textdateien, Zeilen zwischne 1000 und 100.000. Wobei die Unterschiede nicht groß sind: Zeilen: 100000 Änderung bei 0 Dauer 341 296 Zeilen: 100000 Änderung bei 25 Dauer 257 305 Zeilen: 100000 Änderung bei 75 Dauer 302 350 Zeiten sind Millisekunden, Vergleich und dann Hash. Die "Änderung bei" gibt an, in welchem Teil der Datei der erste Unterschied ist, in %. Um den Einfluß des Windows Cache zu elimieren, erfolgt der Vergleich mehrfach und die Zeit wird gemittelt. |
AW: 2 Textdateien vergleichen
Zitat:
Der Weg über CompareMem (deutlich mehr "eigener Code", was ja auch ein Maß für Effizienz sein kann) sollte eigentlich deutlich schneller sein als hashen ... |
AW: 2 Textdateien vergleichen
Zitat:
Byte-Vergleich ist doch optimal schnell, wohingegen der der Hash jedes Byte Berechnen, verschieben und sonstwie vermuscheln muss. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:54 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