AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Kann man einen Record in einem String speichern?
Thema durchsuchen
Ansicht
Themen-Optionen

Kann man einen Record in einem String speichern?

Ein Thema von QuickAndDirty · begonnen am 2. Nov 2021 · letzter Beitrag vom 7. Nov 2021
Antwort Antwort
Seite 1 von 3  1 23      
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#1

Kann man einen Record in einem String speichern?

  Alt 2. Nov 2021, 15:36
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
TagString[-2] := @MyRecord; oder so machen?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Kann man einen Record in einem String speichern?

  Alt 2. Nov 2021, 16:10
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kann man einen Record in einem String speichern?

  Alt 2. Nov 2021, 16:50
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

Geändert von Rollo62 ( 2. Nov 2021 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#4

AW: Kann man einen Record in einem String speichern?

  Alt 3. Nov 2021, 08:04
Ich packe immer alles in ein Objekt rein, was nicht bei drei auf den Bäumen ist. *hehe*
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Kann man einen Record in einem String speichern?

  Alt 3. Nov 2021, 16:53
Es sind ja beides Managed types die sich selbst freigeben und mit Copy on Write arbeiten.
Wie bitte? Nur strings haben CoW.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Kann man einen Record in einem String speichern?

  Alt 3. Nov 2021, 17:24
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.

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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Nov 2021 um 17:27 Uhr)
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#7

AW: Kann man einen Record in einem String speichern?

  Alt 4. Nov 2021, 08:28
Der Benutzername ist Programm ��
Ja ich versuche coolen code vom Stigma zu befreien er sei schlechter als coole Datenstructuren.
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?

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.

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.

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.


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.

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?
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 4. Nov 2021 um 08:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Kann man einen Record in einem String speichern?

  Alt 4. Nov 2021, 08:53
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.929 Beiträge
 
Delphi 12 Athens
 
#9

AW: Kann man einen Record in einem String speichern?

  Alt 4. Nov 2021, 09:28
Eine Konvertierung in ein Textformat (JSON, XML usw.) beseitigt all diese Fallstricke.

Aber das ist doch sooo meta.

Naja.
Wenigstens habe ich jetzt Klarheit.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Kann man einen Record in einem String speichern?

  Alt 4. Nov 2021, 10:48
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 02:38 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