Array()- save and load

Für allgemeine Fragen zur Programmierung mit PureBasic.
Blitzer
Beiträge: 97
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Array()- save and load

Beitrag von Blitzer »

Hallo,

ich suche nach einer Möglichkeit ein statisches Array abzuspeichern. Später soll es wieder eingelesen werden.

Hier ein Beispiel in einer anderen Programmiersprache:
'Write Array
open "myfile" for binary as #1
put #1,,myarray()
close #1

'Read Array
open "myfile" for binary as #1
get #1,,myarray()
close #1
(Dynamische Arrays können beim Einlesen auch re-dimensioniert werden.)

Eine Lösung als 3-Zeiler wäre wünschenswert.

Blitzer
(Ich wünsche jeden der mich kennt, 10 x soviel wie er mir gönnt)
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Array()- save and load

Beitrag von Bisonte »

Man nehme JSON ... dreizeilig zwar nicht so ganz, aber effektiv ;)

Code: Alles auswählen

Global Dim MyArray(10)

Procedure.i SaveJSonArray(FileName.s)
  
  Protected jSon = CreateJSON(#PB_Any, #PB_JSON_NoCase)
  Protected Result = #False
  
  If jSon
    InsertJSONArray(JSONValue(jSon), MyArray())
    Result = SaveJSON(jSon, Filename, #PB_JSON_PrettyPrint)
    FreeJSON(jSon)
  EndIf
  
  ProcedureReturn Result
  
EndProcedure

SaveJSonArray("myArrayData.array")
Zuletzt geändert von Bisonte am 25.12.2024 15:59, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Blitzer
Beiträge: 97
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Re: Array()- save and load

Beitrag von Blitzer »

Mit dem Lösungsweg komme ich klar.
Leider mit viel Text, also fehlerträchtig und nur mit tiefergehenden Kenntnissen zu stemmen.

Halt eben 365 zu 57 Zeichen.
Nicht deine Lösung ist der Weg, sondern dein Weg ist die Lösung. :lol:

Thx
(Ich wünsche jeden der mich kennt, 10 x soviel wie er mir gönnt)
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Array()- save and load

Beitrag von H.Brill »

Kann ich noch kürzer (54 Zeichen) und eine Zeile weniger mit XProfan :
' Write Array
Move("ArrToList", myarray[])
Move("ListToFile", "myfile")
' Read Array
Move("FileToList, "myfile")
Move("ListToArr", myarray[])

' bei numerischen Array wird automatisch konvertiert
😎
Zuletzt geändert von H.Brill am 24.12.2024 17:12, insgesamt 1-mal geändert.
PB 6.10
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Array()- save and load

Beitrag von mk-soft »

Nur für Integer oder angepasst Byte, Word, etc. Ausser für String, Maps, List ;)

Code: Alles auswählen

;- TOP

; Nicht für String oder Structuren

Procedure SaveArray(FileName.s, Array ArrayData(1)) ; Result: Bytes written
  Protected file, size
  
  file = CreateFile(#PB_Any, FileName)
  If Not file
    Debug "Error: Create File " + FileName
    ProcedureReturn 0
  EndIf
  
  size = (ArraySize(ArrayData()) + 1) * SizeOf(Integer)
  If WriteData(file, @ArrayData(), size)
    CloseFile(file)
    ProcedureReturn size
  Else
    CloseFile(file)
    Debug "Error: Write Array Data"
    ProcedureReturn 0
  EndIf
EndProcedure

Procedure LoadArray(FileName.s, Array ArrayData(1)) ; Result : ArraySize
  Protected file, size, size2
  
  file = ReadFile(#PB_Any, FileName)
  If Not file
    Debug "Error: Read File " + FileName
    ProcedureReturn 0
  EndIf
  
  size = Lof(file)
  If size
    size2 = (size / SizeOf(Integer)) - 1
    Dim ArrayData(size2)
    If ReadData(file, @ArrayData(), size)
      CloseFile(file)
      ProcedureReturn size2
    Else
      CloseFile(file)
      Debug "Error: Read Array Data"
      ProcedureReturn 0
    EndIf
  Else
    Debug "Error: Array Data Len"
    ProcedureReturn 0
  EndIf
EndProcedure

Global Dim MyArray.i(100)

RandomSeed(100)

For i = 0 To 100
  MyArray(i) = Random(1000, 1)
Next

filename.s = GetUserDirectory(#PB_Directory_Downloads) + "ArrayData.bin"

r1 = SaveArray(filename, MyArray())
Debug "Save Bytes written: " + r1

Global Dim MyArray2.i(0)

r1 = LoadArray(filename, MyArray2())
Debug "Load Array Size: " + r1

If CompareArray(MyArray(), MyArray2())
  Debug "Compare array ok"
EndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Blitzer
Beiträge: 97
Registriert: 26.09.2004 14:33
Wohnort: Lower Saxony

Re: Array()- save and load

Beitrag von Blitzer »

@mk-soft
Ein sehr schönes Beispiel ... :)

@H.Brill
Ich habe gerade mal nachgesehen, die Zeit als Profaner liegt schon mehr als 20 Jahre zurück.
In dieser Zeit hat sich viel geändert, vieles ist anders, aber nur weniges ist besser.
Ich finde den Befehlssatz und die Syntax von XProfan als optimal gelungen und zeitlos ...

Blitzer
(Ich wünsche jeden der mich kennt, 10 x soviel wie er mir gönnt)
Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Array()- save and load

Beitrag von H.Brill »

Blitzer hat geschrieben: 25.12.2024 10:01 @mk-soft
Ein sehr schönes Beispiel ... :)

@H.Brill
Ich habe gerade mal nachgesehen, die Zeit als Profaner liegt schon mehr als 20 Jahre zurück.
In dieser Zeit hat sich viel geändert, vieles ist anders, aber nur weniges ist besser.
Ich finde den Befehlssatz und die Syntax von XProfan als optimal gelungen und zeitlos ...

Blitzer
Ja, hat sich viel verändert, besonders auf die Sprünge auf die X-Versionen und ganz besonders der Riesensprung
auf X4. Ich finde es auch etwas (quer)einsteigerfreundlicher als PB mit seinen Eventschleifen bei der GUI. Habe ich
hier im Forum öfters bei neuen Usern gemerkt. Obwohl sie es sich mit den neuen Bind-Befehlen leichter machen könnten.
Benutze halt beides (PB + XProfan) gerne. Profan war ja auch damals Anfang 90er mein Einstieg.
Also war das Huhn (Profan) eher da, als das Ei (PB) :lol:
PB 6.10
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Re: Array()- save and load

Beitrag von Rings »

Bisonte hat geschrieben: 24.12.2024 12:26 Man nehme JSON ... dreizeilig zwar nicht so ganz, aber effektiv ;)

Code: Alles auswählen

Global Dim MyArray(10)

Procedure.i SaveJSonArray(FileName.s)
  
  Protected jSon = ComposeJSON(#PB_Any, #PB_JSON_PrettyPrint)
  Protected Result = #False
  
  If jSon
    InsertJSONArray(JSONValue(jSon), MyArray())
    Result = SaveJSON(jSon, Filename, #PB_JSON_PrettyPrint)
    FreeJSON(jSon)
  EndIf
  
  ProcedureReturn Result
  
EndProcedure

SaveJSonArray("myArrayData.array")
Mach ich da was falsch, lässt sich nicht kompilieren, Fehler bei
Zeile 5, Trying write a string variable in numeric...
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: Array()- save and load

Beitrag von Bisonte »

upsi ;)
Bin da etwas verrutscht bei meiner Copy & Paste Aktion ....
die Zeile 5 muss natürlich heissen : Protected jSon = CreateJSON(#PB_Any, #PB_JSON_NoCase)

Aber gut das das auch mal einer ausprobiert hat :D .... (Originalpost natürlich editiert)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
mk-soft
Beiträge: 3844
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Array()- save and load

Beitrag von mk-soft »

Ich habe auch noch Profan 4.5 ...
Das lief auf Windows 3.11 ;)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten