Spanish [RESUELTO] LoadCSV no carga datos

roerGarcia

Active Member
Licensed User
Longtime User
Procedo a la explicación:

Copiada del foro hace tiempo:
Private Sub LoadData (csvFile As String)
    Dim data As List
    Dim su As StringUtils
    data.Initialize
    If File.Exists(xui.DefaultFolder, csvFile) Then
        Log("Found it " & xui.DefaultFolder & "\" & csvFile)
        data = su.LoadCSV(xui.DefaultFolder, csvFile, "|")
    Else
        data.Initialize
    End If
    B4XTable1.SetData(data)
End Sub

Antes de esto, el aplicativo descarga correctamente una lista de archivos posibles a descargar, eso no tiene problema. De alli presenta la lista de archivos y el usuario cliquea en uno, luego pulsa un boton que lleva a esta rutina. El LOG de la rutina muestra el archivo descargado y en disco (Windows porque es B4J) existe y es editable.

Pero el string utils loadCSV retorna esto:

LOG:
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
/bdat/cg12/t/d/dataload.txt, Success=true
downloading ... files
2, Catalogo X               
/bdat/cg12/t/t405kc downloading...
/bdat/cg12/t/t405kc, Success=true
/bdat/cg12/t/t405kc downloaded
Found it C:\Users\........S\AppData\Roaming\dataload\t405kc
b4xtable._createtable (java line: 1223)
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near ")": syntax error)
    at org.sqlite.DB.newSQLException(DB.java:383)
    at org.sqlite.DB.newSQLException(DB.java:387)
    at org.sqlite.DB.throwex(DB.java:374)
    at org.sqlite.NativeDB.prepare(Native Method)
    at org.sqlite.DB.prepare(DB.java:123)
    at org.sqlite.Stmt.execute(Stmt.java:113)
    at anywheresoftware.b4j.objects.SQL.ExecNonQuery(SQL.java:161)
    at b4j.example.b4xtable._createtable(b4xtable.java:1223)
    at b4j.example.b4xtable$ResumableSub_SetData.resume(b4xtable.java:2474)
    at b4j.example.b4xtable._setdata(b4xtable.java:2414)
    at b4j.example.b4xmainpage._loaddata(b4xmainpage.java:158)
    at b4j.example.b4xmainpage._mftp_downloadcompleted(b4xmainpage.java:195)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:91)
    at anywheresoftware.b4a.BA$3.run(BA.java:247)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    at java.lang.Thread.run(Thread.java:748)

Un demo de la data contenida en el archivo es esta:
Cta1|Cta2|Cta3|AAMM|T|Pol|Ren|Fecha|Debe|Haber|m|Concepto|Compro|Nombre Cuenta
11121|1|42|2103|1|28|20|31/03/21|64.95|0.00|D|REG REND MARZO 2021|0|BANORTE XXXXXXXXXX|11121|1|0
11121|1|46|2103|15|9603|2|04/03/21|0.00|450701.42|H|Nomina catorcena|390086|BANORTE XXXXXXXXX|11121|1|0

Le quite al archivo el encabezado, le cambie el pipe por punto y coma, no funciona. Cree un archivo desde cero con el editor en un UX (de allí se descargan) y nada, cambie el FTP de AsciiFile True a False y nada. Puedo leer el archivo "a pie" y cargarlo manualmente a la tabla (supongo), pero el código lo tome del foro hace años (usaba $ como separador) y guardaba y leia en texto.

No veo donde esta la falla.
¿Que podrá ser, un separador prohibido por el java en la rutina del stringutils?
¿La diferencia de formato de UX versus Windows?

Saludos a todos, gracias por su atención.

PD. Estoy esperando el efecto iluminador que viene cuando platicas tus problemas.... pero no ha llegado aun!!!

Estatus Actual: Es B4XTable1.SetData(data) donde falla el aplicativo. Pero la sintaxis de la instruccion señala precisamente eso, el parametro data es un tipo de dato List, tal cual esta especificado. I dont get it. =/

Estatus Actual: Resuelto. Asumía erroneamente que la B4XTable se auto-configuraría al pasarle la "data", no es asi. Debe configurarse antes, que de hecho esa es una de las funciones de codigo que no he desarrollado aun. Pero, tomenlo en cuenta, jajajaja, perdón, buen dia.
 
Last edited:
Top