AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Blockread mit Struktur hängt bei double
Thema durchsuchen
Ansicht
Themen-Optionen

Blockread mit Struktur hängt bei double

Ein Thema von 0xDEAD · begonnen am 21. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
0xDEAD

Registriert seit: 9. Okt 2008
33 Beiträge
 
#1

Blockread mit Struktur hängt bei double

  Alt 21. Apr 2009, 12:08
Hallo,

ich hab hier grad ein komisches Problem das ich nicht verstehe.

Habe ein altes Programm "geerbt" und versuche das zu verstehen.

Ich habe ein Record die ich über ein blockread aus einer Datei lade.

Delphi-Quellcode:

 DtaHedT = record
   IdentStr: FileVersionT;
   ProjDirN: string[255];
   ProgNum: longint;
   DateTime: double;
   StopNum: longint;
   DataSrcN: string[255];
// hier folgt noch einiges
end;
  {$I-}blockread(f,DtaHed,SizeOf(DtaHedT),BytesRead);{$I+} Ich hab einiges weggelassen, aber das sollte zum verstehen reichen.
Soweit alles klar?
Die Datei wird ausgelesen und die Struktur gefüllt. Jedoch ab DateTime ist irgendwie der Wurm drinnen.
Die Daten scheinen verschoben.

Wenn ich den double in ein array[1..8] of byte ändere klappt alles und der Record sitzt wie ne Eins.

Was ist da los? Wo ist der Fehler?
Mit dem alten Code sollte es doch funktionieren.
<°)))o>< DON'T FEED THE TROLLS ><+++°>
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Blockread mit Struktur hängt bei double

  Alt 21. Apr 2009, 18:21
Hallo 0xDEAD,

Leider schreibst Du nicht wie alt Das Programm ist.
Darum versuch es mal mit
packed record dann könnte wieder alles passen.

Irgendwann wurden die Recordfelder auf (Maschinen)Wortgrenzen gelegt und das könnte die Verschiebung erklären.

Gruß
K-H
  Mit Zitat antworten Zitat
0xDEAD

Registriert seit: 9. Okt 2008
33 Beiträge
 
#3

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 09:58
In der Datei, die ich mir mit einem HexEditor angesehen habe, ist der double-Wert mit 8 Byte vertreten.
Genau an der richtigen Stelle und genau so lang wie ein double eben sein sollte.
<°)))o>< DON'T FEED THE TROLLS ><+++°>
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 10:09
Es geht nicht darum, daß ein Double 8 Byte sind, sondern wie sie im Speicher "zusammengequetscht" werden.

p80286 hat dir vermutlich schon den richtigen Hinweis gegeben.
Ein packed record könnte reichen.

Wenn du mal in deiner IDE unter Projekt->Optionen->Compiler schaust, gibt es dort ein Feld zum einstellen "Record-Felder ausrichten". Du hast da vermutlich eine 8 stehen, was auch ok ist.

Früher waren die Programme aber auf 1, also packed record ausgerichtet.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
0xDEAD

Registriert seit: 9. Okt 2008
33 Beiträge
 
#5

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 10:43
AHHH!!!



Jetzt hab ichs kapiert!

Mit nem packed record klappt es wirklich!
Aber das Umstellen von 8 auf 1 in den Projekt Optionen hat nicht hingehauen.

<°)))o>< DON'T FEED THE TROLLS ><+++°>
  Mit Zitat antworten Zitat
0xDEAD

Registriert seit: 9. Okt 2008
33 Beiträge
 
#6

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 10:58
Hab ich das Problem auch, wenn ich einen FileStream zum lesen verwende, statt dem betagten blockread ?
<°)))o>< DON'T FEED THE TROLLS ><+++°>
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 11:15
Ja. Das ist aber doch kein Problem. Das ist ganz normal in Dateien packed records zu verwenden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Blockread mit Struktur hängt bei double

  Alt 23. Apr 2009, 11:25
Zitat von 0xDEAD:
Mit nem packed record klappt es wirklich!
Aber das Umstellen von 8 auf 1 in den Projekt Optionen hat nicht hingehauen.
Die Umstellung in den Optionen ist auch nicht nötig, denke ich. Die Anweisung
packed record in der Typ-Deklaration sollte reichen.

TFileStream und BlockRead füllen einen Buffer... sollte bei beiden gleich gut (oder schlecht) funktionieren.

PS: Wenn wir schon dabei sind, falls der Typ "Real" auftaucht, ist da evtl. auch der Tausch mit Real48 nötig (solche Datenbanken hab' ich hier noch zu Hauf)
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:05 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