Seite 1 von 2
Array()- save and load
Verfasst: 24.12.2024 11:20
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
Re: Array()- save and load
Verfasst: 24.12.2024 12:26
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")
Re: Array()- save and load
Verfasst: 24.12.2024 13:26
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.
Thx
Re: Array()- save and load
Verfasst: 24.12.2024 15:12
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

Re: Array()- save and load
Verfasst: 24.12.2024 16:10
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
Re: Array()- save and load
Verfasst: 25.12.2024 10:01
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
Re: Array()- save and load
Verfasst: 25.12.2024 13:48
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)

Re: Array()- save and load
Verfasst: 25.12.2024 15:16
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...
Re: Array()- save and load
Verfasst: 25.12.2024 15:58
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

.... (Originalpost natürlich editiert)
Re: Array()- save and load
Verfasst: 26.12.2024 12:43
von mk-soft
Ich habe auch noch Profan 4.5 ...
Das lief auf Windows 3.11
