AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Genauer Zeilenvergleich zweier Textdateien - wie ?
Thema durchsuchen
Ansicht
Themen-Optionen

Genauer Zeilenvergleich zweier Textdateien - wie ?

Ein Thema von tomsson74 · begonnen am 29. Jan 2008 · letzter Beitrag vom 1. Feb 2008
Antwort Antwort
Seite 1 von 3  1 23      
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#1

Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 29. Jan 2008, 20:49
Hallo,

ich suche einen schnellen Algorithmus (falls es überhaupt einen gibt) mit dem man Unterschiede in zwei Dateien farblich markieren kann - im Prinzip ein FileCompare für Textdateien.

Habe schon die Suche hier bemüht, bin aber nicht wirklich erfolgreich gewesen.

Zur Veranschaulichung meines Anliegens ein kleines Beispiel. Ich gehe von 2 Dateien aus. Beide sind am Anfang identisch - Datei 2 ist eine Kopie von Datei 1.

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
Zeile 2       Zeile 2
Zeile 3       Zeile 3
Zeile 4       Zeile 4
Zeile 5       Zeile 5
Zeile 6       Zeile 6
Nun werden an der Datei 2 folgende Änderungen vorgenommen:

1. Hinter "Zeile 1" wurde eine neue Zeile hinzugefügt
2. "Zeile 3" wurde in "Zeilee 3" geändert
3. Zeilen 4 und 5 wurden gelöscht

Das Ergebnis sieht dann so aus

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
Zeile 2       Neue Zeile eingefügt
Zeile 3       Zeile 2
Zeile 4       Zeilee 3
Zeile 5       Zeile 6
Zeile 6
Jetzt möchte ich diese beiden Dateien miteinander vergleichen um zu sehen was ich in der Datei 2 gegenüber der Datei 1 verändert hat. Was ich nun als Ergebnis bräuchte wäre in etwas sowas:

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
              Neue Zeile eingefügt (in grün - steht für "neu hinzugekommen")
Zeile 2       Zeile 2
Zeile 3       Zeilee 3 (in blau - steht für "modifiziert")
Zeile 4       Zeile 4  (in rot - steht für "gelöscht")
Zeile 5       Zeile 5  (in rot - steht für "gelöscht")
Zeile 6       Zeile 6
Hat jemand evtl. sowas schon gemacht und kann mir ein paar Tipps geben ?

Grüße
Thomas
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 29. Jan 2008, 21:30
Schau doch mal hier.

Aber vermutlich willst du das selber programmieren, dann sorry für meine Antwort.

Edit: Das kommt dir vermutlich besser entgegen.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 29. Jan 2008, 23:41
Ich hab' mal eine Diff-Unit zu einem Thread von Sharky geschrieben, den Sourcecode findest du auf meiner Seite (mit "Zurück zur Übersicht" auch einen ZIP-Download mit einem Testprogramm).
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#4

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 00:36
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren. sicher kannst du das nie sagen. du kannst höchstens versuchen voraus- und zurückschauend zu analysieren und dann über bestimmete wahrscheinlichkeiten ausagen treffen... aber das ist nix halbes und nix ganzes ... als einfaches hilfsmittel könnte das noch genügen... aber zuverlässig ist das nicht...

... für was brauchste das?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 00:49
Kennst du solche Tools nicht?
Mein angegebener Link auf KDiff3 ist, wie ich finde, ein sehr schönes Beispiel. Das Tool einfach nur genial.

Und das hat rein gar nichts mit Wahrscheinlichkeiten zu tun...
  Mit Zitat antworten Zitat
tomsson74

Registriert seit: 8. Jan 2008
73 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 09:29
Hallo,

danke für die bisherigen Antworten - das hilft mir schon weiter. Ich werde mir die Beschreibungen zu Gemüte ziehen. Das ist zwar schwere Kost aber ich möchte das auch verstehen und nicht nur anwenden

Zitat von grenzgaenger:
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren.
Das hat nichts mit Wahrscheinlichkeiten zu tun, diese Tools funktionieren wirklich - und das sehr zuverlässig

Grüße
Thomas
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 10:28
Zitat von tomsson74:
Zitat von grenzgaenger:
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren.
Das hat nichts mit Wahrscheinlichkeiten zu tun, diese Tools funktionieren wirklich - und das sehr zuverlässig
Das ist nicht ganz richtig, ein Tool kann nicht wissen, ob eine Zeile eingefügt oder neu geschrieben wurde. Aber die Frage an sich ist schon falsch. Es macht keinen Unterschied, ob eine Zeile neu geschrieben oder eingefügt wurde. Sie war vorher nicht da und jetzt ist sie da.
Hach, wie schön, wenn man den Tag mit etwas Haarspalterei beginnen kann.

Jedenfalls wollte ich nochmal Kompare und das Diff-Tool von TortoiseSVN in den Raum werfen. Ersteres ist definitiv eins der hübschesten, beide sind im Quellcode erhältlich und das zweite ist für Windows. Ich halte es zwar nur für begrenzt sinnvoll, sich ein neues Tool dafür zu bauen, wenn es schon genug gibt, aber diese zwei sind sicherlich ein guter Anlaufpunkt, um sich die Algorithmen mal näher anzuschauen. Kompare markiert auch einzelne Änderungen innerhalb einer Zeile, so dass man die Änderung leichter findet.

Und zur Frage, wozu man so etwas braucht - für professionelle Quellcode-Versionsverwaltung sind solche Tools absolut unverzichtbar.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#8

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 11:33
Moin, Moin.
Um die Haarspalterei weiter zu führen: Es ist ja nicht nur die Frage, ob eine Zeile in der einen Datei neu eingefügt oder eine bestehende Zeile verändert wurde. Es kann ja auch in der "anderen" Datei eine Zeile gelöscht worden sein, dann wurde in der betrachteten Datei weder etwas eingefügt, noch verändert. Trotzdem sind die Dateien dann unterschiedlich. Um diese Veränderung korrekt zu verfolgen - und zu benennen - müsste m.E. eine Historie der Vergleiche gespeichert werden.
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#9

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 11:49
Wenn in der zweiten Datei eine Zeile gelöscht wurde, wird sie in der ersten Datei als gelöscht markiert. Dazu braucht man noch keine Historie.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#10

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?

  Alt 30. Jan 2008, 11:53
Ähhh, habe ich da jetzt was übersehen? Wenn ich mit einem beliebigen Programm in einer beliebigen Datei eine Zeile lösche, wie kann dann in einer zweiten (unbekannten) Datei eine Löschmarkierung gesetzt werden?
Gruß Ralph
Ralph
  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 06:16 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