Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 4 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente
 
Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Cami...
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
shordi escribió:  
gambafeliz escribió:  
Hola, shordi

Necesito hacerte una pregunta sobre este programa. En la subrutina "bCargarCabcsv()" es donde determinas el tipo de campo en la base de datos o donde me puede copiar el trozo de código para que lo entienda.

Te voy a decir por que, es que no veo donde tu determinas en un campo con un contenido de fecha cuando es Date o por alguna razón determinas que es Cadena (aunque sea una fecha pero quizás no es válida)

No se si te lo he explicado bien, pero básicamente es por eso, necesito comprenderlo.

Gracias.

El tipo se determina en la línea 103 (la que dice "Select case typeOf(val(...") con la función Val pasando el valor a la función TypeOf
   For n = 0 To dat.Max
        If cbCabeceras.Value Then
            If cbNoComillas.value Then
                tvCampos[n, 0].text = UnQuote(RTrim$(LTrim$(cab[n])))
            Else
                tvCampos[n, 0].text = RTrim$(LTrim$(cab[n]))
            Endif
        Else
            tvCampos[n, 0].Text = "Campo " & Str(n)
        Endif
        Select Case TypeOf(Val(Replace(dat[n], ".", ","))) 'Val reconoce las locales y los números con . los da como texto. Así admite ambos formatos
            Case gb.Float
                tvCampos[n, 1].text = "Float"
                tvCampos[n, 2].Text = "11"
            Case gb.Integer
                tvCampos[n, 1].text = "Integer"
                tvCampos[n, 2].Text = "11"
            Case db.Date
                tvCampos[n, 1].text = "Date"
            Case Else
                tvCampos[n, 1].text = "Text"
        End Select
    Next
 


Echale un ojo a esto:
http://gambaswiki.org/wiki/lang/val?l=es&nh

Saludos


Gracias que grande eres, ..., ..., gracias de verdad.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
Estoy perdido, te cuento.

Es que tengo en el CSV 3 columnas con valores que representan Fechas pero nada estándar. Tu programa distingue 2 columnas como DATE y una como CADENA. Creo entender por que. Las dos primeras que ve como DATE y la tercera como CADENA. Como las distingue tengo que ver como, ya que no lo he mirado.

Pero estoy perdido en los conceptos. SQLite según sus manuales dice que tiene tres tipos válidos para representar fechas (TEXT, REAL, INTEGER) y tu me los conviertes a DATE o eso es lo que veo en GAMBAS

Básicamente es que estoy tan perdido que no entiendo, por que, SQLite dice estas son mis reglas, y gambas aplica otras visualmente, supongo. (Todo esto ocurre por que no se ni de gambas ni de SQLite, vale)

Te voy a dar un ejemplo:

Datos CSV (yo supongo que el CSV no tienes tipos, si estoy equivocado, por favor dímelo)
Formato        = dia/mes/año Hora
Fecha1.valor = 8/2/19 10:00
Fecha2.valor = 8/11/19
Fecha3.valor = (unas veces "-" otras veces 8/11/19)

Tu conversión CSV a Tabla (lo veo en gambas)
Formato        = dia/mes/año Hora
Fecha1.valor.DATE      = 08/02/2019 10:00:00
Fecha2.valor.DATE      = 08/11/2019 00:00:00
Fecha3.valor.CADENA = (unas veces "" otras veces 8/11/19 tal cual esta en CSV)

Yo en PHP conversión a Tabla según mi adaptación en su día, viendo los manuales de SQLite y con total desconocimiento ni ayuda externa.
Formato       = año/mes/dia Hora
Fecha1.valor.CADENA = 2019/02/08 10:00
Fecha2.valor.CADENA = 2019/11/08
Fecha3.valor.CADENA = (unas veces "-" otras veces 2019/11/08)

Yo quiero dialogar de forma nativa con SQLite y trabajar con gambas, mi principal problema que tuve en su día, fue, que SQLite me daba problemas en el orden de las fechas cuando extraigo una Select ordenada por fechas. Y desde que convertí los datos en PHP se acabo el problema. Yo busco la misma estabilidad de datos en gambas y con tu conversición.

Por favor, me gustaría saber tu opinión al respecto. Gracias.

Nota: sobre tu opinión, por ejemplo, ¿tengo que cambiar tu programa conversión a algo parecido a lo que he hecho en PHP o tu lo ves diferente, no se?
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
Estoy perdido, te cuento.

Es que tengo en el CSV 3 columnas con valores que representan Fechas pero nada estándar. Tu programa distingue 2 columnas como DATE y una como CADENA. Creo entender por que. Las dos primeras que ve como DATE y la tercera como CADENA. Como las distingue tengo que ver como, ya que no lo he mirado.

