AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String(unicode) in einen Stream speichern/Laden
Thema durchsuchen
Ansicht
Themen-Optionen

String(unicode) in einen Stream speichern/Laden

Offene Frage von "DataCool"
Ein Thema von DataCool · begonnen am 5. Jan 2010 · letzter Beitrag vom 5. Jan 2010
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 12:03
Hi Leute,

ich möchte ein paar Propertys einer Klasse in einen Stream schreiben,
diesen verschicken(das ist nicht das Problem) und wieder einlesen.
Unter den Propertys befinden sich logischerweise auch ein paar Strings,
für diese Strings sollten alle Zeichensätze unterstüzt werden.

Worauf muss ich jetzt beim Schreiben/Laden des Streams achten, damit folgende Vorraussetzungen erfüllt sind :

- Lauffähig unter Delphi2007 und Delphi2010
- Unterstüzung aller Zeichensätze

Welche Stringtypen müssen jetzt verwendet werden ?
String, Pchar, PAnsiChar, pWideChar, ... ?

Für ein paar kurze Anregungen/Erklärungen wäre ich dankbar,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 12:52
für diese Strings sollten alle Zeichensätze unterstüzt werden. Also Unicode

> bis D2007 : WideString, WideChar-Array und PWideChar
> ab D2009 : zusätzlich noch UnicodeString

Abgesehn von einem statischen Array besteht alles aus einem Pointer und du mußt die Text-Daten selber in den Stream übertragen.

Dazu gibt es noch TStringStream, welcher aber vor D2009 nur ANSI kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 13:10
@himitsu:

Es war mir schon klar das ich den String selber in den Stream schreiben muss.
Nur welche Stringtypen verwende ich das es unter den oben genannten Delphi-Version einwandfrei funktioniert und dabei Unicode unterstüzt ?

Hier ein wenig Code-Bsp.:
Delphi-Quellcode:
{ TDummyTest }


procedure TDummyTest.SaveToStream(AStream: TStream);
Var iLen : SmallInt;
begin
  AStream.Position := 0;
  AStream.Size := 0;
  AStream.Write(FIdent,SizeOf(Integer));
  AStream.Write(FKind,SizeOf(Integer));
  iLen := Length(FStr1);
  AStream.Write(iLen,SizeOf(iLen));
  AStream.Write(PChar(FStr1)^,iLen); // Hier PChar oder doch PWideChar ?
  AStream.Write(FRes,SizeOf(SmallInt));
end;

procedure TDummyTest.LoadFromStream(AStream: TStream);

    procedure ReadStr(Var sTarget : String);
    Var iLen : SmallInt;
        pch : PChar; // oder PWideChar ?
        buffer : array[0..4096] of char; // Alternativ
    begin
      AStream.Read(iLen,SizeOf(SmallInt));
      GetMem(pch,iLen);
      try
      //AStream.Read(pCh^,iLen);
      
      // alternativ
      AStream.Read(buffer[0],iLen);
      sTarget := copy(buffer,1,4);
      finally
        FreeMem(pCh,iLen);
      end;
    end;

begin
  AStream.Read(FIdent,SizeOf(Integer));
  AStream.Read(FKind,SizeOf(Integer));

  ReadStr(FStr1);

  AStream.Read(FRes,SizeOf(SmallInt));
end;
Wie bekomm ich diesen Code, funktionsfähig für alle Zeichensätze und unter D2007 + D2010 lauffähig ?

Danke,

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#4

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 14:21
Zitat von DataCool:
Hier PChar oder doch PWideChar ?
http://www.delphipraxis.net/internal...115844#1115844
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 14:34
Hi Himitsu,

den Thread hatte ich sogar schon gelesen bin mir bei der Bedeutung aber noch nicht 100% sicher,
ist es also richtig das ich für meinem Fall mit PAnsiChar arbeiten soll
und zum Speichern der Länge Länge * SizeOf(PAnsiChar) verwenden, richtig ?

Danke

Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 14:40
[quote="DataCool"]SizeOf(PAnsiChar)/quote]
Du meinst wohl SizeOf(AnsiChar) ohne das P, sonst wären das ein paar Byte zu viel pro Zeichen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

Re: String(unicode) in einen Stream speichern/Laden

  Alt 5. Jan 2010, 14:45
Wenn du nur ANSI haben willst, dann ist AnsiString, PAnsiChar und SizeOf(AnsiChar) OK,
ansonsten eben WideString, PWideChar und SizeOf(WideChar).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 08:46 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