Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#7

Re: Binäre Datei aus Wetterstation auswerten! Aber wie??

  Alt 7. Okt 2006, 17:53
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat