ich habe Daten, die in einen alten C-Programm in der folgende Struktur vorgehalten und als solche direkt binär gespeichert wurden:
Code: Alles auswählen
 
struct rl_date 
{
   char         vers[6];        /* Versionsstring zur Erkennung (max. 5 Zeichen!!)*/
   char         name[128];      /* Name der Maschine */
/* allg. Maschienendaten */
   double       gewicht;        /* Gesamtgewicht (fahrfertig) in kg */
   double       sx;             /* Koordinaten des Schwerpunktes (m) */
   double       sy;
   double       radst;          /* Radstand (m) */
   double       flaeche;        /* Frontfl<E4>che (m^2) */
   double       cw;             /* cw-Wert */
   double       umfang;         /* Umfang des Antriebsrades (m) */
   double       mu;             /* Haftkoef. Rad-Stra<DF>e */
/* Getriebe- und Antriebsdaten */
   double       i_prim;         /* Prim<E4>r<FC>bersetzung */
   int          z_ritz;         /* # Z<E4>hne Ritzel */
   int          z_blatt;        /* # Z<E4>hne Kettenblatt */
   int          gaenge;         /* # G<E4>nge */
   double       i_getr[MAXGANG];/* die Getriebe-<DC>bersetzungen */
   double       i_ges[MAXGANG]; /* die Gesamt-<DC>bersetzungen */
   double       n_kuppl;        /* Einkupplungsdrehzahl (U/min) */
   double       n_schalt;       /* Schaltdrehzahl (U/min)*/
/* Kennlinien-Daten */
   int          pnt;            /* # St<FC>tzpunkte */
   double       n[MAXPNT];      /* Array mit den Drehzahlen */
   double       n_max;          /* Maximal-Drehzahl */
   double       p[MAXPNT];      /* Array mit der Leistung dazu */
   double       p_max;          /* maximale Leistung */
   double       n_p_max;        /* Drehzahl von P_max */
   double       m[MAXPNT];      /* Array mit dem Drehmoment */
   double       m_max;          /* maximales Drehmoment */
   double       n_m_max;        /* Drehzahl von M_max */
/* Umwelt-Daten */
   double       steigung;       /* Hangsteigung (%) */
   double       wind;           /* Windgeschwindigkeit (km/s) */
   double       fahrer;         /* Gewicht des Fahrers (kg) */ 
   double       zuladung;       /* Zuladung (kg) */
};
 Code: Alles auswählen
 
type
  TRoadLoadData = record
    Vers : array[0..5] of char;
    //Name : string[127];
    Name : array[0..127] of char;
    //dummy1, dummy2 : char;
    Gewicht : double;   { Gewicht der Maschine in kg }
    sx, sy : double;    { Koordinaten des Schwerpunkts [m]}
    Radstand : double;  { Radstand [m] }
    Flaeche : double;   { Windwiderstandsflaeche [m²] }
    cw : double;        { Luftwiderstandsbeiwert (cw-Wert) [-] }
    Umfang : double;    { Radumfang Antriebsrad [m] }
    mu : double;        { Haftreibungskoeffizient Rad-Strasse [-] }
    { Getriebe- und Antriebsdaten }
    i_prim : double;
    z_ritzel : int32; { Anzahl der Zaehne auf dem Ritzel [-] }
    z_blatt : int32;  { Anzahl der Zaehne auf dem Kettenblatt [-] }
    n_gaenge : int32; { Anzahl Gaenge [-] }    { <----------- bis hierhin werden die Daten richtig eingelesen}
    z_ritzel : integer; { Anzahl der Zaehne auf dem Ritzel [-] }
    z_blatt : integer;  { Anzahl der Zaehne auf dem Kettenblatt [-] }
    n_gaenge : integer; { Anzahl Gaenge [-] }
    i_getriebe : array[1..MAXGANG] of double;
    i_ges : array[1..MAXGANG] of double;
    n_kuppl : double;   { Einkuppeldrehzahl [U/min] }
    n_schalt : double;  { Schaltdrehzahl [U/min] }
    { Kennliniendaten }
    pnt : integer;
    n : array[1..MAXPNT] of double;   { Array der Drehzahlen d. Stuetzpunkte }
    n_max : double;     { Maximaldrehzahl }
    p : array[1..MAXPNT] of double;	  { Array mit der Leistung dazu }
    p_max : double;		  { maximale Leistung }
    n_p_max : double;	  { Drehzahl von P_max }
    m : array[1..MAXPNT] of double;	  { Array Drehmoment-Kennlinie }
    m_max : double;		  { maximales Drehmoment }
    n_m_max : double;	  { Drehzahl von M_max }
    { Umwelt-Daten }
    Steigung : double;	{ Hangsteigung [%] }
    Wind : double;		  { Windgeschwindigkeit [km/h] }
    Gew_Fahrer : double;  { Gewicht des Fahrers [kg] }
    Gew_Zuladung : double;  { Zuladung [kg] }
  end;                                      
 Code: Alles auswählen
 
memBuffer := TMemoryStream.Create;
memBuffer.LoadFromFile (filename); 
nbytes := memBuffer.Read(RoadLoadData,1 * SizeOf(RoadLoadData));
memBuffer.Free;
 Warum kommt die FreePascal-Routine aus dem Tritt?
Ciao,
Photor
PS: heutzutage würde man das wohl besser als ASCII oder im INI-File-Format speichern.



 Allerdings ist das nur beim Kopieren hier in's Forum passiert - im File steht's nicht doppelt. Unten nochmal die Definition aus dem .pas-File in einem Schwung (und mit den auskommentierten Versuchen mit integer und int32 bzw. der letzte Versuch mit int16, der aber erst recht alles ):
  Allerdings ist das nur beim Kopieren hier in's Forum passiert - im File steht's nicht doppelt. Unten nochmal die Definition aus dem .pas-File in einem Schwung (und mit den auskommentierten Versuchen mit integer und int32 bzw. der letzte Versuch mit int16, der aber erst recht alles ):
 
  Verein
Verein 
 Links
Links Suche
Suche