ich versuche gerade auf einem Raspi mehrere Hundert MB große Textdateien zu verarbeiten.
Der Naive Ansatz:
Code: Alles auswählen
var sl:TStringlist;
i:integer;
begin
sl := TStringlist.create;
sl.loadfromfile(..);
for i := 0 to sl.clount -1 do begin
end;
sl.free
Komischerweise allokiert er für eine 160MB Textfile so viel Speicher, dass mir das 1GB-RAM eigentlich nicht mehr Reicht. Da mein Algorithmus im 1 Pass Verfahren einfach ein mal die Daten durchgeht war die Idee, nicht immer das gesamte File zu laden sondern "Blockweise" durch zu gehen.
Dazu wollte ich eigentlich TFiletream nehmen, aber laut : http://wiki.freepascal.org/TFileStream/de würde das nicht funktionieren, denn dort steht:
Bei einem Filestream wird eine Datei vollständig in den Arbeitsspeicher gelesen.
Meine Persönliche Erfahrung spiegelt das nicht wieder. Mit den Ntools versende ich zum Teil Gigabyte große Dateien und das geht wunderbar auch wenn die deutlich größer sind als der Speicher den der jeweilige Rechner gerade hat.
Ist hier das Wiki falsch, oder habe ich etwas übersehen.
Und Mit welcher Variante kann ich denn nun riesige Dateien stückweise durchgehen ?