Pero estoy perdido en los conceptos. SQLite según sus manuales dice que tiene tres tipos válidos para representar fechas (TEXT, REAL, INTEGER) y tu me los conviertes a DATE o eso es lo que veo en GAMBAS

Básicamente es que estoy tan perdido que no entiendo, por que, SQLite dice estas son mis reglas, y gambas aplica otras visualmente, supongo. (Todo esto ocurre por que no se ni de gambas ni de SQLite, vale)

Te voy a dar un ejemplo:

Datos CSV (yo supongo que el CSV no tienes tipos, si estoy equivocado, por favor dímelo)
Formato        = dia/mes/año Hora
Fecha1.valor = 8/2/19 10:00
Fecha2.valor = 8/11/19
Fecha3.valor = (unas veces "-" otras veces 8/11/19)

Tu conversión CSV a Tabla (lo veo en gambas)
Formato        = dia/mes/año Hora
Fecha1.valor.DATE      = 08/02/2019 10:00:00
Fecha2.valor.DATE      = 08/11/2019 00:00:00
Fecha3.valor.CADENA = (unas veces "" otras veces 8/11/19 tal cual esta en CSV)

Yo en PHP conversión a Tabla según mi adaptación en su día, viendo los manuales de SQLite y con total desconocimiento ni ayuda externa.
Formato       = año/mes/dia Hora
Fecha1.valor.CADENA = 2019/02/08 10:00
Fecha2.valor.CADENA = 2019/11/08
Fecha3.valor.CADENA = (unas veces "-" otras veces 2019/11/08)

Yo quiero dialogar de forma nativa con SQLite y trabajar con gambas, mi principal problema que tuve en su día, fue, que SQLite me daba problemas en el orden de las fechas cuando extraigo una Select ordenada por fechas. Y desde que convertí los datos en PHP se acabo el problema. Yo busco la misma estabilidad de datos en gambas y con tu conversición.

Por favor, me gustaría saber tu opinión al respecto. Gracias.

Nota: sobre tu opinión, por ejemplo, ¿tengo que cambiar tu programa conversión a algo parecido a lo que he hecho en PHP o tu lo ves diferente, no se?

Yo de php ni papa, o sea, que la segunda parte del post la ignoro.
Respecto a la primera, verás que cuando le pasas a Val la cadena dia/mes/año hora:minutos, hace la conversión correctamente. ¿Por qué? porque en gambas todas las fechas internamente son tipo datetime es decir incluyen el tiempo. Se compone en realidad de dos números, uno que indica el número de días desde el 1 de Enero del 4801 antes de Cristo. El otro es el número de milisegundos desde la media noche. No existe, internamente, el tipo date a secas (otra cosa es el manejo de las funciones de fecha que te pueden ocultar o no la hora).
Por tanto, a la hora de identificar los tpos de valor como fecha en un csv que viene mal formateado, invéntate una función, por ejemplo donde si la longitud del dato es menor de 11, añadas 00:00:00 a la cadena o algo así y pre-procesa el .csv antes de su inclusión... o cargalo tal cual viene en una tabla temporal y luego post-procesa dicha tabla... o si quieres, modifico el programa para que si tú dices que es DATE y el val no lo reconoce así, añada los ceros y pruebe otra vez...

Para saber más sobre fechas mira esto:
https://translate.google.es/transla...ki%2Fdoc%2Fdate
Aquí el original en inglés:
http://gambaswiki.org/wiki/doc/date

Como decía uno de mis mentores: El mejor programa es el que conoces. Es mal vicio ese de comparar lenguajes...   
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
shordi escribió:  
gambafeliz escribió:  
Estoy perdido, te cuento.

Es que tengo en el CSV 3 columnas con valores que representan Fechas pero nada estándar. Tu programa distingue 2 columnas como DATE y una como CADENA. Creo entender por que. Las dos primeras que ve como DATE y la tercera como CADENA. Como las distingue tengo que ver como, ya que no lo he mirado.

Pero estoy perdido en los conceptos. SQLite según sus manuales dice que tiene tres tipos válidos para representar fechas (TEXT, REAL, INTEGER) y tu me los conviertes a DATE o eso es lo que veo en GAMBAS

Básicamente es que estoy tan perdido que no entiendo, por que, SQLite dice estas son mis reglas, y gambas aplica otras visualmente, supongo. (Todo esto ocurre por que no se ni de gambas ni de SQLite, vale)

Te voy a dar un ejemplo:

Datos CSV (yo supongo que el CSV no tienes tipos, si estoy equivocado, por favor dímelo)
Formato        = dia/mes/año Hora
Fecha1.valor = 8/2/19 10:00
Fecha2.valor = 8/11/19
Fecha3.valor = (unas veces "-" otras veces 8/11/19)

