Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   einlesen eines String aus einem TFileStream (https://www.delphipraxis.net/209149-einlesen-eines-string-aus-einem-tfilestream.html)

himitsu 5. Nov 2021 13:17

AW: einlesen eines String aus einem TFileStream
 
Aber gerade Beispiele, wie von Sequitar, haben das Potential für Probleme.

So lange der Code nur in einem Programm bleibt und die Streams niemals das Programm verlassen (speichern oder Datenübertragung), ist alles OK.
Alles was das Programm verlässt, da muß für veränderliche Typen im Stream dessen Format/Version mit gespeichert werden, oder man arbeitet ausschließlich mit unveränderlichen Typen.

veränderlich : String PChar Char
unveränderlich : AnsiString PAnsiChar AnsiChar UnicodeString WideString PWideChar WideChar UTF8String usw.


Ratet mal, warum im, bzw. seit dem Jahre 2009 so viele alte Codes nun nicht mehr richtig funktionieren.

Eisenmann 12. Nov 2021 17:33

AW: einlesen eines String aus einem TFileStream
 
Hi,
ich hatte mich zu früh gefreut. Es gab dann doch Unsicherheiten beim speichern und lesen.
Ich habe es jetzt mit Shortstring gemacht.


Code:
var daten:ShortString;
    l:integer;
l:=sizeof(daten);
fs.WriteBuffer(l, sizeof(l)); // +1
fs.WriteBuffer(daten,sizeof(daten));

Code:
fs.Read(ZText,d.l); skala.Version2s:=ZText;

So geht es.
Danke aber nochmals für die Hilfe.
Grüße aus dem Saarland
der Eisenmann.

BerndS 12. Nov 2021 19:39

AW: einlesen eines String aus einem TFileStream
 
Wenn sowieso der ganze Shortstring geschrieben wird, der ja 255 Ansichars enthält, ist SizeOf überflüssig.
Besser wäre es aber Length zu verwendern und dann nur die Zeichen, die der Shortstring enthält mit dem Längenbyte zu schreiben.
etwa so:
Delphi-Quellcode:
var
  daten:ShortString;
  l: Byte;
begin
  l := Length(daten);
  fs.WriteBuffer(l, sizeof(l));
  if l > 0 then
    fs.WriteBuffer(daten[1], l);
...
Aber wenn Daten immer 255 Zeichen enthält ist das Längenbyte überflüssig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 Uhr.
Seite 2 von 2     12   

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