• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

WS 2500 PC *.dat Datei mit Delphi auslesen

Begonnen von greggy80, 24.09.2004, 16:22:04

⏪ vorheriges - nächstes ⏩

greggy80

Hallo!

Habe alle Einträge im Forum durchforstet. Hier stand tatsächlich keine Lösung.
Ich habe mir die WS 2500 PC bestellt und möchte mit Delphi die *.dat-Dateien auslesen. In der Hilfe-Datei stand die Struktur für die Datei ja in C++ drin, also habe ich sie nach bestem Gewissen nach Delphi übernommen.
Aber das einzige, was mein Programm macht, ist unrealistische Zahlen auslesen. Ich habe es dann nochmal direkt über C++ versucht, da kamen ebenfalls surealistische Werte... nur andere  :)
Hat hier jemand eine Lösung?

PS: Wie kann man sich nur so einen Müll ausdenken, die Struktur ist völlig unverständlich und unnötig kompliziert...  :(
Allein schon das Verwenden von #pragma pack(1) halte ich für völlig sinnlos... der C++-Builder in der Standard-Version versteht diese Direktive nicht...

Jürgen

Kannst du mal die Struktur posten (sofern die veröffentlicht werden darf) ?

Das #pragma pack(1) macht schon Sinn, um die Daten platzsparend zu speichern, wenn man mehrere logische Felder hat (also nur Ja oder nein) kann man schon 16 Stück in einem Word unterbringen, ohne die Optimierung würde jedes 1 Byte belegen (wenn man die als char[] definiert).
Jürgen

Werner

Wenn Du Delphi kannst, solltest Du damit klarkommen!

type FileDataRecordPC_WS3 = record                           {64 byte je Datensatz 4 Byte Header}
                       Zeit : integer;
                       T1   : smallint;
                       F1   : byte;
                       A1   : byte;
                       T2   : smallint;
                       F2   : byte;
                       A2   : byte;
                       T3   : smallint;
                       F3   : byte;
                       A3   : byte;
                       T4   : smallint;
                       F4   : byte;
                       A4   : byte;
                       T5   : smallint;
                       F5   : byte;
                       A5   : byte;
                       T6   : smallint;
                       F6   : byte;
                       A6   : byte;
                       T7   : smallint;
                       F7   : byte;
                       A7   : byte;
                       T8   : smallint;
                       F8   : byte;
                       A8   : byte;

                       TI   : smallint;
                       FI   : byte;
                       AI   : byte;

                       DI   : smallint;
                       AD   : byte;

                       WS  : smallint;
                       WR  : smallint;
                       WB  : byte;
                       WA  : byte;

                       R   : smallint;
                       RA  : byte;

                       SL  : integer;                      {4 byte}
                       ASL : byte;

                       SW  : integer;
                       ASW : byte;

                       X1  : Word;

                      end;


Werner

greggy80

Vielen Dank an Dich, Werner! Hat sofort geklappt!

Ich hatte mir folgende Struktur vorgstellt (direkt von der C++ Struktur übernommen, nur statt struct habe ich record verwendet. Und statt unsigned short und so was halt die für Delphi geltenden Datentypen):

 type TTime = Integer

 type TWSPC_TEMP_FEUCHTE = record
   temp :    Smallint;
   feuchte : Byte;
   flag :    Byte;
 end;

 type TWSPC_DRUCK = record
   druck : Smallint;
   flag  : Byte;
 end;

 type TWSPC_WIND = record
   staerke :  Smallint;
   richtung : Smallint;
   breite :   Byte;
   flag :     Byte;
 end;

 type TWSPC_REGEN = record
   zaehler : Smallint;
   flag :    Byte;
 end;

 type TWSPC_HELL = record
   wert : Integer;
   flag : Byte;
 end;

 type TWSPC_DAUER = record
   zaehler : Integer;
   flag :    Byte;
 end;

 type TWSPC_DATEN = record
   zeit :       TTime;
   temp :       Array[0..9] of TWSPC_TEMP_FEUCHTE;
   druck :      TWSPC_DRUCK;
   wind :       TWSPC_WIND;
   regen :      TWSPC_REGEN;
   helligkeit : TWSPC_HELL;
   dauer :      TWSPC_DAUER;
 end;