Mit
LoadCSV2 (Dir AsString, FileName AsString, SeparatorChar AsChar, Headers AsList) As List
lade ich die CSV in ein List Array.
Wie komme ich nun an den Wert, wenn ich nicht weiss an welcher Stelle mein Wert steht?
Hier wäre eine Map wohl das richtige, oder?
Ich habe es mit einer einfachen csv probiert, da klappt dein Beispiel (Tabelle mit drei zeilen und drei Spalten).
Bei meiner LogDatei d klappt es nicht.(Tabelle mit drei zeilen und vielen hunderten Spalten).
Hier sagt Excel schon das die Datei zulange isr. Ein CSV Programm liest die Datei.
For Each Row() As String In su.LoadCSV (File.DirAssets,"test.csv",";")
Fehler:
java.lang.StringIndexOutOfBoundsException: length=36118; regionStart=36117; regionLength=-36118
at java.lang.String.startEndAndLength(String.java:504)
at java.lang.String.substring(String.java:1333)
at anywheresoftware.b4a.objects.StringUtils.ReadWord(StringUtils.java:258)
at anywheresoftware.b4a.objects.StringUtils.LoadCSV2(StringUtils.java:222)
at anywheresoftware.b4a.objects.StringUtils.LoadCSV(StringUtils.java:135)
Frage: Gibt es eine Längenbegrenzung bei CSV Dateien in B4x?
Danke für den Tipp, die CSV hat wirklich einen Fehler. In der dritten Zeile fehlen drei ;;;
Jetzt hänge ich gerade an einer Stelle:
ForEach Row() AsStringIn su.LoadCSV (File.DirInternal,"AppBrainCSV",",")
ForEach n As String in Row
Log(n)
Next
Next
Mit Row(2) kann ich die Spalte auswählen und erhalte mit
Log(n) dann folgendes:
Wert1
Wert2
Wert3
Wie kann ich nun Wert2 in eine Variable übergeben. Ein List ist das ja nicht.
n(2) funktioniert nicht und ein variable = row(2) bringt wegen der Schleife nur Wert3.
Im Moment fallen mir da (2) verschiedene Sachen ein, zum einen kann man die Schleife verlassen und zum anderen den Wert nur übernehmen wenn der Richtige Wert dran ist.
Row ist ja in diesem Fall ein Array einer kompletten Zeile, somit ist Row(2) der Inhalt der dritten Spalte. 'n' brauchst Du überhaupt nicht.
Falls Du den richtigen Wert anhand des Spaltentitels benötigst, kannst Du es so machen:
B4X:
Dim first As Boolean = True
Dim idx as Int = -1
ForEach Row() AsStringIn su.LoadCSV (File.DirInternal,"AppBrainCSV",",")
If first Then
Dim i As Int = 0
ForEach n As String in Row
If n = "wasauchimmer" then
idx = i
Exit
End If
i = i + 1
Next
first = False
Else
If idx >= 0 Then
Log(Row(idx))
End If
End If
Next