wie ich wahrscheinlich schon erwähnt habe, versuche ich gerade einige ~20Jahre alte Programme in die Gegenwart zu portieren.
Eines davon hat folgende Dateistruktur:
Code: Alles auswählen
type
werkzeug = record
lrn : char;
negpos : string[3];
name : string[20];
comment : string[40];
identnr : string[10];
place : string[2];
number : string[4];
material : string[5];
xlong : real;
zlong : real;
cutpoint : integer;
radian : real;
end;
daten = record
version : string[4];
proznu : string[5];
nummer : string[17];
name : string[20];
abstba : real;
spanndr : integer;
abstreit : integer;
reitdruck : integer;
aussteller : string[15];
bemerkung : array[1..10] of string[50];
date : string[10];
ablage : string[11];
spannvorr : string[16];
backen : string[20];
spanndurm : string[4];
stkzeit : string[6];
rstzeit : string[4];
end;
platte = record
datens : daten;
tools : array[1..32] of werkzeug;
end;

Von dieser Struktur (platte) gab es eine Variable f:file of platte; und wurde genau so auf die Platte geschrieben. So eine Datei hat 4250Byte Länge.
Wen man das nachzählt und den Platzbedarf der Variablen ansieht, stimmt das genau überein.
Jetzt versuchte ich mit genau dieser Struktur eine Datei mit Lazarus zu lesen. Folge: Lazarus wollte übers Dateiende hinaus lesen.
Warum? Tja, weil Die Datentypen wie Integer und real in Lazarus einen anderen Speicherbedarf haben als in Borland Pascal.
Leider gibt es keinen Gleitkommatyp mit 6Byte mehr, also hab ich mir ein kleines Programm in BP (Das läßt sich tatsächlich noch unter XP installieren

geschrieben welches rekursiv die paar tausend Dateien einliest und mit dieser Struktur abspeichert:
Code: Alles auswählen
werkzeugneu = record
lrn : char;
negpos : string[3];
name : string[20];
comment : string[40];
identnr : string[10];
place : string[2];
number : string[4];
material : string[5];
xlong : single;
zlong : single;
cutpoint : longint;
radian : single;
end;
datenneu = record
version : string[4];
proznu : string[5];
nummer : string[17];
name : string[20];
abstba : single;
spanndr : longint;
abstreit : longint;
reitdruck : longint;
aussteller : string[15];
bemerkung : array[1..10] of string[50];
date : string[10];
ablage : string[11];
spannvorr : string[16];
backen : string[20];
spanndurm : string[4];
stkzeit : string[6];
rstzeit : string[4];
end;
platteneu = record
datens : datenneu;
tools : array[1..32] of werkzeugneu;
end;

Was passiert? Lazarus liest wieder übers Dateiende hinaus.
Speichere ich versuchsweise eine Datei dieser neuen Struktur mit Lazarus, hat diese 4140 Byte auf der Platte (Bei BP 4126)
Woher sind diese 14 Byte?
Hat wer eine Idee?
Zur Not speichere ich halt (mit BP) alle Dateien als Strukturierte TextDatei und lese sie neu ein.
Mir geht's nicht um die genaue Struktur, ich möchte nur die paar tausend Dateien retten (=einlesen können)
Ich weiß, ist lang geworden.
Danke für's Lesen
Christian