Tu conversión CSV a Tabla (lo veo en gambas)
Formato        = dia/mes/año Hora
Fecha1.valor.DATE      = 08/02/2019 10:00:00
Fecha2.valor.DATE      = 08/11/2019 00:00:00
Fecha3.valor.CADENA = (unas veces "" otras veces 8/11/19 tal cual esta en CSV)

Yo en PHP conversión a Tabla según mi adaptación en su día, viendo los manuales de SQLite y con total desconocimiento ni ayuda externa.
Formato       = año/mes/dia Hora
Fecha1.valor.CADENA = 2019/02/08 10:00
Fecha2.valor.CADENA = 2019/11/08
Fecha3.valor.CADENA = (unas veces "-" otras veces 2019/11/08)

Yo quiero dialogar de forma nativa con SQLite y trabajar con gambas, mi principal problema que tuve en su día, fue, que SQLite me daba problemas en el orden de las fechas cuando extraigo una Select ordenada por fechas. Y desde que convertí los datos en PHP se acabo el problema. Yo busco la misma estabilidad de datos en gambas y con tu conversición.

Por favor, me gustaría saber tu opinión al respecto. Gracias.

Nota: sobre tu opinión, por ejemplo, ¿tengo que cambiar tu programa conversión a algo parecido a lo que he hecho en PHP o tu lo ves diferente, no se?

Yo de php ni papa, o sea, que la segunda parte del post la ignoro.
Respecto a la primera, verás que cuando le pasas a Val la cadena dia/mes/año hora:minutos, hace la conversión correctamente. ¿Por qué? porque en gambas todas las fechas internamente son tipo datetime es decir incluyen el tiempo. Se compone en realidad de dos números, uno que indica el número de días desde el 1 de Enero del 4801 antes de Cristo. El otro es el número de milisegundos desde la media noche. No existe, internamente, el tipo date a secas (otra cosa es el manejo de las funciones de fecha que te pueden ocultar o no la hora).
Por tanto, a la hora de identificar los tpos de valor como fecha en un csv que viene mal formateado, invéntate una función, por ejemplo donde si la longitud del dato es menor de 11, añadas 00:00:00 a la cadena o algo así y pre-procesa el .csv antes de su inclusión... o cargalo tal cual viene en una tabla temporal y luego post-procesa dicha tabla... o si quieres, modifico el programa para que si tú dices que es DATE y el val no lo reconoce así, añada los ceros y pruebe otra vez...

Para saber más sobre fechas mira esto:
https://translate.google.es/transla...ki%2Fdoc%2Fdate
Aquí el original en inglés:
http://gambaswiki.org/wiki/doc/date

Como decía uno de mis mentores: El mejor programa es el que conoces. Es mal vicio ese de comparar lenguajes...   


Perdón mia culpa. No me he explicado bien me parece o yo sigo sin ver aprendido nada de SQLite.

Te explico por que digo lo que te digo en la línea anterior, ok.

Tu me mandas a esta web de SQLite:
https://www.sqlite.org/datatype3.html

Leo este punto:

2.2. Date and Time Datatype

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values:

    TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS").
    REAL as Julian day numbers, the number of days since noon in Greenwich on November 24, 4714 B.C. according to the proleptic Gregorian calendar.
    INTEGER as Unix Time, the number of seconds since 1970-01-01 00:00:00 UTC.

Yo pongo en mi base de datos el formato TEXT as ISO8601 strings ("YYYY-MM-DD HH:MM:SS.SSS"), con un programa conversor que hice en PHP antes de sacar el tema aquí, por que yo entendí en su día que SQLite funciona perfectamente bien con este formato, y si te fijas tu conversor utiliza el formato DD-MM-YYYY HH:MM:SS es válido, "Sí" en gambas, pero mi pregunta era, ¿es igual de válido en SQLite de forma nativa?, como puedes ver, yo por desconocimiento, entiendo que no es válido, ya que no sigue su estándar, y esta es la pregunta que en realidad estaba haciendo, ¿Crees que tengo que modificar tu programa para que sea lo que dice la ayuda de SQLite o no es necesario por que tu hace tal o cual?

Es solo una pregunta de un novato. Que quede claro que no es ninguna critica, ni nada, ya sabe que te respeto y te valoro.

Saludos.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
Citar:
¿es igual de válido en SQLite de forma nativa?

Funcionar funciona, por cuanto Sqlite, como citas, no tiene un formato para las fechas. Lo que ellos ofrecen es una serie de funciones... que gambas no tiene por qué usar. En otras palabras, sqlite se traga lo que sea, por lo que al dejar a gambas que grabe lo que quiera, tu aplicación funcionará bien. Tema aparte es que luego eso que graba gambas sea del agrado del DBSqliteBrowser o del php o lo que sea.

