Spanish sqlite - importar archivo .csv conservando acentos y caracteres especiales

pacoMx

Member
Licensed User
hola, tengo un archivo de excel que he exportado como .csv, el asunto es que no puedo llenar mi base de datos usando el intérprete de comandos pues cambia todos mis acentos y ñ's por caracteres extraños.

Estuve intentando:
sqlite3 datosNvi.db3
>.separator "|"
>.import tabla.csv nvi


¿Qué programa me recomiendan utilizar para crear mi base de datos?

Gracias de antemano
 

Merlot2309

Active Member
Licensed User
Hola,

Mi castellano no es bien, perdon.

Firefox tiene un "plugin" SQLite Manager. Importar csv (Guardar con UTF-8) y acentos y ññ va bien.

Saludos,
Helen.
 

pacoMx

Member
Licensed User
Thank you a lot Helen, ended up double cheking my .csv file, it needed to be saved in UTF format (was ansi in excel export).

Regards.
 

LorenzoTRANSFEREX

Member
Licensed User
Thank you a lot Helen, ended up double cheking my .csv file, it needed to be saved in UTF format (was ansi in excel export).

Regards.
Hola Paco, tengo el mismo problema. No entiendo muy bien como lo arreglaste.
Yo estoy importando un CSV a SQLite3, pero no me admite ningún tipo de acento ni caracter especial.

Gracias
 

inakigarm

Well-Known Member
Licensed User
Es porque lo tienes en formato Ansi; seguro q hay otros métodos pero lo q yo hago es abrirlo con el notepad de Windows y grabarlo con el mismo nombre pero en formato UTF-8
Después lo importaras desde sqlite sin problemas
 

bgsoft

Well-Known Member
Licensed User
Hola

No se si te quedó claro el comentario anterior, supongo que no por que no pusiste [SOLUCIONADO]
Te pongo un ejemplo de como leer el fichero .csv y que no pierdas los acentos y caracteres especiales.

B4X:
        Dim tr As TextReader
        Dim List1 As List

         ' el fichero esta en ANSI (Windows-1252) y se pasa a UTF8 que es formato Android
         tr.Initialize2(File.OpenInput(Directorio, "NombreFichero.csv"), "Windows-1252")
         List1 = tr.ReadList ' ahora lo tienes en el List1 ya convertido para utilizar
         tr.Close
Saludos
 

LorenzoTRANSFEREX

Member
Licensed User
Hola

No se si te quedó claro el comentario anterior, supongo que no por que no pusiste [SOLUCIONADO]
Te pongo un ejemplo de como leer el fichero .csv y que no pierdas los acentos y caracteres especiales.

B4X:
        Dim tr As TextReader
        Dim List1 As List

         ' el fichero esta en ANSI (Windows-1252) y se pasa a UTF8 que es formato Android
         tr.Initialize2(File.OpenInput(Directorio, "NombreFichero.csv"), "Windows-1252")
         List1 = tr.ReadList ' ahora lo tienes en el List1 ya convertido para utilizar
         tr.Close
Saludos
La verdad es que no lo tengo nada claro. Yo hasta ahora estoy metiendo los datos que uso en la app en un excel que exporto a csv que a su vez importo a un un archivo sqlite que luego copio manualmente al hosting para que lo use la app.
Ahora con lo que me has puesto se me ocurre que igual solo debería modificar el csv y copiarlo al hosting, y con tu código leerlo para usar los datos directamente, sin sqlite. Me ahorraría un montón de pasos, aunque tendría que desmontar toda la parte de sql para usar en su lugar las listas leídas del csv...

No sé, no sé...

Gracias por la ayuda.

Lorenzo
 

inakigarm

Well-Known Member
Licensed User
Eso depende de lo que quieras hacer con los datos; si sólo es para leerlos y procesarlos en local, esta opción (sin sqlite) es más sencilla y puede ser una buena idea

Si en cambio quieres hacer consultas o modificaciones específicas sobre los datos, es más flexible tenerlo en formato sqlite para poder utilizar SQL para consultar/modificar los datos

