Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je possède un nombre de fichier important dans un dossier, ayant tous une date de modification différente.
Un nouveau fichier est stocké dans ce dossier tous les jours, je veux récupérer ce fichier dans QlikView.
J'ai fait un script qui permet de récupérer ce fichier en comparant la date de modification de tous les fichiers du dossier :
set Time = '01/01/2000 00:00:00';
set Name = '';
for each File in filelist ('C:\DetailVente\*.*')
let FileTime = FileTime('$(File)');
let Time = if ('$(FileTime)'>'$(Time)' , '$(FileTime)' , '$(Time)');
let Name = if ('$(FileTime)'>'$(Time)' , '$(File)' , '$(Name)');
next File;
Mais ceci nécessite de regarder la date des fichiers un par un et de les tester avec la date du fichier d'avant jusqu'à trouver la date la plus récente, ce qui est problématique avec un très grand nombre de fichier.
Je voudrais savoir si il y a une méthode plus simple ou plus rapide pour récupérer ce fichier.
Est-ce qu'il serait possible par exemple d'utiliser la fonction Max() avec la fonction FileTime() et FileBaseName() ?
Je vous remercie par avance pour vos réponses.
Bonjour Hugo,
Je l'ai fait sous QS mais tu peux simplement l'adapter sous QV
Essaye ceci !
Fichiers: First 1 LOAD FileName() as NomFichier, FileTime() as DerniereModif FROM [lib://QVD Files/*.qvd] (qvd); NoConcatenate FichiersTemp: Load NomFichier, DerniereModif Resident Fichiers Order by DerniereModif asc; Let vNomFichier = peek('NomFichier',-1, 'FichiersTemp'); Drop tables Fichiers, FichiersTemp; //Chargement des données du fichier récupéré Data: Load * FROM [lib://QVD Files/$(vNomFichier)] (qvd);
Bonjour,
Merci beaucoup pour ta réponse, c'est ce qu'il me fallait.
Possédant la date de création du fichier dans son nom (exemple : journal_20190327), j'ai décidé de trier par cette date plutôt que la date de modification, afin de ne pas avoir de problème si un ancien fichier doit être modifié.
Voici le code final :
Fichiers:
First 1
LOAD
FileName() as NomFichier,
date(mid(FileBaseName(),9,8),'DDMMYYYY') as DateNomFichier
FROM ['C:\DetailVente\journal*.csv']
(txt, utf8, embedded labels, delimiter is ';', msq);;
NoConcatenate
FichiersTemp:
Load
NomFichier,
DateNomFichier
Resident Fichiers
Order by DateNomFichier asc;
Name = peek('NomFichier',-1, 'FichiersTemp');
Drop tables Fichiers, FichiersTemp;
(PS: Je n'avais pas compris l'utilité du "First 1" au début et j'ai osé recharger mon application sans le mettre... mauvaise idée !!)
Encore merci et bonne journée.
Bonjour,
Pourquoi tu ne mets pas les fichiers traités dans un répertoire "Archives", par exemple ?
Ce serait plus simple.
Merci beaucoup pour ta réponse,
C'est une bonne idée mais nous ne voulons pas intervenir manuellement dans le dossier.
Tu peux utiliser la commande EXECUTE dans ton script :
execute cmd.exe /C move /Y "$(File)" "$(FileDestination)";
Bonjour Hugo,
Je l'ai fait sous QS mais tu peux simplement l'adapter sous QV
Essaye ceci !
Fichiers: First 1 LOAD FileName() as NomFichier, FileTime() as DerniereModif FROM [lib://QVD Files/*.qvd] (qvd); NoConcatenate FichiersTemp: Load NomFichier, DerniereModif Resident Fichiers Order by DerniereModif asc; Let vNomFichier = peek('NomFichier',-1, 'FichiersTemp'); Drop tables Fichiers, FichiersTemp; //Chargement des données du fichier récupéré Data: Load * FROM [lib://QVD Files/$(vNomFichier)] (qvd);
Bonjour,
Merci beaucoup pour ta réponse, c'est ce qu'il me fallait.
Possédant la date de création du fichier dans son nom (exemple : journal_20190327), j'ai décidé de trier par cette date plutôt que la date de modification, afin de ne pas avoir de problème si un ancien fichier doit être modifié.
Voici le code final :
Fichiers:
First 1
LOAD
FileName() as NomFichier,
date(mid(FileBaseName(),9,8),'DDMMYYYY') as DateNomFichier
FROM ['C:\DetailVente\journal*.csv']
(txt, utf8, embedded labels, delimiter is ';', msq);;
NoConcatenate
FichiersTemp:
Load
NomFichier,
DateNomFichier
Resident Fichiers
Order by DateNomFichier asc;
Name = peek('NomFichier',-1, 'FichiersTemp');
Drop tables Fichiers, FichiersTemp;
(PS: Je n'avais pas compris l'utilité du "First 1" au début et j'ai osé recharger mon application sans le mettre... mauvaise idée !!)
Encore merci et bonne journée.