Hab' ne Klasse von "früher", wo ich auch viel mit Textfiles gearbeitet habe. Mal eben auf Sebastian’s TSJMmfFileReader Standard gebracht. Mit SSD Festplatte 1,2 sec. für das Einlesen der letzten Seite einer 300 MB Textdatei (Kompliment an Sebastian!). Mit AssignFile und Co (Textbuffer 4K) 2 sec.
Delphi-Quellcode:
function LoadSinglePageFromFile(FileName: string; SinglePage: TStringList;
Index: integer): boolean; // Index = 0 .. PagesCount - 1
const
cFormFeed = #12; // ^L PageBreak
var
FileReader: TSJMmfFileReader;
CurrentReadString: string;
NewPage: boolean;
ReadPagesCount: integer;
begin
Result := false;
if FileExists(FileName) then
begin
SinglePage.Clear;
FileReader := TSJMmfFileReader.Create(FileName);
ReadPagesCount := 0;
try
while (FileReader.Position < FileReader.Size)
and (ReadPagesCount <= Index) do
begin
FileReader.Readln(CurrentReadString);
NewPage := Pos(cFormFeed, CurrentReadString) = 1; // ***
if NewPage then
begin
Inc(ReadPagesCount);
if ReadPagesCount = Index then
begin
System.Delete(CurrentReadString, 1, 1);
if CurrentReadString <> '' then
SinglePage.Add(CurrentReadString);
end;
end
else
if ReadPagesCount = Index then
SinglePage.Add(CurrentReadString);
end;
Result := true;
finally
FileReader.Free;
end;
end;
end;