Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: 80 MB Datei - doppelte Zeilen entfernen

  Alt 17. Jan 2007, 21:10
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;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat