type
TTrainerDataData =
record
nr: Integer;
kat:
String;
frage:
String;
awA:
String;
awB:
String;
awC:
String;
lsg: Char;
end;
TTrainerData =
class
dataSize: Integer;
constructor create;
function open(Datei:
String):Boolean;
function count:Integer;
function getSize:Integer;
procedure reset;
function read:Boolean;
function write:Boolean;
procedure close;
public
Data: TTrainerDataData;
f: TFileStream;
end;
{...}
// SPEICHERN
function TTrainerData.
write:Boolean;
var
i: Integer;
begin
result := TRUE;
try
f.Position := 0;
f.Seek(0, soFromEnd);
f.
Write(data.nr, SizeOf(data.nr));
i := Length(data.kat);
f.
Write(i, SizeOf(Integer));
f.
Write(data.kat, i);
i := Length(data.frage);
f.
Write(i, SizeOf(Integer));
f.
Write(data.frage, i);
i := Length(data.awA);
f.
Write(i, SizeOf(Integer));
f.
Write(data.awA, i);
i := Length(data.awB);
f.
Write(i, SizeOf(Integer));
f.
Write(data.awB, i);
i := Length(data.awC);
f.
Write(i, SizeOf(Integer));
f.
Write(data.awC, i);
f.
Write(data.lsg, SizeOf(data.lsg));
except
result := FALSE;
end;
end;
// AUSLESEN
function TTrainerData.
read:Boolean;
var
size: Integer;
i: Integer;
begin
result := TRUE;
try
f.ReadBuffer(data.nr, sizeOf(data.nr));
f.ReadBuffer(i, SizeOf(Integer));
f.ReadBuffer(data.kat, i);
f.ReadBuffer(i, SizeOf(Integer));
// Hier tritt eine AV auf
f.ReadBuffer(data.frage, i);
f.ReadBuffer(i, SizeOf(Integer));
f.ReadBuffer(data.awA, i);
f.ReadBuffer(i, SizeOf(Integer));
f.ReadBuffer(data.awB, i);
f.ReadBuffer(i, SizeOf(Integer));
f.ReadBuffer(data.awC, i);
f.ReadBuffer(data.lsg, SizeOf(data.lsg));
except
result := FALSE;
end;
end;