Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Kann man einen Record in einem String speichern? (https://www.delphipraxis.net/209150-kann-man-einen-record-einem-string-speichern.html)

QuickAndDirty 2. Nov 2021 14:36

Kann man einen Record in einem String speichern?
 
Es geht um eine FMX App.
Kann man einen Record in einem String speichern und wenn ja wie?
Es sind ja beides Managed types die sich selbst freigeben und mit Copy on Write arbeiten.
Es geht mir darum einen Record in eine der TAG Variablen Von TListboxItem von FMX speichern.

Tag ist vom Typ NativeInt
TagString ist vom Typ String
TagObject ist vom Typ TObject
TagFloat ist vom Typ Float

Kann ich sowas wie
Delphi-Quellcode:
TagString[-2] := @MyRecord;
oder so machen?

Der schöne Günther 2. Nov 2021 15:10

AW: Kann man einen Record in einem String speichern?
 
Der Benutzername ist Programm 😁

Ich würde mir mal das Speicherlayout von Records und Strings anschauen, ob dort die Referenzzähler an der gleichen Stelle sitzen.

Rollo62 2. Nov 2021 15:50

AW: Kann man einen Record in einem String speichern?
 
Vielleicht so ?
http://francois-piette.blogspot.com/...rd-tofrom.html

Ich würde mir aber die JsonSerializer und verschiedenen Libraries dazu mal ansehen,
statt String direkt in einen modernen JsonString.
https://grijjy.github.io/GrijjyFound...alization.html

Incocnito 3. Nov 2021 07:04

AW: Kann man einen Record in einem String speichern?
 
Ich packe immer alles in ein Objekt rein, was nicht bei drei auf den Bäumen ist. *hehe*

Stevie 3. Nov 2021 15:53

AW: Kann man einen Record in einem String speichern?
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1496967)
Es sind ja beides Managed types die sich selbst freigeben und mit Copy on Write arbeiten.

Wie bitte? Nur strings haben CoW.

himitsu 3. Nov 2021 16:24

AW: Kann man einen Record in einem String speichern?
 
Ja, nur LongStrings.

dynamische Arrays nicht.

Intern ist ein LongString (AnsiString/UnicodeString) zwar auch nur fast ein "dynamisches" Array, aber leider kann man Copy-On-Write nicht für andere Array-Typen aktivieren. :cry:

Delphi-Quellcode:
A := B; // nur Referenzzähler erhöhen
A[0] := 123; // nur bei String wird vorher automatisch ein Unique ausgeführt ... bei anderen Arrays änders du den Wert in Beiden

// außer
A := Copy(B); // wirklich kopieren
A[0] := 123; // ändert nur A

QuickAndDirty 4. Nov 2021 07:28

AW: Kann man einen Record in einem String speichern?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1496970)
Der Benutzername ist Programm ��

Ja ich versuche coolen code vom Stigma zu befreien er sei schlechter als coole Datenstructuren.
Zitat:

Zitat von Der schöne Günther (Beitrag 1496970)
Ich würde mir mal das Speicherlayout von Records und Strings anschauen, ob dort die Referenzzähler an der gleichen Stelle sitzen.

Meinst Emba hat verschiedene ARC systeme ? Eins für Records , ein anderes für LongStrings und ein drittes für Dyn-Arrays?

Zitat:

Zitat von Rollo62 (Beitrag 1496974)
Vielleicht so ?
http://francois-piette.blogspot.com/...rd-tofrom.html

Ich würde mir aber die JsonSerializer und verschiedenen Libraries dazu mal ansehen,
statt String direkt in einen modernen JsonString.
https://grijjy.github.io/GrijjyFound...alization.html

Sorry es geht mir nicht ums serialisieren. Ich möchte einfach nur an ein FMX Objekt (TListBoxItem ) einen Record anhängen. So wie man auch Integers, floats, Objects und Strings an ein TListBoxItem anhängen kann. Nach Möglichkeit so, dass der Refcount mitspielt.

Zitat:

Zitat von Incocnito (Beitrag 1496993)
Ich packe immer alles in ein Objekt rein, was nicht bei drei auf den Bäumen ist. *hehe*

Ich bin für viele Dinge zu Daten-Records in TArrays<Datenrecord> übergegangen. Vor allem weil man sowas auch mal als Rückgabe Wert haben kann ohne Bauchschmerzen zu bekommen was das Zerstören der Objekte angeht.

Zitat:

Zitat von Stevie (Beitrag 1497031)
Zitat:

Zitat von QuickAndDirty (Beitrag 1496967)
Es sind ja beides Managed types die sich selbst freigeben und mit Copy on Write arbeiten.

Wie bitte? Nur strings haben CoW.

Wenn ich einen Record als Parameter einer Funktion übergebe und ihn in der Funktion nur lesend verwende, dann wird der doch wie ein VAR, IN oder CONST Parameter vom Compiler behandelt oder nicht?
Auf jedenfall ist für meinen Verwendungszewck vor allem ARC das wichtige Attribut. CoW wäre aber schon nice to have.


Zitat:

Zitat von himitsu (Beitrag 1497032)
Ja, nur LongStrings.

dynamische Arrays nicht.

Intern ist ein LongString (AnsiString/UnicodeString) zwar auch nur fast ein "dynamisches" Array, aber leider kann man Copy-On-Write nicht für andere Array-Typen aktivieren. :cry:

Delphi-Quellcode:
A := B; // nur Referenzzähler erhöhen
A[0] := 123; // nur bei String wird vorher automatisch ein Unique ausgeführt ... bei anderen Arrays änders du den Wert in Beiden

// außer
A := Copy(B); // wirklich kopieren
A[0] := 123; // ändert nur A

Es geht ja um records also haben Records genug mit String oder TObject gemein das ich sie als TagString oder TagObject speichern kann und die Refcount Mechanik erhalten bleibt?

himitsu 4. Nov 2021 07:53

AW: Kann man einen Record in einem String speichern?
 
hmmmmm .... nein .... joar

Wenn in dem Record irgendwas Zeigerartiges oder was mit Speicherautomatik drin steht,
dann kann darf das schonmal nicht biniär in einen anderen Speicher kopiert werden, unter Missachtung der Speichermechianissmen.
Außerdem muß man bei Binär aufpassen, dass einem die Stringbehandlung nicht die Daten schrottet. (z.B. bei konvertierung zwischen ANSI und Unicode)

Eine Konvertierung in ein Textformat (JSON, XML usw.) beseitigt all diese Fallstricke.

QuickAndDirty 4. Nov 2021 08:28

AW: Kann man einen Record in einem String speichern?
 
Zitat:

Zitat von himitsu (Beitrag 1497049)
Eine Konvertierung in ein Textformat (JSON, XML usw.) beseitigt all diese Fallstricke.

:(
Aber das ist doch sooo meta.

Naja.
Wenigstens habe ich jetzt Klarheit.

himitsu 4. Nov 2021 09:48

AW: Kann man einen Record in einem String speichern?
 
Ich und auch zuviele Andere hatten früher auch öfters mal Binärzeugs in String (AnsiString) und nun rate mal was dann im Jahr 2009 passierte. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr.
Seite 1 von 3  1 23      

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