![]() |
Dateien vergleichen
Habe zu diesem Thema mal bischen im Forum rumgelesen und mir dann auch das Programm "TextDiff" mit Souce mal runtergeladen.
Ist ja ganz gut das teil aber geht sowas nicht auch etwas einfacher. Nur zwei dateien vergleichen und die unterschiede farbig markieren ohne schnik schnak. Ich habe das mit 2 Richeditfeldern auch schon so ziemlich am laufen nur je grösser die dateien um so langsamer wird die geschichte. :gruebel:
Delphi-Quellcode:
Das ist der Versuch eines ziemlichen anfängers auf Delphi also bitte nicht gleich mit grausen abwenden.
procedure TfrmVergleich.sbtnVergleichClick(Sender: TObject);
var a,b,c,e,f,g,Z1,Z2 : Integer; m1Str,m2Str,d,h: String; label v1,v2; begin pBar1.Max := LinesCountR1; pBar2.Max := LinesCountR2; Z1 :=0; Z2 :=0; For a := 0 To REdit1.Lines.Count-1 do begin pBar1.Position := a; For b := 0 To REdit2.Lines.Count-1 do if REdit2.Lines[b]= REdit1.Lines[a] then goto v1; m1Str := REdit1.Lines[a]; c := Length(REdit1.Lines[a]); d := m1Str; delete (m1Str,1,c); REdit1.Lines[a] := m1Str; REdit1.SelAttributes.Color:=clRed; insert (d,m1Str,1); REdit1.Lines[a] := m1Str; Z1 := (Z1+1); REdit1.SelAttributes.Color:=clBlack; V1: end; For e := 0 To REdit2.Lines.Count-1 do begin pBar2.Position := e; For f := 0 To REdit1.Lines.Count-1 do if REdit1.Lines[f]= REdit2.Lines[e] then goto v2; m2Str := REdit2.Lines[e]; g := Length(REdit2.Lines[e]); h := m2Str; delete (m2Str,1,g); REdit2.Lines[e] := m2Str; REdit2.SelAttributes.Color:=clRed; insert (h,m2Str,1); REdit2.Lines[e] := m2Str; Z2 := (Z2+1); REdit2.SelAttributes.Color:=clBlack; v2: end; lblFehler1.Caption := IntToStr(Z1)+ ' Fehler !'; lblFehler2.Caption := IntToStr(Z2)+ ' Fehler !'; REdit1.Lines[0] := REdit1.Lines[0]; REdit1.SelStart := 0; REdit1.SetFocus; end; Vieleicht hat ja jemand eine Idee dazu. :wiejetzt: mfg bikeruk |
Re: Dateien vergleichen
Hi! :hi:
Ich habe eine kleine Sourceverwaltung geschrieben, die dem Visual-Source-Safe angelehnt ist. Unter anderem brauchte ich dort auch eine Differenzanzeige. Ich habe einfach die beiden Dateien mit dem Programm FC.EXE verglichen und die Differenzen dann in zwei Listboxen angezeigt. Einfach als erstes Zeichen jeder Zeile eine Zahl vorgehängt, welche Farbe verwendet werden soll. In OnDrawItem habe ich das eine Zeichen wieder abgeschnitten und damit die Farbe ausgewertet. Dann nur noch Zeichenen. Die linke und die rechte seine habe ich dann per Botschaften miteinander verknüpft. Mal sehen, wann ich das Teil so weit habe, daß ich daß online stelle. Es soll open source werden. Ach ja, TinySafe heißt das Teil. Stefan |
Re: Dateien vergleichen
wie hast du die differenzen der fc denn ausgelesen mit Delphi?
|
Re: Dateien vergleichen
Hi perle,
ganz einfach: Du nimmst eine Batchdatei.
Code:
Du startest die Batchdatei mit den beiden Dateien als Parameter und bekommst dann die Datei Diff.Txt zurück. Die Rückgabedatei kannst du natürlich auch übergeben. Nur ">" darfst du nicht als Parameter übergeben, das gibt Probleme. Danach liest du die Datei und die beiden anderen Dateien aus und füllst entsprechend eine StringList.
FC %1% %2% >Diff.Txt
Stefan |
Re: Dateien vergleichen
Hi leute, hab ma ene einfache Funktion geschrieben die einfach nur zeigt ob zwei Dateien gleich sind oder nicht.
Delphi-Quellcode:
hoffe das ich irendwem damit helfen konnte :cheers:
function compari(dat1: string;dat2: string): Boolean;
var F, F2: TextFile; S, S2: string; begin AssignFile(F, dat1); AssignFile(F2, dat2); Reset(F); Reset(F2); repeat Readln(F, S); Readln(F2,S2); until (SeekEof(F) = True) or (S <> S2); IF (S <> S2) or (SeekEof(F) <> SeekEof(F2)) THEN Result := False else Result := True; CloseFile(F); CloseFile(F2); end; bye [edit=Luckie]Delphi-Tags. Mfg, Luckie[/edit] |
Re: Dateien vergleichen
spontan hätte ich es so gemacht:
Delphi-Quellcode:
function CompareFiles(F1, F2: String): Integer;
var T: TStringList; S1, S2: String; i: Integer; begin T:=TStringList.Create; T.Clear; T.LoadFromFile(F1); S1:=T.Text; T.Clear; T.LoadFromFile(F2); S2:=T.Text; T.Free; Result:=Abs(Length(S1)-Length(S2)); for i:=1 to Min(Length(S1),Length(S2)) do if S1[i]<>S2[i] then Inc(Result); end; |
DP-Maintenance
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Ist ein Delphi Problem. |
Re: Dateien vergleichen
Wenn es nur darum geht, ob gleich oder nicht, dann ist man mit Hashes wohl am schnellsten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 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