Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#18

AW: Einlesen einer FORTRAN Binärdatei mit Delphi

  Alt 17. Jul 2014, 11:45
Hier eine Funktion die eine Double, zwei Integer Zahlen und ein Array der Länge 3 vom Datentyp Char in eine Binärdatei schreibt.
Inhalt der Binärdatei aus dem Hexeditor:
Code:
13000000000000F03F020000000200000041424313
OK Formatieren wir das mal so das man es lesen kann...

Code:
13 00 00 00 00 00 00 F0 3F 02 00 00 00 02 00 00 00 41 42 43 13
Lassen wir mal die $13 vor und nach dem Datensatz außer acht...

Dann schreibt diese kleine Delphi Programm das gleiche weg... (Oder liest es ein).
Auch ohne eine Monster-Class dafür zu Programmieren.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
{$A1}

type
  TB = record
         Len1 : byte;
         A : Double;
         C,
         D : Integer;
         S : array[1..3] of AnsiChar;
         Len2 : byte;
       end;

// 13 00 00 00 00 00 00 F0 3F 02 00 00 00 02 00 00 00 41 42 43 13

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    B : TB;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  F : File;
begin
  Assignfile(F,'Test.net');
  rewrite(F,1);
  B.Len1 := $13;
  B.Len2 := $13;
  B.A := 1.0;
  B.C := 2;
  B.D := 2;
  B.S[1] := 'A';
  B.S[2] := 'B';
  B.S[3] := 'C';
  Blockwrite(F,B,Sizeof(B));
  Closefile(F);
end;

end.
Aber das wird trotzdem nicht zielführend sein, da der Text ABC keine längen Informationen hat...
Es sei den, Texte werden mit einem $13 beendet.. Also kein längenbyte und nicht 0 terminiert.
Oder das letzte $13 ist einfach ein CR weil Datei nicht als Bin Datei geöffnet wurde.

Boh... Mach doch mal ein richtiges Beispiel und fülle die Daten mit einem Pattern.

Delphi-Quellcode:
var
  B : Byte;
  W : Word;
  L : Integer;
  S1 : String
  S2 : String;
  N : Byte;
begin
  B := $55;
  W := $3388;
  L := $11223344;
  S1 := 'Das ist ein cooler Text';
  S2 := 'Noch einer';
  N := $99;
  ...
end;
In Fortran natürlich und bitte 3x hinter einander weg schreiben... und bitte erst dem Link aus meinen mein Posting #16 lesen.

Mavarik
  Mit Zitat antworten Zitat