![]() |
80 MB Datei - doppelte Zeilen entfernen
Hallo,
ich muss bei einer 80 MB großen Datei alle doppelten un leeren Zeilen entfernen So dauert das eine Ewigkeit:
Delphi-Quellcode:
gruss vom capo
if FileExists('logfile.txt') then
begin FWords := THashedStringList.Create; application.ProcessMessages; FWords.LoadFromFile( ExtractFilePath(Application.ExeName) + 'logfile.txt'); lv.Items.Count := FWords.Count; DeleteDuplicates(Fwords); |
Re: 80 MB Datei - doppelte Zeilen entfernen
Wie sieht das Format einer Zeile aus?
|
Re: 80 MB Datei - doppelte Zeilen entfernen
Besorg dir
![]() |
Re: 80 MB Datei - doppelte Zeilen entfernen
Hallo, einen Ansatz dazu findest Du
![]() |
Re: 80 MB Datei - doppelte Zeilen entfernen
Zitat:
Hast Du 160MB Platz? Dann so:
Delphi-Quellcode:
Untested...QuickandDirty.. NoErrorcheck
var
fd1,fd2 : Textfile; S,Last : string; begin assignfile(fd1,'logfile.txt'); assignfile(fd2,'logfile.neu'); reset(fd1); rewrite(fd2); Last := ''; while not(eof(fd1)) do begin readln(fd1,S); if (trim(S)<>'') and (S <> LAST) then writeln(fd2,S); Last := S; end; Closefile(fd2); Closefile(fd1); deletefile(fd1); rename(fd2,'logfile.txt'); end; Schreibmal wieviel schneller es war! Frank :coder: |
Re: 80 MB Datei - doppelte Zeilen entfernen
Hi,
wie arbeitet denn die Methode DeleteDuplicates? Und wie meinst Du denn doppelte Zeilen? Möchtest Du hier Zeilen die zweimal hintereinander stehen entfernen? Oder möchstest Du die Datei in disjunkte Zeilen zerlegen (also eine Zeile wird nur einmal in die Liste übernommen, egal wie oft und wo sie in der Datei vorkommt)? Gruß Der Unwissende |
Re: 80 MB Datei - doppelte Zeilen entfernen
Hallo
danke für eure Antworten. Die zeilen können auch 2 - x mal vorkommen, habe meine Frage falsch formulieren. Das hier scheint dann dafür nicht das richtige zu sein, oder.
Delphi-Quellcode:
hier habe ich dann auch noch einen fehler:
var
fd1,fd2 : Textfile; S,Last : string; begin assignfile(fd1,'logfile.txt'); assignfile(fd2,'logfile.neu'); reset(fd1); rewrite(fd2); Last := ''; while not(eof(fd1)) do begin readln(fd1,S); if (trim(S)<>'') and (S <> LAST) then writeln(fd2,S); Last := S; end; Closefile(fd2); Closefile(fd1); deletefile(fd1); rename(fd2,'logfile.txt'); end; Zitat:
Delphi-Quellcode:
deletefile(fd1);
|
Re: 80 MB Datei - doppelte Zeilen entfernen
Zitat:
Delphi-Quellcode:
deletefile('logfile.txt');
|
Re: 80 MB Datei - doppelte Zeilen entfernen
Sorry doch, dass ist genau das richtige...
Muss nur
Delphi-Quellcode:
heißen..
delete(fd1);
Frank :coder: |
Re: 80 MB Datei - doppelte Zeilen entfernen
Hallo
so mach ich das nun aber es sind immer noch doppelte Einträge vorhanden. Also dachte ich mir lass ich das ganze nocheinmal mit der neuen Datei durchlaufen, klappt aber dennoch nicht:
Delphi-Quellcode:
gruss capo
procedure TForm1.Button1Click(Sender: TObject);
var fd1,fd2 : Textfile; S,Last : string; begin assignfile(fd1,'C:\logfile.txt'); assignfile(fd2,'C:\logfile.neu'); reset(fd1); rewrite(fd2); Last := ''; while not(eof(fd1)) do begin readln(fd1,S); if (trim(S)<>'') and (S <> LAST) then writeln(fd2,S); Last := S; end; Closefile(fd2); Closefile(fd1); deletefile('logfile.txt'); rename(fd1,'C:\logfile.txt'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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