Hallo Forum,
ich brauche Hilfe, ich hab gerade ein Brett vor dem Kopf:
Ich will Daten aus einer CSV-Datei lesen, die Eintrage pro Zeile sind unterschiedlich lang, ich habe fogenden Quelltext gebastelt:
PHP:
Sub Globals
Dim StringUtils1 As StringUtils
Dim List1 As List
End Sub
Sub Process_Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout ("readcsv")
List1.Initialize
ReadCSV
End Sub
Sub ReadCSV
If File.Exists(File.DirAssets, "value.csv") Then
List1 = StringUtils1.LoadCSV(File.DirAssets, "value.csv", ",")
Else
Msgbox("Datei fehlt ","Datei")
End If
For i = 0 To List1.Size - 1
Dim VString() As String
VString = List1.Get(i)
Msgbox("VString.length= "& VString .Length,"i= " & i)
Next
End Sub
Die Sub soll Zeile für Zeile die Datei lesen und in das String-Array VString eintragen, danach soll in der Msgbox die Länge des Array angezeigt werden.
Mein Problem ist, daß das Array immer die Länge der ersten Zeile hat.
In meinem Beispiel also 5 auch beim zweiten und dritten Schleifendurchlauf und nicht wie erwartet 10 bzw. 26,
Gebt mir bitte mal nen Tipp , irgedwie sehe ich meinen Fehler nicht!
Mit der LoadCSV Routine haben leider alle Inhalte die gleiche Länge.
Folgender Code funktioniert:
B4X:
Sub ReadCSV
If File.Exists(File.DirAssets, "value.csv") Then
Dim i As Int
Dim tr As TextReader
Dim List1 As List
tr.Initialize(File.OpenInput(File.DirAssets, "value.csv"))
' diese Zeile erlaubt das laden von Dateien mit ANSI encoding
' tr.Initialize2(File.OpenInput(File.DirAssets, "value.csv"), "ISO-8859-1 ")
List1 = tr.ReadList
For i = 0 To List1.Size - 1
Dim VString() As String
VString = Regex.Split(",", List1.Get(i))
Msgbox("VString.length= "& VString .Length,"i= " & i)
Next
Else
Msgbox("Datei fehlt ","Datei")
End If
End Sub
Danke Klaus für die promte Antwort,
dein Vorschlag hat mir wirklich geholfen, es funktioniert wie erwartet.
Die Funktion der SUB kann man so besser erkennen, gefällt mir!
Norman:sign0098::sign0098: