![]() |
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:
oder so machen?
TagString[-2] := @MyRecord;
|
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. |
AW: Kann man einen Record in einem String speichern?
Vielleicht so ?
![]() Ich würde mir aber die JsonSerializer und verschiedenen Libraries dazu mal ansehen, statt String direkt in einen modernen JsonString. ![]() |
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*
|
AW: Kann man einen Record in einem String speichern?
Zitat:
|
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 |
AW: Kann man einen Record in einem String speichern?
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Auf jedenfall ist für meinen Verwendungszewck vor allem ARC das wichtige Attribut. CoW wäre aber schon nice to have. Zitat:
|
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. |
AW: Kann man einen Record in einem String speichern?
Zitat:
Aber das ist doch sooo meta. Naja. Wenigstens habe ich jetzt Klarheit. |
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:
|
AW: Kann man einen Record in einem String speichern?
Zitat:
Mittlerweile verschicke ich so oft Daten über Netzwerk oder Pipes das ich ohne irgend einen standartisierten Container verzweifeln würde. JSON ist nicht ganz meins. Ich verwende eine Komponente die auf eine Memtable aufsetzt. Die Komponente kann man als Zeiger anhängen oder übergeben. Strings oder Dynarray verwende ich zum Transport, erzeugen und intepretieren macht die Komponente selber. Klappt wunderbar. |
AW: Kann man einen Record in einem String speichern?
Zitat:
Ist ein einfacher String, kann alles Mögliche packen, und ist dabei relativ flott. Für alle einigermaßen normalen Anwendungsfälle würde ich das schon als erste Wahl in Betracht ziehen, oder man baut sich halt was Eigenes was hier und da mal klemmt und womöglich nur einen Bruchteil der Möglichkeiten hat. Und für die Binärfans gibt es ja noch BSON :-) |
AW: Kann man einen Record in einem String speichern?
Auch XML gibt es in binär oder zumindestens "komprimiert" (gleiche "Wörter", wie z.B. Namen der Nodes und Attribute werden zusammengefasst) ... hat sich nur nicht so richtig durchgesetzt ... ist halt nicht menschenlesbar.
|
AW: Kann man einen Record in einem String speichern?
Etwas weit hergeholt aber vielleicht dennoch brauchbar? (da ich gerade nicht genau weiß wo du da was wie verdrahten wolltest)
Dein Record/Object im Speicher komprimieren (per ZLib als Beispiel), diesen Stream per Base64 in einen String wandeln, an dein ListItem ranheften, bei abruf auf umgekehrten weg zurück. |
AW: Kann man einen Record in einem String speichern?
Zitat:
Vielleicht gibt es eine Erhebung wieviel JSON/XML genutzt wird. Ich vermute insbesondere im Web gibt es fast 95% JSON zum Datenaustausch, und kaum XML, nur auf Desktop wird XML wohl noch öfters benutzt, auch als Dokumentenformate. |
AW: Kann man einen Record in einem String speichern?
Das Gleiche nicht ganz.
XML kann man anders verschachteln, z.B. Attribute und SubNodes zusammen im Node. Und dadurch, dass vieles Doppelt vorkommt (schließender Node), ist hier die Fehlerbereinigung etwas einfacher möglich. (nja, wie an den Heuristiken für HTML vs. XHTML in vielen Browsern geht's so lala) Es gibt auch JSON-artig verschachteltes INI-artiges (INI selber hat ja praktisch keine Standards), welche für manuelle Änderungen einfacher sind, nur mit dem Nachteil, wie in Python, also die Gruppen haben kein Ende, allerdings wird mit unsichtbaren Zeichen (Einzückung) gearbeitet, aber dafür raucht nicht gleich alles komplett ab, wenn in einer/mehreren Zeile(n) ein Syntaxfehler*innen steckt. Wenn es nur um die Größe ginge (OK, ein gzip/ZLib drüber macht auch alles nochmal kleiner), dann dürfte das binäre XML womöglich kleiner sein, als BSON. |
AW: Kann man einen Record in einem String speichern?
Zitat:
XML wird gerne bei .docx und Adobe benutzt, aber das ist dann schon mehr als nur ein einfacher Datenaustausch. Ich sehe JSON mittlerweile als Default-Austauschformat for "normale" Zwecke, so wie früher die INI-Datei. |
AW: Kann man einen Record in einem String speichern?
XML kann über Schema automatisiert validiert werden. Die nötigen Programme sind seit vielen Jahren standardisiert. Und sowas wie XSLT und XSL-FO fehlt auch unter JSON. man ist zwar dabei, das hier und da nachzurüsten, hat damit aber keine Eile. Denn JSON ist ein Format für Datenübertragung, nicht so sehr für Dateien.
Hingegen sehe ich als "Nachfolger" der INI Datei heute eher SQLite. |
AW: Kann man einen Record in einem String speichern?
Zitat:
|
AW: Kann man einen Record in einem String speichern?
So lange das Ding dann nicht auch mal schnell ohne Hilfsmittel per Hand bearbeitet werden soll. :stupid:
|
AW: Kann man einen Record in einem String speichern?
Zitat:
|
AW: Kann man einen Record in einem String speichern?
Dafür gibt es zum Glück wenigstens noch eine portable 1-EXE-Variante, aber die muß man dann erstmal mithaben.
OK, draufkopieren und starten muß man sie auch noch dürfen. |
AW: Kann man einen Record in einem String speichern?
Zitat:
Klar, wenn man Daten sendet oder empfängt ist eigentlich immer bekannt was für ein Typ auf welchem Feld steht. Aber warum soll ich im Quelltext, jedesmal wenn ich zugreife die Konvertierung selber machen und sicherstellen dass das Datenformat passt? Klassen für JSON schaffen da ein wenig Abhilfe, aber es bleibt bis zum letzten Wert die Ungewissheit das man auch das findet was man erwartet. Leider ist das Schema bei JSON nicht verpflichtend anzugeben, ich habe auch noch keine Daten gesehen die es verwendet hätten. Somit ist mir persönlich etwas lieber was automatisch sein Datenformat mit dabei hat. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:22 Uhr. |
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