AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Binäre Datei aus Wetterstation auswerten! Aber wie??
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von duff · begonnen am 7. Okt 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von duff
duff

Registriert seit: 26. Jan 2005
Ort: Brühl
76 Beiträge
 
Delphi 2007 Professional
 
#1

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

  Alt 7. Okt 2006, 17:13
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:
// 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
Es wäre toll wenn mir jemand helfen könnte!!!
Angehängte Dateien
Dateityp: rar wetter_datei_141.rar (4,3 KB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

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

  Alt 7. Okt 2006, 17:19
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

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

  Alt 7. Okt 2006, 17:21
Klingt doch realtiv einfach:
Code:
Trailer
Datensatz
Datensatz
..
..
..
Datensatz
Delphi-Quellcode:
type
  TDatensatz = packed record
    unbekannt: Integer;
    Timestamp: Longword;
    Luftdruck: Single;
    WindStärke: Single;
    ..
    ..
  end;
Der erste Datensatz ist jetz an der Stelle: Dateianfang + sizeof(Trailer), Der zweite dann: Dateianfang + sizeof(Trailer) + sizeof(Datensatz).
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

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

  Alt 7. Okt 2006, 17:25
Hallo Michael,

ein Trailer steht immer am Ende ...

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von duff
duff

Registriert seit: 26. Jan 2005
Ort: Brühl
76 Beiträge
 
Delphi 2007 Professional
 
#5

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

  Alt 7. Okt 2006, 17:33
mal sehen ob ich das hinbekommen! Zur Not melde ich mich nochmal

Danke
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 7. Okt 2006, 17:35
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
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
Benutzerbild von duff
duff

Registriert seit: 26. Jan 2005
Ort: Brühl
76 Beiträge
 
Delphi 2007 Professional
 
#8

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

  Alt 7. Okt 2006, 18:29
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!!!
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#9

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

  Alt 7. Okt 2006, 18:53
Hallo duff,

himitsu wollte wohl die Aufmerksamkeit der Leser testen und hat zwei kleine Fehler eingebaut:

Delphi-Quellcode:
:
_nichts1: Array[0..2] of Byte; // <<-- "of" statt "or"
Regenmenge: Single; // Regenmenge in mm // <<-- "Single" statt "Byte"
:
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von duff
duff

Registriert seit: 26. Jan 2005
Ort: Brühl
76 Beiträge
 
Delphi 2007 Professional
 
#10

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

  Alt 7. Okt 2006, 19:00
ah sehr gut jetzt sehen die werte vernünftig aus

Jetzt hätte ich für´s erste noch eine letzte Frage

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz