Dann schreibt diese kleine Delphi Programm das gleiche weg... (Oder liest es ein).
Auch ohne eine Monster-Class dafür zu Programmieren.
2014 noch Leuten dazu zu raten, die alten Pascal-Files zu verwenden
Man muss doch mit Streams auch nicht gleich eine riesige, overengineerte Monster-Class programmieren. (Generics sind allerdings ganz nett in dem Fall, meine ich. Kann sein, dass die Syntax falsch ist, ich bin dank der Preise der neuen Delphi-Versionen leider nie in den Genuss gekommen.)
Delphi-Quellcode:
type
TFortranStream = class
protected
FStream: TStream;
public
constructor Create(Stream: TStream);
procedure Read<T>(var Rec: T);
procedure Write<T>(const Rec: T);
end;
implementation
{$R *.dfm}
constructor TFortranStream.Create(Stream: TStream);
begin
FStream := Stream;
end;
procedure TFortranStream.Read<T>(var Rec: T);
var
Len: Byte;
begin
FStream.Read(@Len, sizeof(Byte));
FStream.Read(@Rec, sizeof(T));
end;
procedure TFortranStream.Write<T>(const Rec: T);
var
Len: Byte;
begin
Len := sizeof(T);
FStream.Write(@Len, sizeof(Len));
FStream.Write(@Rec, sizeof(Rec));
FStream.Write(@Len, sizeof(Len));
end;
type
TFortranRecord = packed record
A : Double;
C,
D : Integer;
S : array[1..3] of AnsiChar;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
F : File;
FileStream: TFileStream;
Fortran: TFortranStream;
Rec: TFortranRecord;
begin
FileStream := TFileStream.Create('Test.net');
Fortran := TFortranStream.Create(FileStream);
Rec.A := 1.0;
Rec.C := 2;
Rec.D := 2;
Rec.S[1] := 'A';
Rec.S[2] := 'B';
Rec.S[3] := 'C';
Fortran.Write<TFortranRecord>(Rec);
Fortran.Free;
FileStream.Free;
end;
(Fehlerbehandlung sollte da natürlich noch rein, hat dein Beispiel aber auch nicht).