AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Verschieden Datentypen in Stream speichern/laden
Thema durchsuchen
Ansicht
Themen-Optionen

Verschieden Datentypen in Stream speichern/laden

Ein Thema von dahead · begonnen am 24. Jun 2005 · letzter Beitrag vom 24. Jun 2005
Antwort Antwort
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#1

Verschieden Datentypen in Stream speichern/laden

  Alt 24. Jun 2005, 15:44
Hallo,

ich habe gerade folgendes Problem: ich möchte verschieden Werte aus u. g. Record in einen Stream speichern und dann wieder daraus laden.

Code:
type
  TALNode = record
   ID: Integer;
   Active: Boolean;
   AlarmName: String;
   ImageIndex: Integer;
   AlarmDate,
   AlarmTime: TDateTime;
  end;
Das speichern der Integer, Boolean und String Werte ist kein Problem. Die TDateTime Werte hab ich beim speichern probehalber in Strings umgewandelt (DateToStr, TimeToStr). Ist meiner Meinung nach leider nicht sehr elegant.

Das eigentliche Problem taucht nun beim Laden des Streams auf. Wie rück-konvertiere ich die TDateTime Werte?

Gespeichert wird so:

Code:
Len := Length(DateToStr(NodeArray[I].AlarmDate));
Stream.Write(Len, SizeOf(Len));
Stream.Write(PChar(DateToStr(NodeArray[I].AlarmDate))^, Len);
Geladen so (geht natürlich nicht):

Code:
Stream.Read(Len, SizeOf(Len));
SetLength(NodeArray[I].AlarmDate, Len);
Stream.Read(PChar(DateToStr(NodeArray[I].AlarmDate))^, Len);
Gibt es da eine bessere Möglichkeit? (Achja, ich möchte keine dpCollection usw. verwenden sondern Streams.)

Vielen Dank im Voraus!
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Verschieden Datentypen in Stream speichern/laden

  Alt 24. Jun 2005, 15:50
Also DateToStr ist nicht zu empfehlen, da es das im System eingestellte kurze Datumsformat benutzt und somit von Rechner zu Rechner verschieden sein kann.

Möglichkeit 1: TDateTime is einfach ein double, speichere es binär (8 Byte).

Möglichkeit 2: Speichere (Jahr, Monat, Tag) (ggf. Stunde, Minute, Sekunde) so wie du die Integer-Felder abspeicherst.

[Nachtrag]

Die separaten Felder AlarmDate und AlarmTime kannst du dir aber wohl sparen, ein TDateTime kann gleichzeitig Uhrzeit UND Datum beinhalten.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#3

Re: Verschieden Datentypen in Stream speichern/laden

  Alt 24. Jun 2005, 16:01
Erstmal vielen Dank für die schnelle Antwort Flocke!

Zu deiner ersten Möglichkeit: Ich hab gesehen, dass TDateTime ein Double ist, weiß aber nicht wie ich es binär speichern kann. könntest du mir da eventuell auf dir sprünge helfen (u. a. deshalb da ich das datum und die zeit nicht aufsplitten möchte, sprich die zweite möglichkeit leider entfällt (voerst zumindest)).

Bezüglich deines nachtrags: ja, das weiß ich. da ich allerdings zwei TDateTimePicker Controls (eines vom Typ Date, eines vom Typ Time) habe, speichere ich datum und zeit lieber separat (das Control kann zwar beide werte intern speichern, zeigt aber entweder datum oder halt uhrzeit an. bin da allerdings noch am optimieren).
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: Verschieden Datentypen in Stream speichern/laden

  Alt 24. Jun 2005, 16:01
Muss das nicht so lauten

Stream.Write(NodeArray[I].AlarmDate, SizeOf(TDateTime)); Also so geht das bei mir
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#5

Re: Verschieden Datentypen in Stream speichern/laden

  Alt 24. Jun 2005, 16:06
@franktron:

ich habe das gerade mal ausprobiert, und es funktioniert.
wunderbar: einfach und logisch. denke somit ist das problem beseitigt.

vielen dank franktron und flocke!
  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 15:21 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