![]() |
AW: Große Textdateien verarbeiten
@DeddyH VST?
Wie wäre es denn mit den Methoden aus der guten alten Dos-Zeit? Du schleppst eine Kombination aus Dateinamen und "Zeilenzeiger" mit und zeigst nur die 1,2,...n Zeilen an, die auf den Bildschirm passen. Das ist auf jeden Fall speicherschonend, aber etwas aufwendig zu programmieren. Gruß K-H |
AW: Große Textdateien verarbeiten
![]() |
AW: Große Textdateien verarbeiten
Ja tatsächlich Kundenwunsch ... Der Kunde möchte dann durch die zusammengefügte Datei in einer Textbox (Memo) scrollen und ggf. Nacharbeitungen vornehmen.
Jedoch besteht der erste Schritt nur aus dem zusammenfügen der Dateien + Darstellung im Memo. |
AW: Große Textdateien verarbeiten
Die Datei direkt in einen string laden > natürlich die Ansi-Unicode-Umwandlung nicht vergessen, da die Datei bestimmt mit ANSI gefüllt ist und dein Delphi Unicode nutzt.
(oder in einen AnsiString laden und dann Delphi es umwandeln lassen) Und dann diesen string direkt an Memo1.Text übergeben. Dateien zusammenfügen, indem alles Dateien hintereinander in den String geladen werden.
Delphi-Quellcode:
im Vergleich zu Diesem ... was von dem Folgenden dauert denn wie lange?
if FileExists(Path) then
begin AssignFile(F,Path); Reset(F); while not eof(F) do begin Readln(F,tmp); Form1.Memo1.Lines.Add(tmp); end; CloseFile(F); end;
Delphi-Quellcode:
if FileExists(Path) then
begin AssignFile(F,Path); // hier noch den Buffer vergrößen Reset(F); while not eof(F) do begin Readln(F,tmp); //Form1.Memo1.Lines.Add(tmp); end; CloseFile(F); end;
Delphi-Quellcode:
if FileExists(Path) then
begin AssignFile(F,Path); // hier noch den Buffer vergrößen Reset(F); tmp := 'hier irgendwas mit der durchschnittlichen Länge einer Zeile reinmachen'; for i := 1 to Anzahl_der_Zeilen do //while not eof(F) do //begin // Readln(F,tmp); Form1.Memo1.Lines.Add(tmp); //end; CloseFile(F); end; |
AW: Große Textdateien verarbeiten
Hm also ich hab jetzt grad schonmal gemessen und bin zu folgendem Ergebnis gekommen:
Code:
file: 20mb, 1372022 Lines
time: 10:34 min
Delphi-Quellcode:
begin
StartTime:=Time; Memo1.Lines.BeginUpdate; for i:=1 to Form1.StringGrid1.RowCount do begin Path:=Form1.StringGrid1.Cells[1,i]; if FileExists(Path) then begin AssignFile(F,Path); Reset(F); while not eof(F) do begin Readln(F,tmp); Form1.Memo1.Lines.Add(tmp); end; CloseFile(F); end; end; Memo1.Lines.EndUpdate; EndTime:=Time; ShowMessage('Time: '+TimeToStr(EndTime-StartTime)); end;
Code:
file: 20mb, 1372022 Lines
time: 00:22 min
Delphi-Quellcode:
begin
StartTime:=Time; sl:=TStringList.Create; for i:=1 to Form1.StringGrid1.RowCount do begin Path:=Form1.StringGrid1.Cells[1,i]; if FileExists(Path) then begin AssignFile(F,Path); Reset(F); while not eof(F) do begin Readln(F,tmp); sl.Add(tmp); end; CloseFile(F); end; end; Memo1.Text:=sl.Text; sl.Free; EndTime:=Time; ShowMessage('Time: '+TimeToStr(EndTime-StartTime)); end; |
AW: Große Textdateien verarbeiten
Zitat:
Wie wäre es also doch in etwa so, wie es p80286 vorgeschlagen hat: Nicht alles auf einmal anzeigen. Diese Forum z.B. zeigt ja auch nicht alle Threads einer Kategorie auf einmal an, sondern stückweise verpackt in übersichtliche Seiten :-D |
AW: Große Textdateien verarbeiten
Ich wollt es erstmal mit einfachen Dingen versuchen :) Vielleicht finden wir ja noch eine akzeptable Lösung :/
|
AW: Große Textdateien verarbeiten
Nennt man glaube ich dynamisches lesen und bearbeiten von grossen Textdateien!
(evtl gerade erfunden) :wink: Der Kunde bekommt davon gar nichts mit! Er scrollt in den Text so, als währe er komplett im Speicher. alfold |
AW: Große Textdateien verarbeiten
@-187-:
1GB auf einmal in 'nen Memo zu laden zählt ganz sicher nicht zu "einfach" :wink: (Ist ein Memo nicht mal auf 64kB begrenz gewesen?:gruebel:) |
AW: Große Textdateien verarbeiten
Das wäre ziemlich einfach über eine DB (DBGrid) zu lösen ... Wäre eine Überlegung wert.
Edit: Oder TDBMemo :P |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 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 by Thomas Breitkreuz