AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

File compare

Ein Thema von value is NULL · begonnen am 24. Mai 2011 · letzter Beitrag vom 24. Mai 2011
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.270 Beiträge
 
Delphi 12 Athens
 
#41

AW: File compare

  Alt 24. Mai 2011, 18:03
nicht nur grusselig...
Delphi-Quellcode:
... to vlxsysstate_functions.s3.Count -1 do
        Writeln(s3[i2]);
    test_functions.s3
Drei verschiedene Pfade für s3 ... sicher daß es nur das eine s3 gibt?

Es predigen nicht umsonst soviele, daß globale Variablen "böse" sind und man lieber auf Parameter umsteigen sollte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#42

AW: File compare

  Alt 24. Mai 2011, 18:39
Sollte funktionieren..
Delphi-Quellcode:
function CompareTextFiles (const file1, file2: string): integer;
var
  s1, s2: string;
  f1, f2: TextFile;
  Count: integer;
begin
  Result:= -1;
  if LowerCase(file1) <> LowerCase(file2) then
  begin
    AssignFile (f1, File1);
    {$I-} Reset(f1); {$I+}
    if IoResult = 0 then
    begin
      AssignFile (f2, File2);
      {$I-} Reset(f2); {$I+}
      if IoResult = 0 then
      begin
        Count:= 0;
        Result:= 0;
        while ((not Eof(f1)) and (not Eof(f2)) and (Result = 0)) do
        begin
          Readln(f1, s1);
          Readln(f2, s2);
          Inc(Count);
          if s1 <> s2 then Result:= Count;
        end;
        if Result = 0 then
          if ((not Eof(f1)) or (not Eof(f2))) then Result:= Count+1;
        closeFile (f2);
      end;
      closeFile (f1);
    end;
  end;
end;
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#43

AW: File compare

  Alt 24. Mai 2011, 18:41
Ins unreine gedacht,
für jede Zeile einen Hash-wert erstellen und gleiche Zeilen/Hash-werte aus dem Topf entfernen.
Was übrig bleibt ist nicht gleich.

Gruß
K-H
Die beste Idee IMHO.
Ich hab's mal quasi genauso programmiert, nur andersrum

Delphi-Quellcode:
procedure GetListDifferences(StringListMaster, StringListToCheck: TStringList;
                             var AddedList, MissingList: TStringList);
var
  i: integer;
begin
  AddedList.Clear;
  for i := 0 to StringListToCheck.Count-1 do
    if (StringListMaster.IndexOf(StringListToCheck[i]) = -1) then
      AddedList.Append(StringListToCheck[i]);
  MissingList.Clear;
  for i := 0 to StringListMaster.Count-1 do
    if (StringListToCheck.IndexOf(StringListMaster[i]) = -1) then
      MissingList.Append(StringListMaster[i]);
end;

procedure GetTextFileDifferences(FileNameMaster, FileNameToCheck: string;
                                 var AddedList, MissingList: TStringList);
var
  StringListMaster, StringListToCheck: TStringList;
begin
  AddedList.Clear;
  MissingList.Clear;
  if not FileExists(FileNameMaster) or not FileExists(FileNameToCheck) then
    exit;
  StringListMaster := TStringList.Create;
  StringListToCheck := TStringList.Create;
  try
    StringListMaster.LoadFromFile(FileNameMaster);
    StringListToCheck.LoadFromFile(FileNameToCheck);
    GetListDifferences(StringListMaster, StringListToCheck, AddedList, MissingList);
  finally
    StringListMaster.Free;
    StringListToCheck.Free;
  end;
end;
Gruss,
blauweiss
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#44

AW: File compare

  Alt 24. Mai 2011, 18:51
@ blauweiss

könntest du mir das etwas erklären?! nur fürs verständnis
ich verstehe das nämlich so überhaupt nicht, was bekomme ich da als result?

der plan ist nämlich als Result immer den Text der betroffenen Zeilen zu erhalten.

sry falls die Frage blöd rüber kommt aber das ist neuland

LG
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.549 Beiträge
 
Delphi 11 Alexandria
 
#45

AW: File compare

  Alt 24. Mai 2011, 19:00
Ob Hash oder die Zeile selbst dürfte doch aus Logiksicht egal sein. Nimm Dir also eine Zeile aus der ersten Datei, suche sie in der zweiten und lösche sie bei Fund aus beiden Stringlisten. Das machst Du Zeile für Zeile, was am Schluss übrig bleibt sind die Unterschiede.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#46

AW: File compare

  Alt 24. Mai 2011, 19:09
Ob Hash oder die Zeile selbst dürfte doch aus Logiksicht egal sein. Nimm Dir also eine Zeile aus der ersten Datei, suche sie in der zweiten und lösche sie bei Fund aus beiden Stringlisten. Das machst Du Zeile für Zeile, was am Schluss übrig bleibt sind die Unterschiede.
Genau !
Oder einfach andersrum, wie bei mir: Die nicht gefundenen (=unterschiedlichen) werden gesucht.

@value is NULL:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  AddedList, MissingList: TStringList;
begin
  AddedList := TStringList.Create;
  MissingList := TStringList.Create;
  try
    GetTextFileDifferences('C:\Alt.txt', 'C:\Neu.txt', AddedList, MissingList);

    ...AddedList enthält jetzt die Einträge von Neu.txt, die nicht in Alt.txt sind
    ...MissingList enthält die Einträge von Alt.txt, die nicht in Neu.txt sind

  finally
    AddedList.Free;
    MissingList.Free;
  end;
end;
Gruss
blauweiss
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#47

AW: File compare

  Alt 24. Mai 2011, 19:18
ah ok, hab das prinzip jetzt verstanden, habe glaube ich zu kompliziert gedacht.

Thank good for the Stringlist xD

LG
  Mit Zitat antworten Zitat
FredlFesl

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

AW: File compare

  Alt 24. Mai 2011, 19:23
Dafür gibt es doch die Programme Kdiff, Beyondcompare usw. Die dahinterliegenden Algorithmen sind zwar bekannt, aber nicht trivial.

Bisserl Schmalz muss man schon verwenden, aber man kann mit der Levenshtein-Distanz rechnen, nur nicht auf Zeichen- sondern auf Zeilenebene.
Das Bild hängt schief.
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#49

AW: File compare

  Alt 24. Mai 2011, 19:43
Dafür gibt es doch die Programme Kdiff, Beyondcompare usw. Die dahinterliegenden Algorithmen sind zwar bekannt, aber nicht trivial.

Bisserl Schmalz muss man schon verwenden, aber man kann mit der Levenshtein-Distanz rechnen, nur nicht auf Zeichen- sondern auf Zeilenebene.
Das geht sogar mit Sicherheit ! Jedes beliebig triviale Problem läßt sich mit beliebig großem Aufwand unter Verwendung beliebig vieler nichttrivialer Algorithmen lösen ! Und das kostet dann richtig Gehirnschmalz, Du hast Recht.

Levenshteindistanzfreundliche Grüße,
blauweiss
  Mit Zitat antworten Zitat
FredlFesl

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

AW: File compare

  Alt 24. Mai 2011, 20:02
Sachma, hast du überhaupt kapiert, was ich geschrieben habe?
Was soll der Blödsinn?

Wenn es hier um einen Vergleich von zwei Textdateien geht, bei denen die Unterschiede gezeigt werden sollen, wie würdest Du da vorgehen?
Erst einen reinkippen, bist du BLAU bist, und dann "ich WEISS nicht" brüllen?
Das Bild hängt schief.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 23:02 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