Why don't you use binary file?
For example:
program txthand;
{$mode objfpc}{$H+}
uses SysUtils, Classes, DateUtils;
const
MaxNumbersInSet=9;
type
tMySet=packed array [0..MaxNumbersInSet] of integer;
tSS=(Start,Stop);
procedure timer(ss:tSS; t:TDateTime);
const
StartTime:TDateTime=0;
var
dt: integer;
begin
case ss of
start: begin
StartTime:=t;
writeln('Timer started...');
end;
stop: begin
dt:=MillisecondsBetween(t,StartTime);
writeln('Timer stopped ',dt/1000:7:4,' s');
end;
end;
end;
procedure makedatafile();
var
i,j : longint;
TmpData: tMySet;
fs: TFileStream;
begin
randomize();
timer(Start,time);
fs:=TFileStream.Create('datas.bin',fmOpenWrite);
for i:=1 to 90000000 do
begin
for j:=0 to MaxNumbersInSet do
begin
TmpData[j]:=random(maxint);
end;
fs.write(TmpData,sizeof(tMySet));
end;
writeln('File is ready');
writeln('The size of the genereated file is: ',((fs.Size/1024)/1024)/1024:5:3,' GiB');
fs.Free;
timer(Stop,time);
end;
procedure readdatafile();
var
fs: TFileStream;
history: tMySet;
i,j,x: longint;
begin
i:=0;
j:=0;
x:=0;
fs:=TfileStream.Create('datas.bin',fmOpenRead);
i:=fs.size div sizeof(tmyset);
writeln('There are ',i,' sets in the file. Press enter to write data to screen...');
readln();
fs.Position:=0;
for x:=0 to i do
begin
fs.ReadBuffer(history[0],sizeof(tmyset));
for j:=0 to MaxNumbersInSet do
if j<>MaxNumbersInSet then write(history[j],',')
else writeln(history[j]);
end;
fs.free;
end;
begin
writeln('Generating datafile...');
makedatafile();
writeln('Open file to read...');
readdatafile();
end.