Moin capo,
so würde ich das wohl bei einer solchen Dateigrösse machen:
Delphi-Quellcode:
var
fIN : TextFile;
fOUT : TextFile;
sl : TStringList;
sLine : string;
sMD5 : string;
begin
sl := TStringList.Create;
try
sl.Sorted := true;
AssignFile(fIN,'<Pfad der Quelldatei>');
AssignFile(fOUT,'<Pfad der Zieldatei>');
Reset(fIN);
Rewrite(fOUT);
try
Readln(fIn,sLine);
while not Eof(fIN) do begin
sMD5 := MD5Print(MD5String(sLine));
if sl.IndexOf(sMD5) = -1 then begin
sl.Add(sMD5);
Writeln(fOUT);
end;
Readln(fIN,sLine);
end;
finally
CloseFile(fOUT);
CloseFile(fIN);
end;
finally
FreeAndNil(sl);
end;
end;
für die MD5-Funktionen kannst Du
dies nehmen.
Sicher kostest es Zeit die MD5 zu berechnen, um einen doppelten String zu ermitteln, aber bei der Datenmenge könnte es schneller sein. Eine andere Variante:
Delphi-Quellcode:
var
fIN : TextFile;
slOut : TStringList;
sLine : string;
begin
slOut := TStringList.Create;
try
slOut.Capacity := 1000000;
slOut.Sorted := True;
slOut.CaseSensitive := False;
slOut.Duplicates := dupIgnore;
AssignFile(fIN,'<Pfad der Quelldatei>');
Reset(fIN);
try
Readln(fIn,sLine);
while not Eof(fIN) do begin
slOut.Add(sLine);
Readln(fIN,sLine);
end;
finally
CloseFile(fIN);
end;
slOut.SaveToFile('<Pfad der Zieldatei>');
finally
FreeAndNil(slOut);
end;
end;