Salve a tutti devo leggere un file csv per caricarlo sul DB. Fino ad oggi ho usato il metodo
B4X:
Dim su As StringUtils
Dim lst1 As List
lst1 = su.LoadCSV(Main.PthIO, nomefilelocale,";")
...
Per piccoli file è ottimale tuttavia se il csv è grande (>500 mb) la variabile lst1 esaurisce la memoria.
Sarebbe più utile poter caricare solo un record alla volta dal file.
Esiste un metodo qualcosa tipo
B4X:
Dim sColumn() As String
For i = 1 To EndOfFie
scolum = readrigaCSV(Main.PthIO, nomefilelocale,";", i)
....
next
O che comunque mi permetta di risolvere questo problema?
Grazie.
Va quasi bene, peccato la split omette le colonne non valorizzate a destra dell'ultima buona, quindi non so mai di quanti dati dispongo per ogni riga.
B4X:
Reader.Initialize(File.OpenInput(Main.PthIO, nomefilelocale))
Dim line As String
line = Reader.ReadLine
Do While line <> Null
dim sColumn() As String
sColumn = Regex.Split(";", line)
' se sColumn(10) non è valorizzata e neppure tutte le successive ovviamente questo indice non esiste
str = scolum(10)
Loop
line = Reader.ReadLine
Do While line <> Null
dim sColumn() As String
sColumn = Regex.Split(";", line)
Dim AppColumn (23) As String
For i = 0 To sColumn.Length - 1
AppColumn(i) = sColumn(i)
Next
' AppColumn(10) esiste di sicuro
str = AppColumn(10)
Loop
si, anche io pensavo di scriverti oggi, io però l'avevo pensata così:
B4X:
sColumn = Regex.Split(";", line & ";X;")
in questo modo aggiungi una colonna che in realtà non ti serve, ma essendo sempre valorizzata non viene esclusa nessuna colonna e quindi ti trovi sempre i dati fino all'ultima colonna