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;
Ich will nix über die Struktur hören, vor 20 Jahren war das eine hervorragende Idee und ist nicht mehr zu ändern.
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;
Man sieht ich habe real mit single und integer mit longint vertauscht, welche in BP und FPC den gleichen Platz brauchen (sollten ) (jeweils 4Byte)
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