German csv -> bestimmten Wert abfragen

manhof

Member
Licensed User
Hallo,

ich habe verschiedene csv dateien, die sind alle gleich aufgebaut:

wert1;wert2;wert3;wert4;wert5;wert6;wert7;
5;6;7;3;1;0;66;

Länge ist immer unterschiedlich, kann auch schon mal 2000 Werte haben.
Ist immer nur ein Datendatz (Zwei Zeilen, Überschrift und Wert)

Wie kann ich ich den hier einzelne Werte auslesen?
Beispiel aus wert4 den Inhalt: 3


Vielen Dank für einen Tipp!

Manfred
 

manhof

Member
Licensed User
stringutils.loadcsv?
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?
 

DonManfred

Expert
Licensed User
B4X:
For Each Row() As String In su.LoadCSV (File.DirInternal,"AppBrainCSV",",")
For Each n As String in Row
   Log(n)
Next
Next
 

manhof

Member
Licensed User
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?
 

JanPRO

Well-Known Member
Licensed User
Hi,
Frage: Gibt es eine Längenbegrenzung bei CSV Dateien in B4x?
Am besten wäre es, wenn du die CSV stark verkleinerst und es dann nochmal testest, um einen möglichen Fehler in der CSV bzw. Code auszuschließen.

Jan
 

manhof

Member
Licensed User
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.

Hoffe ich habe verständlich geschrieben
Danke.
 

mw71

Active Member
Licensed User
Moin,

woher weist du das du Wert2 haben möchtest??

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.
 

MaFu

Well-Known Member
Licensed User
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
 

manhof

Member
Licensed User
Hallo Manfred,

super! Habe in der Art das schon mal versucht, jetzt klappt es.
Danke das du dir die Mühe gemacht hast.

Du wohnst ja keine 5km weg..........
 
Top