Das Dateiformat
Grouped Data String (GDS) ist eine robuste und schnelle Möglichkeit,
Arrays mit String-Schlüssel:Wert-Paaren zu
speichern, die bis zu 222 Ebenen tiefes
Nesting erlaubt, und derlei Daten dann auch wieder zu
laden. Es funktioniert
ähnlich wie JSON, ist jedoch
effizienter und schneller.
Ich habe es ursprünglich 2024 für meine neueste selbstentwickelte persönliche Selbstmanagement-und-Projektemanagement-Suite entwickelt und nutze es seitdem ganz allegemein als
Standard-Verfahren.
Es verwendet zwei
ASCII-Signal-Bytes, um
rekursiv Arrays in GDS-Dateien zu schreiben und GDS-Dateien wieder zurück in Arrays auszulesen:
ASCII #29 = "Group Separator" [GS]
("englisch für "Gruppen-Trenner")
- trennt Schlüssel:Wert-Paare als "Schlüssel[GS] Wert"
- trennt Wert|Schlüssel-Grenzen einer Ebene
über "Wert[GS][Ebene]Schlüssel",
wobei [Ebene] das Zeichen ist, das man erhält,
wenn man die Ebenentiefe (0..222)
zum Zeichencode von "!" hinzuaddiert
(das direkt nach dem Leerzeichen folgt)
ASCII #31 = "Unit Separator" [US]
(englisch für "Einheiten-Trenner")
- escapet alle [GS] in Werten als "[US]1"
- escapet sich selbst in Werten als "[US]0"
Hier eine
Beispiel-Implementierung
in meiner eigenen Programmiersprache
Eas
(siehe
E
→Molaskes.info/Eas):
— Eas-Codec:
— Encoder:
— to Grouped Data String
— (engl. für "zu GDS")
ToGDS
d — die zu encodierenden Daten
l 0 — Level/Ebene
— (nur in Rekursionen verwendet)
:
x CHAR:29 — ASCII "group separator"
z CHAR:31 — ASCII "unit separator"
@@ d
v @
? IS'ARRAY:v
v ToGDS:v l+1
\ — Escaper und Delimiter escapen
v RXEDIT:v z z;0
v RXEDIT:v x z;1
/
o[o?] @@;x;" ";v
/
<< JOIN:o x;CHAR:33+l — ="!"+l
/
— Decoder:
— from Grouped Data String
— (engl. für "von GDS")
FromGDS
d — der zu dekodierende
— GDS-Datenstring
l 0 — Level/Ebene
— (nur in Rekursionen verwendet)
:
x CHAR:29 — ASCII "group separator"
z CHAR:31 — ASCII "unit separator"
d SPLIT:d x;CHAR:33+l — ="!"+l
l +
@@ d
v SPLIT:@ x;" " 1
? v?=1 — Endwerte ent-escapen
v RXEDIT:v[0] z;1 x
<< RXEDIT:v z;0 z
/
o[v[0]] FromGDS:v[1] l
/
<< o
/