Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Buenas tardes comunidad, junto con saludar y esperando que se encuentren bien, quisiera saber si me pueden ayudar con el siguiente inconveniente.
Al servidor de Qlik se suben distintos archivos los cuales en su nombre contienen el año, mes, día, hora, minutos y segundos la cual fueron subidos de la siguiente manera, /YYYYMMDDhhmmss_nombre_del_archivo.txt
El tema, es que para uno de mis requerimientos, necesito solo cargar el ultimo archivo que fue subido, es decir podría buscar por el nombre de archivo la fecha más actual. He obtenido el nombre con la función Left(FileBaseName(), 14) as nombredelarchivo. Hasta ahí todo bien, el problema es cómo hago para identificar la fecha más actual e insertarla en el script para cargar solo dicho archivo.
Por otro lado, funciones como Filetime() no me sirven, ya que en algún momento se puede actualizar algún archivo antiguo y la fecha que retorna dicha función será del archivo antiguo modificado.
Cualquier ayuda se los agradecería.
Hola! @Gonzalo_Adaro , gusto en saludarte, por favor prueba el siguiente script.
//Primero se usa la rutina tipica que tiene Qlik para leer los archivos de una carpeta.
sub DoDir (Root)
for each File in filelist (Root&'\*.txt')
Archivo:
LOAD
// Aquí el truco es extraer solo la parte numérica, que sirve automáticamente para traer un valor máximo
// 32 caracteres, ya que son los 8 de la fecha , 6 de la hora mas el nombre que les puse a los archivos
subfield(right('$(File)',32), '_', 1) as Id_Archivo, '$(File)' as Archivo
autogenerate 1;
next File
end sub
// Ojo aquí cree una lib apuntando a una carpeta con 3 archivos
call DoDir ('lib://Archivos (fabian_fabian)') //C:\Users\Fabian\Desktop\archivos
//Aquí trae el máximo valor, como es fecha y hora, y viene así en el nombre del archivo, se facilita la lectura
Id_Archivo:
Load
max(Id_Archivo) as Id_Archivo
Resident Archivo;
vArchivo = peek('Id_Archivo',0, 'Id_Archivo'); //Asigno el valor máximo a una variable
drop table Id_Archivo, Archivo; //borro tablas temporales
//Cargo el archivo con la fecha y hora máxima!, usando la variable
Archivo:
LOAD
FileBaseName() as Archivo,
@1
FROM [lib://Archivos (fabian_fabian)/$(vArchivo)_transacciones.txt]
(txt, utf8, no labels, delimiter is '\t', msq);
Hola! @Gonzalo_Adaro , gusto en saludarte, por favor prueba el siguiente script.
//Primero se usa la rutina tipica que tiene Qlik para leer los archivos de una carpeta.
sub DoDir (Root)
for each File in filelist (Root&'\*.txt')
Archivo:
LOAD
// Aquí el truco es extraer solo la parte numérica, que sirve automáticamente para traer un valor máximo
// 32 caracteres, ya que son los 8 de la fecha , 6 de la hora mas el nombre que les puse a los archivos
subfield(right('$(File)',32), '_', 1) as Id_Archivo, '$(File)' as Archivo
autogenerate 1;
next File
end sub
// Ojo aquí cree una lib apuntando a una carpeta con 3 archivos
call DoDir ('lib://Archivos (fabian_fabian)') //C:\Users\Fabian\Desktop\archivos
//Aquí trae el máximo valor, como es fecha y hora, y viene así en el nombre del archivo, se facilita la lectura
Id_Archivo:
Load
max(Id_Archivo) as Id_Archivo
Resident Archivo;
vArchivo = peek('Id_Archivo',0, 'Id_Archivo'); //Asigno el valor máximo a una variable
drop table Id_Archivo, Archivo; //borro tablas temporales
//Cargo el archivo con la fecha y hora máxima!, usando la variable
Archivo:
LOAD
FileBaseName() as Archivo,
@1
FROM [lib://Archivos (fabian_fabian)/$(vArchivo)_transacciones.txt]
(txt, utf8, no labels, delimiter is '\t', msq);
Un verdadero Crack, muchas gracias Fabian.
Espero seguir aprendiendo como tu y ser un aporte igual para la comunidad.
Saludos!
Fabian una consulta, replique la solución para cargar 3 archivos que se deben de combinar... todo bien... sin embargo, después de Editar la vista de mi app ya no me aparece la opción "Editor de Carga de Datos".. sabes que pudo haber pasado? en realidad es muy ligero el scrip y apenas uan base de 100k registros