AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TDictionary speichern

Ein Thema von skoschke · begonnen am 25. Feb 2019 · letzter Beitrag vom 28. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2   
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#1

TDictionary speichern

  Alt 25. Feb 2019, 13:20
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TDictionary speichern

  Alt 25. Feb 2019, 13:30
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.
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TDictionary speichern

  Alt 25. Feb 2019, 13:50
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.752 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TDictionary speichern

  Alt 25. Feb 2019, 14:01
.. als Trenner kannst Du doch nehmen was Du willst.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.275 Beiträge
 
Delphi 12 Athens
 
#5

AW: TDictionary speichern

  Alt 25. Feb 2019, 14:09
[Ohne Gewähr]
Aus dem Dictionary einen JSON String machen, speichern, einlesen, wieder ein TDictionary draus machen.

Lesen u.a.:
Marshalling: https://www.delphipraxis.net/dp_refe...20&lib=embtx10
https://www.delphipraxis.net/182309-...n-strings.html
https://community.idera.com/develope...e-line-of-code
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#6

AW: TDictionary speichern

  Alt 25. Feb 2019, 14:33
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
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#7

AW: TDictionary speichern

  Alt 25. Feb 2019, 14:58
Ja, ein JSON-Array fände ich auch super.
Ein JSON-Object, denn das verhält sich schon wie ein Dictionary, denn die Eigenschaften in einem JSON-Object müssen eindeutig sein.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TDictionary speichern

  Alt 25. Feb 2019, 15:03
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
Oder: http://docwiki.embarcadero.com/RADStudio/Rio/en/BSON
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#9

AW: TDictionary speichern

  Alt 25. Feb 2019, 15:10
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
522 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: TDictionary speichern

  Alt 25. Feb 2019, 15:30
Danke,

das wollte ich eben mal ausprobieren, aber das scheint es in Berlin 10.1 noch nicht zu geben

Ciao
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03: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