Buenas!.
Tengo un archivo de texto que tiene tropecientas mil líneas con este formato:
Cita:02/29/16|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf
Fijaros en la fecha. Es MM/DD/YY ó M/D/Y.
Según tengo entendido Sqlite3 o SQL trabaja con el formato. Y/M/D
En principio usé la aplicación DB Browser for SQLITE e importe el archivo como CSV y le dije que el separador era "|"
Las fechas se encuentran desordenadas.
La estructura por defecto de la base de datos era:
field1 - campo de texto ( Donde va las fechas)
field2 - campo tipo entero ( Donde va el tamaño del archivo)
field3 - campo de texto ( Donde va el nombre del archivo ).
Buscando, encontré que si quiero mostrar solamente la columna de las fechas podía hacer esto:
Intenté hacer la consulta de esta forma para obtener solo las fechas de la base de datos.
Código:
select strftime(fecha,'%Y-%m-%d') from JuegosAmiga;
El resultado fue una lista nula.
Así que intenté primero cambiar del archivo de texto cada línea el formato de fecha.
De M/D/Y a Y/M/D.
Como me defiendo más con Gambas y no quería complicarme con Awk o Sed lo hice de esta forma:
( La codificación del texto es en latin1, así que cambié cada línea a utf-8)
Código:
Public Sub Form_Open()
Dim contenidotexto As String
Dim contenidomodificado As String
Dim acontenido As String[]
contenidotexto = File.Load(User.Home &/ "Descargas/filelist.txt")
acontenido = Split(contenidotexto, gb.NewLine, "", True)
contenidomodificado = CambiarFechaDeLineas(acontenido)
File.Save(User.Home &/ "Descargas/filelist3.txt", contenidomodificado)
End
Public Function CambiarFechaDeLineas(contenido As String[]) As String
' Modifica el comienzo de la línea, sustituyendo el formato de la fecha
Dim linea As String
Dim otralinea As String
Dim cambiofecha As String
Dim salida As String
Dim datos As String[]
Dim unafecha As Date
For Each linea In contenido
datos = Split(Conv(linea, "latin1", "utf-8"), "|")
unafecha = CDate(datos[0])
otralinea = Format(unafecha, "yy/mm/dd")
cambiofecha = Replace(linea, datos[0], otralinea)
salida &= cambiofecha & gb.NewLine
datos.Clear
Next
Return salida
End
Y obtengo una salida, ejemplo de línea de esta forma.
Cita:02/29/16|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf
a
16/02/29|901120|TheZone/files/_2016/Break (1986)(Martin Aberle)[aka Demolition] [not in tosec].adf
Esta vez utilicé la consola de sqlite3. Y usé estas instrucciones. ( La cosa es aprender sql ).
Cita:sqlite> CREATE TABLE JuegosAmiga(
...> fecha INTEGER NOT NULL,
...> size INTEGER NOT NULL,
...> nombre TEXT NOT NULL
...> );
sqlite> .mode csv
sqlite> .separator |
sqlite> .import filelist3.txt JuegosAmiga
sqlite> .save mibase.sqlite3
sqlite> .exit
E intente volver a ejecutar la sentencia sql que os comenté al principio. La salida volvió a ser la misma. Nula en todos los registros.
¿ Cuál es el problema de las fechas ?. He invertido la instrucción pero tampoco es la solución.
Otra es que salga como titulo de la cabecera de la columna, la función, que cosa más rara.
Os muestro el enlace que estoy siguiendo. Primero una en español que no me solucionó el problema. Que parece muy completa.
Función strftime para dar formatos a fechas y horas
La taba se crea las fechas como texto.
Y ahora la de inglés.
SQLite Strftime() Function
Espero que el problema no sea la conversión del archivo.
Saludos