Italian [Risolto] Importare csv di grandi dimensioni in SQLite

luciano deri

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

luciano deri

Active Member
Licensed User
Longtime User
Hai provato con questo esempio ?
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
es
 

luciano deri

Active Member
Licensed User
Longtime User
La soluzione in effetti era abbastanza banale
B4X:
 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
 
D

Deleted member 103

Guest
Volevo darti una spinta oggi, ma vedo che ci sei riuscito da solo. ;)
 

sirjo66

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

Sergio
 
Top