De todas formas si te preocupa el estándar iso, puedes usar el gambas el formato 'yyyy/mm/dd hh:nn:ss.uu' (subrayo la n para los minutos) que te da los milisegundos en tres cifras y ya lo tienes (el tema de los guiones en lugar de barras (diga lo que diga la web esa) lo pongo en duda. Los guiones siempre han sido propiedad de lo que llaman "formato Francés" que es el que usamos en españa también. Pero no tengo ganas de leerme ahora la norma ISO, te lo juro.

Saludos
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
[quote user="shordi" post="45740"]
Citar:
  Los guiones siempre han sido propiedad de lo que llaman "formato Francés" que es el que usamos en españa también. Pero no tengo ganas de leerme ahora la norma ISO, te lo juro.

Saludos


que bueno. vaya tela. Gracias por atenderme, muy agradecido.

Saludos.
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
Hola

Existe una forma muy simple y rápida de hacerlo mediante el terminal. Hay que tener en cuenta que la importación crea la tabla cada vez, por lo que si existe previamente habrá que borrar dicha tabla. Otra consideración a tener en cuenta es si el fichero CSV lleva o no en el primer registro las cabeceras de las columnas.

Abrimos el terminal y entramos en el modo interactivo de sqlite3:

~ $ sqlite3


Entramos en modo csv para que el motor sqlite entienda el formato de entrada:

sqlite> .mode csv


Realizamos la importación del fichero csv mediante el comando .import usando la ruta completa del fichero e indicando el nombre de la tabla de destino:

sqlite> .import /home/jesus/input_file.csv test_table
sqlite>



Aunque no lo he probado a fondo, me imagino que si el fichero no lleva los encabezados, intentará usar una tabla existente. Si los lleva, creará la tabla desde 0, pero no he hecho pruebas. En cualquier caso, el orden de los campos es importante si lo que tratamos de hacer es importar la tabla completa o sólo insertar datos nuevos, lo que en mi opinión no es recomendable hacer usando este método.

Probadlo y comentamos.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
jguardon escribió:  
Hola

Existe una forma muy simple y rápida de hacerlo mediante el terminal. Hay que tener en cuenta que la importación crea la tabla cada vez, por lo que si existe previamente habrá que borrar dicha tabla. Otra consideración a tener en cuenta es si el fichero CSV lleva o no en el primer registro las cabeceras de las columnas.

Abrimos el terminal y entramos en el modo interactivo de sqlite3:

~ $ sqlite3


Entramos en modo csv para que el motor sqlite entienda el formato de entrada:

sqlite> .mode csv


Realizamos la importación del fichero csv mediante el comando .import usando la ruta completa del fichero e indicando el nombre de la tabla de destino:

sqlite> .import /home/jesus/input_file.csv test_table
sqlite>



Aunque no lo he probado a fondo, me imagino que si el fichero no lleva los encabezados, intentará usar una tabla existente. Si los lleva, creará la tabla desde 0, pero no he hecho pruebas. En cualquier caso, el orden de los campos es importante si lo que tratamos de hacer es importar la tabla completa o sólo insertar datos nuevos, lo que en mi opinión no es recomendable hacer usando este método.

Probadlo y comentamos.

Saludos


Gracias, había leído sobre esta forma pero no se si me va a ir bien, ya que mi problema principal es que los datos de mi CSV no son estándar para SQLite, se que se lo traga todo pero para mi programa no es válido que le mande datos a las tablas sin un estándar bien afinado. Yo en lo personal uso mucho el dialogo con las bases de datos directamente en SQL, más que usar gambas. Es simplemente mi manía.

Saludos
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
shordi:

Que significa la subrutina ->      bCargarCabcsv()  (Cargar Cabecera del archivo CSV) pero la "b"

Seguro que será obvio pero me he quedado pillado y no salgo del bucle mental. ¿que es?, por que notación húngara es boolean pero esto en una subrutina sin return es imposible que quieras decir esto.

Bueno si tienes tiempo y ganas me lo cuentas, por favoré.

Muchas thank you
 



 
gambafeliz - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Necesito Convertir Archivo, CSV A Una Tabla SQLite3, ¿Cual Es Vuestro Camino Mas Simple? 
 
gambafeliz escribió:  
shordi:

Que significa la subrutina ->      bCargarCabcsv()  (Cargar Cabecera del archivo CSV) pero la "b"

Seguro que será obvio pero me he quedado pillado y no salgo del bucle mental. ¿que es?, por que notación húngara es boolean pero esto en una subrutina sin return es imposible que quieras decir esto.

Bueno si tienes tiempo y ganas me lo cuentas, por favoré.

Muchas thank you

¿Aóooonde aparece esa cadena en mi código? que lo busco y no lo encuentro...
 




===================
No podemos regresar
 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 

Publicar nuevo tema  Responder al tema  Página 4 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron