German Array in Datei speichern

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich versuche den Inhalt eines Arrays in einer Textdatei zu speichern. Ich ehalte zwar keine Fehlermeldung, in der Datei findet sich anstatt des Array-Inhaltes jedoch nur Müll. Ich fülle das Array testhalber mit Nullen.

B4X:
Sub Globals
  ... 
  Dim ListDat As List     
  Dim ListLang As Int      : ListLang=48  
  Dim arr(11) As Int            
  ... 
  

Sub Activity_Create(FirstTime As Boolean)
  ...
  For i=1 To 10
    arr(i)=0
  Next
  ...  
  

Sub speichern  
  ListDat.Initialize
  ListDat.Clear
  ListDat.Add(edtDatum.text)
  ListDat.Add(edtSerie.text)

  For i = 1 To ListLang   
     ListDat.Add(arr)   
     Next
  
  File.writelist(File.DirRootExternal & "/Listenfuehrer",ListFile,ListDat)
 

klaus

Expert
Licensed User
Longtime User
Was genau willst Du machen ?
In Deinem Code sind einige komische Sachen drin:
- für was benutzt Du arr(11) as Int ?
- ListLang ist auch auch unnütztlich

Dieser Code reicht zum speichern:
B4X:
Sub speichern  
    ListDat.Initialize
    ListDat.Clear
    ListDat.Add(edtDatum.text)
    ListDat.Add(edtSerie.text)
  
    File.writelist(File.DirRootExternal & "/Listenfuehrer",ListFile,ListDat)
End Sub
Wenn Du mit List arbeitest musst Du beachten dass die Indexierung mit 0 anfängt.
In einer For / Loop gibt das dann For i = 0 To ListDat.Size - 1

Beste Grüsse.
 

peternmb

Well-Known Member
Licensed User
Longtime User
ich möchte in der Datei neben den Daten meiner Spielliste (das klappt ja) die Daten jedes Spieles als Array speichern.

Jedes dieser Arrays beeinhaltet dabei 11 numerische Werte. Je nach den Voreinstellungen gibt es eine bestimmte Anzahl dieser Arrays, bei meinem Beispiel wären das 48 Arrays. Ich möchte diese Arrays am Anfang (bei der Erzeugung) mit Nullen füllen.
Zur Laufzeit werden dann die entsprechenden mit 0 gefüllten Arrays mit Zahlen gefüllt.

B4X:
'in Datei schreiben   
ListDat.Set(Spiel+11,arr)
File.writelist(ListDir,ListFile,ListDat)

Ich möchte die Daten in dieser Form speichern, weil ich diese an problemlos in mein Windows-Programm einlesen kann (im Gegensatz zum Speichern als DB)
 

peternmb

Well-Known Member
Licensed User
Longtime User
da ich das Windows-Programm selber schreibe, kann ich das Formnat im Rahmen der Möglichkeiten selber anpassen.
Am einfachsten wäre es allersdings als Text bzw. CSV-Datei
 

klaus

Expert
Licensed User
Longtime User
CSV-Datei, das war mein Hintergedanke.
Du könntest ja die generellen Daten in einer Text-Datei speichern und die Spielerarrays in eine CSV-Datei.
Für eine CSV-Datei musst Du dann die Spielerarrays als String Arrays definieren und dann diese Arrays in einer List zusammenfügen und mit StringUtils.SaveCSV oder StringUtils.SaveCSV2 speichern.

Best Grüsse.
 

peternmb

Well-Known Member
Licensed User
Longtime User
das mit den 2 Dateiebn war auch mien 1.Gedanke, ist mir aber aber dann beim importieren ins Windows-programm zu aufwändig. Ich habe es jetzt soweit, dass das Speichern problemlos klappt. Ich wandle die Werte des Arrays in einen kommaseparierten String um, und speichere den. Gibt es eine einfache Funktion, wie ich den String dann beim lesen zurück in ein Array wandeln kann?

B4X:
'erst array_string erzeugen
str_arr=""
For i = 0 To 9
  str_arr = str_arr & 0 & ","
  Next   
str_arr = str_arr & 0   ' letzter Eintrag ohne Komma

'dann Spiele vorschreiben
For i = 1 To ListLang   
   ListDat.Add(str_arr)   
  Next

File.writelist(ListDir,ListFile,ListDat)

Das erzeugt mir die Datei deren Einträge ich dann zur Laufzeit ändern kann.

Wie erzeuge ich dann aus einem String (z.B. "24,1,0,1,0,0,0,0,0,48,4") dann ein Array.
Gibt es da eine einfache Stringfunktion?
 

peternmb

Well-Known Member
Licensed User
Longtime User
Bekomme ich nicht hin. Ich lese den String ein (z.B. "24,1,0,1,0,0,0,0,0,48,4"), aber wie erzeuge ich daraus das Array?

B4X:
ListDat = File.readlist(ListDir,ListFile)     'Datei einlesen = OK
str_arr = ListVar.Get(zeile+11)               'Zeile einlesen = OK
arr = Regex.Split(",",str_arr)                'Textzeile in Array umwandeln = Fehlermeldung
 

peternmb

Well-Known Member
Licensed User
Longtime User
ja, vielen Dank, das ist es. Ich hatte "arr" falsch deklariert :BangHead:
 
Top