Otra opción es utilizar la libreria de B4A para Excel (también para B4J) http://www.b4x.com/android/forum/threads/read-write-excel-files-on-android.25632/#content y así no tienes que convertir a csv
 

aviario

Active Member
Licensed User
Hola

No se si te quedó claro el comentario anterior, supongo que no por que no pusiste [SOLUCIONADO]
Te pongo un ejemplo de como leer el fichero .csv y que no pierdas los acentos y caracteres especiales.

B4X:
        Dim tr As TextReader
        Dim List1 As List

         ' el fichero esta en ANSI (Windows-1252) y se pasa a UTF8 que es formato Android
         tr.Initialize2(File.OpenInput(Directorio, "NombreFichero.csv"), "Windows-1252")
         List1 = tr.ReadList ' ahora lo tienes en el List1 ya convertido para utilizar
         tr.Close
Saludos
Hola bgsoft, he visto este ejemplo que pones para que se mantengan los acentos y caracteres especiales y la pregunta es una vez están cargados
en el list como se debe de hacer una lectura ya que a mi me da un error, yo la solución que había adoptado es la que pongo a continuación y al ver
la tuya es mucho mas sencilla

Dim Datos As String
Dim Reader As TextReader
Reader.Initialize2(File.OpenInput(File.DirRootExternal & "/Autoventa/Recepcion/" ,"ZONAS.TXT") ,"ISO-8859-1")
Datos=Reader.ReadAll
Reader.Close
File.WriteString(File.DirRootExternal & "/Autoventa/Recepcion/","ZONAS1.TXT",Datos)
list1 = su.LoadCSV(File.DirRootExternal & "/Autoventa/Recepcion/" ,"ZONAS1.TXT" , "|" )


' Miro si ha cargado para borrarlo
If list1.Size > 0 Then
Midb.SQL1.ExecNonQuery("DELETE FROM " & Midb.DBTableZonas )
End If

' 0-Código
' 1-Descripcion

For i=0 To list1.Size-1
Dim Arr(2) As String
Arr=list1.Get(i)
Txt = "INSERT INTO "& Midb.DBTableZonas & " VALUES ("
Txt=Txt & "'" & Arr(0).Trim & "'"
If Arr(1).Trim <> "" Then Txt = Txt & " , '" & Arr(1) & "'" Else Txt = Txt & ", ''"
Txt = Txt & ")"
Midb.SQL1.ExecNonQuery(Txt)
Next

como puedes ver yo lo que hago es copiar el archivo con otro nombre y al poner tu solución me da un error aquí Arr=list1.Get(i)

un saludo
Paco
 

TheFalcon

Active Member
Licensed User
Yo no te entendí lo que quieres, pero yo uso algo parecido no se si te valdrá, yo guardo los datos que quiero en un archivo.CSV y luego lo presento en una Lista ordenados por columnas, te pongo una imagen para que te hagas una idea.

SI no buscas lo de las columnas solo guardar el CSV. es igual, yo 1º guardo el CSV con los datos que quiero y luego los recupero en forma de columnas, pero puedes recuperar los como quieras.

Un saludo
 

Attachments

aviario

Active Member
Licensed User
Gracias por la respuesta, pero haces la lectura igual que yo? a mi en esta linea me da error
Arr=list1.Get(i)

un saludo
Paco
 
Last edited:

TheFalcon

Active Member
Licensed User
yo lo hago en SQL ,el get lo uso en Mysql pero tu usas ARR habiéndolo definido como String , donde tu usas ARR yo uso un map.
B4X:
Dim m As Map
m = list1.Get(i)

ARR= m.Get("COLUMNA_TABLA")
yo lo haría así para que te hagas una idea, veo que usas ARR(2) por que sera un array, con lo cual seria recoger la variable array1 y 2

array1 = m.get("DATO A RECOGER")
array2= m.get("DATO A RECOGER")

no se si te sera de mucha ayuda
 
Top