Delphi-Quellcode:
Type TTrailer = packed Record
StartSignatur: LongWord; // =$21436587
unbekannt1, unbekannt2: LongWord;
_nichts: LongWord;
Datensaetze: LongWord; // Anzahl der Sätze in Datei
Uhrzeit_Beginn: LongWord; // Zeitstempel des ersten Datensatzes in Datei
Uhrzeit_Ende: LongWord; // Zeitstempel des letzten Datensatzes in Datei
End;
TDatensatz = packed Record;
StartSignatur: LongWord; // =$00000001
Uhrzeit: LongWord; // Uhrzeit in Sekunden seit 01.01.1900 00:00
AbsLuftdruck: Single; // absoluter Luftdruck in hPa (rel = abs + Offset)
Windstaerke: Single; // Windstärke in m/s (km/h = m/s * 3,6)
Windrichtung: Byte; // Windrichtung N=0, NNW=15
_nichts1: Array[0..2] or Byte;
Regenmenge: Byte; // Regenmenge in mm
Innentemperatur: Single; // Innentemperatur in C
Aussentemperatur: Single; // Außentemperatur in C
Innenfeuchte: Byte; // Innenfeuchte in %
_nichts2: Byte;
Aussenfeuchte: Byte; // Außenfeuchte in %
_nichts3: Byte;
End;
Man könnte auch die beiden Typen kombinieren und dann gemeinsam auslesen.
Dann muß man nur nach dem Auslesen die Signatur prüfen und wei welche Type dann gemeint ist.
Delphi-Quellcode:
Type TDatensatz = packed Record;
Case StartSignatur: LongWord of
$00000001: (
Uhrzeit: LongWord; // Uhrzeit in Sekunden seit 01.01.1900 00:00
AbsLuftdruck: Single; // absoluter Luftdruck in hPa (rel = abs + Offset)
Windstaerke: Single; // Windstärke in m/s (km/h = m/s * 3,6)
Windrichtung: Byte; // Windrichtung N=0, NNW=15
_nichts1: Array[0..2] of Byte;
Regenmenge: Single; // Regenmenge in mm
Innentemperatur: Single; // Innentemperatur in C
Aussentemperatur: Single; // Außentemperatur in C
Innenfeuchte: Byte; // Innenfeuchte in %
_nichts2: Byte;
Aussenfeuchte: Byte; // Außenfeuchte in %
_nichts3: Byte;
);
$21436587: (
unbekannt1, unbekannt2: LongWord;
_nichts4: LongWord;
Datensaetze: LongWord; // Anzahl der Sätze in Datei
Uhrzeit_Beginn: LongWord; // Zeitstempel des ersten Datensatzes in Datei
Uhrzeit_Ende: LongWord; // Zeitstempel des letzten Datensatzes in Datei
);
End;
Delphi-Quellcode:
Read(Datensatz, SizeOf(TDatensatz));
If Datensatz.Startsignatur = $00000001 Then Begin
// Datensatz
End Else If Datensatz.Startsignatur = $21436587 Then Begin
// Trailer
End Else Begin
// Fehler
End;