![]() |
Binäre Datei aus Wetterstation auswerten! Aber wie??
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe ein Problem mit einer Binären Datei!! Es ist so das diese Datei Wetterdaten enthält Relativer Luftdruck Innentemperatur Inenfeuchte Außentemperatur Außenfeuchte Taupunkt Windchill Windgeschwindigkeit Windrichtung Gesamtregen Uhrzeit Datum Jetzt möchte ich diese Werte (die alle 15 min gespeichert werden) für ein eigenes Programm verwenden, um Statistiken zu erstellen. Ich habe leider noch nie mit fremden binären Dateien gearbeitet und weiß nicht wie ich an die Sache rangehen soll. Was ich zu der Codierung gefunden habe bringt mich bisher auch nicht weiter
Code:
Es wäre toll wenn mir jemand helfen könnte!!!
// 36 Bytes pro Datensatz
// 28 Bytes Trailer (also ( Dateigröße-28 ) / 36 = Anzahl der Historiensätze) // // Datensatz // --------- // 00-03 : 04 Byte / - / 01 00 00 00 // 04-07 : 04 Byte / longword / Uhrzeit in Sekunden seit 01.01.1900 00:00 // 08-0B : 04 Byte / single / absoluter Luftdruck in hPa (rel = abs + Offset) // 0C-0F : 04 Byte / single / Windstärke in m/s (km/h = m/s * 3,6) // 10 : 01 Byte / byte / Windrichtung N=0, NNW=15 // 11 : 01 Byte / - / 00 // 12 : 01 Byte / - / 00 // 13 : 01 Byte / - / 00 // 14-17 : 04 Byte / single / Regenmenge in mm // 18-1B : 04 Byte / single / Innentemperatur in C // 1C-1F : 04 Byte / single / Außentemperatur in C // 20 : 01 Byte / byte / Innenfeuchte // 21 : 01 Byte / - / 00 // 22 : 01 Byte / byte / Außenfeuchte // 23 : 01 Byte / - / 00 // // Trailer // ------- // 00-03 : 04 Byte / - / 87 65 43 21 // 04-07 : 04 Byte / - / ??? wer weis es ??? // 08-0B : 04 Byte / - / ??? wer weis es ??? // 0C-0F : 04 Byte / - / 00 00 00 00 // 10-13 : 04 Byte / longword / Anzahl der Sätze in Datei // 14-17 : 04 Byte / longword / Zeitstempel des ersten Datensatzes in Datei // 18-1B : 04 Byte / longword / Zeitstempel des letzten Datensatzes in Datei |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
am einfachsten schaffst du das ganze mit TFileStream. Öffne die Datei damit und springe mit "Position" an die Startposition wo die Daten los gehen. Dann kannst du mit Stream.Read die einzelnen Werte der Reihe nach wie sie in der Datei (laut spezifikation) stehen auslesen.
|
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
Klingt doch realtiv einfach:
Code:
Trailer
Datensatz Datensatz .. .. .. Datensatz
Delphi-Quellcode:
Der erste Datensatz ist jetz an der Stelle: Dateianfang + sizeof(Trailer), Der zweite dann: Dateianfang + sizeof(Trailer) + sizeof(Datensatz).
type
TDatensatz = packed record unbekannt: Integer; Timestamp: Longword; Luftdruck: Single; WindStärke: Single; .. .. end; |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
Hallo Michael,
ein Trailer steht immer am Ende ... Freundliche Grüße vom marabu |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
mal sehen ob ich das hinbekommen! Zur Not melde ich mich nochmal :roll:
Danke |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
mit dem Ansazt von luckie ist es eigentlich kein problem:
Delphi-Quellcode:
var
lDatensatz: TDatensatz; lStream : TFileStream; begin lStream := TFileStream.Create('history_ab_05.10.06.dat', fmOpenRead); try lStream.Read(lDatensatz, SizeOf(lDatenSatz)); //Jetzt steht in lDatensatz der erste Datensatz finally lStream.Free; end; |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
Delphi-Quellcode:
Man könnte auch die beiden Typen kombinieren und dann gemeinsam auslesen.
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; 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; |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
Hallo,
dass bringt mich schon mal richtig weiter.. Danke! Nur kann es sein das in der Datei noch sowas wie ein Header steht? Weil die Werte sind irgendwie Käse die da drin stehen!! Beispiel wäre ein Minuswert der Innentemperatur!!! |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
Hallo duff,
himitsu wollte wohl die Aufmerksamkeit der Leser testen und hat zwei kleine Fehler eingebaut:
Delphi-Quellcode:
Gruß Hawkeye
:
_nichts1: Array[0..2] of Byte; // <<-- "of" statt "or" Regenmenge: Single; // Regenmenge in mm // <<-- "Single" statt "Byte" : |
Re: Binäre Datei aus Wetterstation auswerten! Aber wie??
ah sehr gut jetzt sehen die werte vernünftig aus :thumb:
Jetzt hätte ich für´s erste noch eine letzte Frage :oops: Da ich nun das erste mal mit TFileStream arbeite... Wie gehe ich jetzt weiter vor um den 2,3,4... letzten Datensatz einzulesen und auszuwerten?? Danke euch allen für die tolle Hilfe :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz