Wie speicher ich eine komplexere Struktur?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Jac de Lad
Beiträge: 56
Registriert: 24.07.2019 17:53
Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
Wohnort: Riesa
Kontaktdaten:

Wie speicher ich eine komplexere Struktur?

Beitrag von Jac de Lad »

Hallo,
vielleicht kann mir jemand einen Schubs in die richtige Richtung geben:
Ich hab eine Struktur, z.B:

Code: Alles auswählen

Structure
  Dummy.f
  NocheinDummy.s
  Liste.s()
EndStructure
dann

Code: Alles auswählen

NewList meineliste.Liste()
usw...

Jetzt will ich alle Elemente von meineliste in einer Datei ablegen (oder von mir aus jedes in einer eigenen Datei, wie auch immer), wie kann ich das effizient tun, also ohne jeden String einzeln auszulesen? Kann ich die Größe des einzelnen Elements von meineliste ermitteln und es dann irgendwie als Gesamtheit weiterverarbeiten?
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von mk-soft »

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Bisonte »

JSON funktioniert auch ... und sieht nicht so gewaltig abschreckend dabei aus ;)

InsertJSONList()
ExtractJSONList()

sind für Listen allein. Wenn es um komplexere Dinge geht : Insert/ExtractJSONStructure....

so für die PB-Hilfe (F1) als Recherche-Tip ;)
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Jac de Lad
Beiträge: 56
Registriert: 24.07.2019 17:53
Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
Wohnort: Riesa
Kontaktdaten:

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Jac de Lad »

Vielen Dank, ich schaue mir das alles an und melde mich sobald ich in meinen Tränen ertrinke.

Nachtrag: Puh, OK, JSON geht da natürlich, aber da muss ich ja trotzdem alle Einträge einzeln bearbeiten. Ich suche nach einer Möglichkeit das in einem Rutsch zu erledigen, ähnlich wie die Struktur für ein Windows API, die auch als gesamtes gespeichert werden könnte (abzüglich der Strings, die nur als Adressen vorliegen).

Weiterer Nachtrag: Ich hätte erstmal richtig lesen müssen, mit insertjsonlist kommt man eigentlich schon bequem ganz weit.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Olafmagne »

Hallo
Das ganze in einem Beispiel

Code: Alles auswählen

;Creation des Liste und JSON

NewList Names.s()
  AddElement(Names()): Names() = "John"
  AddElement(Names()): Names() = "Jane"
  AddElement(Names()): Names() = "Jim"
If CreateJSON(0)
  InsertJSONList(JSONValue(0), Names())
  Debug ComposeJSON(0,#PB_JSON_PrettyPrint)
EndIf
FreeList(Names())
;Kann jetzt gespeichert werden
;
;(Json laden )-nicht im Code
;Neue Liste und extrakt. von JSON
NewList coord.s()
ExtractJSONList(JSONValue(0), coord())

ForEach coord()
  Debug "Name="+coord()
Next
Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Kiffi »

ergänzend für jacdelad noch folgende Befehle:

LoadJSON() und SaveJSON()
Hygge
Benutzeravatar
Jac de Lad
Beiträge: 56
Registriert: 24.07.2019 17:53
Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
Wohnort: Riesa
Kontaktdaten:

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Jac de Lad »

Ja, ja, das ist klasse. So klappt das auch mit meiner Map. 2 Fragen sind aber aufgekommen: wie übernehme ich z.B. alle Werte von MeineMap("eins"), ohne gleich die gesamte map zu übernehmen? Und wofür genau ist JSONValue() da? Die Hilfe hilft mir da irgendwie nicht wirklich.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Olafmagne »

JSONValue() ist der DatenType,
d.h.,diese Function gibt den DatenType des JSON-Eintrag's zurück

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
Jac de Lad
Beiträge: 56
Registriert: 24.07.2019 17:53
Computerausstattung: AMD Ryzen 1700X, MSI B350 PC Mate, 256GB SSD, 16GB RAM@2933MHz, AMD Radeon 7770 OC, 106TB HDD, 28" Samsung 4k-Monitor, Windows 10 x64
Wohnort: Riesa
Kontaktdaten:

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von Jac de Lad »

Aber wie hängt das mit InsertJSONList() zusammen? Ich erkenne den Sinn an der Stelle nicht.
Benutzeravatar
mk-soft
Beiträge: 3701
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Wie speicher ich eine komplexere Struktur?

Beitrag von mk-soft »

Das Einzige was du braucht ist InsertJSONStructure(...) und ExtractJSONStructure(...).

Also genau so wie bei meinen Link nur mit XML. Siehe LoadProjectData(...) und SaveProjectData(...)

Mehr braucht man nicht, da Listen oder Arrays in Strukturen mit übernommen werden.

Auszug

Code: Alles auswählen


Structure udtProjectData
  Version.i
  Date.s
  ; Data
  ;TODO Any Data
  List Text.s() 
EndStructure

Global ProjectData.udtProjectData

; ----

Procedure LoadProjectData(FileName.s, *ProjectData.udtProjectData)
  Protected xml
  
  If FileSize(FileName) > 0
    xml = LoadXML(#PB_Any, FileName)
    If xml And XMLStatus(xml) = #PB_XML_Success
      ExtractXMLStructure(MainXMLNode(xml), *ProjectData, udtProjectData, #PB_XML_NoCase)
      FreeXML(xml)
      ProcedureReturn #True
    EndIf
  EndIf
  ProcedureReturn #False
EndProcedure

; ----

Procedure SaveProjectData(FileName.s, *ProjectData.udtProjectData)
  Protected r1, xml
  
  xml = CreateXML(#PB_Any)
  If xml
    *ProjectData\Version = 101
    *ProjectData\Date = FormatDate("%YYYY-%MM-%DD %HH.%II.%SS", Date())
    If InsertXMLStructure(RootXMLNode(xml), *ProjectData, udtProjectData)
      FormatXML(xml, #PB_XML_ReFormat)
      If SaveXML(xml, FileName)
        r1 = #True
      Else
        r1 = #False
      EndIf
    EndIf
    FreeXML(xml)
  EndIf
  ProcedureReturn r1
EndProcedure
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten