German CSV Datein

normank

Member
Licensed User
Longtime User
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 CSV-Datei sieht so aus:
PHP:
Anton,Berta,Caesar,Dora,Emil
1,2,3,4,5,6,7,8,9,0
a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

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!

Norman:confused:
 

Attachments

  • ReadCSV.zip
    6.3 KB · Views: 299

klaus

Expert
Licensed User
Longtime User
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
Beste Grüsse.
 

normank

Member
Licensed User
Longtime User
csv

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:
 
Top