![]() |
TDictionary speichern
Hallo,
immer mehr liebe ich die Vorzüge des TDictionary ;-) Nun möchte ich ein solches (am besten in einen Stream) speichern um es anderweitig wiederverwenden zu können. Ich suche seit etlicher Zeit, aber so richtig den Durchbruch habe ich nicht geschafft, es sei denn, ich bastle mir da komplett etwas eigenes, was die Wertpaare speichert, aber da muss es doch eigentlich etwas "fertiges" geben? Hat jemand den entscheidenden Tip für mich? Es geht um ein primitives TDictionary<string, string>; Ciao Stefan |
AW: TDictionary speichern
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Classes, System.Generics.Collections; procedure Main; var KoschkesStrings: TDictionary<string, string>; I: Integer; Stream: TStream; Pair: TPair<string, string>; KoschkesData: string; begin KoschkesStrings := TDictionary<string, string>.Create; try for I := 1 to 100 do begin KoschkesStrings.Add(I.ToString, (I * I).ToString); end; KoschkesData := ''; for Pair in KoschkesStrings do begin KoschkesData := KoschkesData + Pair.Key + ':' + Pair.Value + sLineBreak; end; Stream := TStringStream.Create(KoschkesData); try Writeln((Stream as TStringStream).Datastring); finally Stream.Free; end; finally KoschkesStrings.Free; end; end; begin try Main; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; Readln; end. |
AW: TDictionary speichern
danke, aber das geht in die Richtung, an die ich beim "selber basteln" dachte...
Denn zurück aus Stream ins TDictionary müssen ja die Keys anhand des ':' wieder von den Values getrennt werden und die Pärchen anhand des sLinebreak... Dumm, wenn dann in den Values auch mal ein sLinebreak vorkommt! Gibt es da wirklich nichts fertiges? Ciao Stefan |
AW: TDictionary speichern
.. als Trenner kannst Du doch nehmen was Du willst.
Grüße Klaus |
AW: TDictionary speichern
[Ohne Gewähr]
Aus dem Dictionary einen JSON String machen, speichern, einlesen, wieder ein TDictionary draus machen. Lesen u.a.: Marshalling: ![]() ![]() ![]() |
AW: TDictionary speichern
Ja, ein JSON-Array fände ich auch super.
Ansonsten könntest du die Strings in TBytes umwandeln, und per ByteToHEX-Encoding 1:1 speichern, oder mit Base64 kodieren, wenn dir das sicherer erscheint. Ich denke aber das es womöglich den Aufwand nicht Wert ist. Deshalb +1 für JSON :thumb: |
AW: TDictionary speichern
Zitat:
|
AW: TDictionary speichern
Zitat:
![]() |
AW: TDictionary speichern
Fertig gibt es da wohl noch nichts, aber man kann das mit überschaubarem Aufwand selbst machen:
Delphi-Quellcode:
procedure Test;
type TDict = TDictionary<string,string>; TDictPair = TPair<string,string>; TDictArray = TArray<TDictPair>; var arr: TDictArray; dict: TDict; pair: TDictPair; theJSONString: string; ser: TJsonSerializer; begin dict := TDict.Create; try dict.Add('Hallo', 'Welt'); dict.Add('RAD', 'Studio'); arr := dict.ToArray; ser := TJsonSerializer.Create; try theJSONString := ser.Serialize(arr); finally ser.Free; end; finally dict.Free; end; ser := TJsonSerializer.Create; try arr := ser.Deserialize<TDictArray>(theJSONString); finally ser.Free; end; dict := TDict.Create; try for pair in arr do begin dict.Add(pair.Key, pair.Value); end; Assert(dict['Hallo'] = 'Welt'); Assert(dict['RAD'] = 'Studio'); finally dict.Free; end; end; |
AW: TDictionary speichern
Danke,
das wollte ich eben mal ausprobieren, aber das scheint es in Berlin 10.1 noch nicht zu geben :-( Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:53 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