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

Discussion in 'Spanish Forum' started by pacoMx, Jan 10, 2012.

  1. pacoMx

    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
     
  2. Merlot2309

    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.
     
  3. pacoMx

    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.
     
  4. LorenzoTRANSFEREX

    LorenzoTRANSFEREX Member Licensed User

    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
     
  5. inakigarm

    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
     
  6. bgsoft

    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.

    Code:
    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
     
    inakigarm likes this.
  7. LorenzoTRANSFEREX

    LorenzoTRANSFEREX Member Licensed User

    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
     
  8. inakigarm

    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
     
  9. aviario

    aviario Active Member Licensed User

    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
     
  10. TheFalcon

    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
     

    Attached Files:

  11. aviario

    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: Apr 13, 2015
  12. TheFalcon

    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.
    Code:
    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
     
  13. aviario

    aviario Active Member Licensed User

    Ok. gracias
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice