Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Charger plusieurs fichiers sur FTP

Bonjour,

je fais face à un soucis. J'aimerais charger dans Qlikview tous les fichiers présents sur un serveur ftp. Mon script fonctionne pour un seul fichier mais pas pour tous les fichiers.

Voici le script :

Directory;

//On charge une table

TABLE_AEL:

LOAD *

FROM

'ftp://USERID:MDP@HOTE_FTP/Qlikview/AEL/OptinAEL_*.csv'

(txt, utf8, embedded labels, delimiter is ';', msq);

Il semble que l'étoile ne soit pas prise en compte comme la suite du nom de fichier.

Auriez-vous une solution?

Cordialement,

Simon

1 Solution

Accepted Solutions
lcloatre
Partner - Creator III
Partner - Creator III

Le même post sans le "lien" qui provoque l'intervention du modérateur :


- Créer un fichier avec extension bat RECUP_FILE.bat, par exemple (remplacer RECUP_FILE par ce que tu veux) qui contient cette ligne :

ftp -s:SERVEUR.ftp

- Créer un fichier de paramètres SERVEUR.ftp (remplacer SERVEUR par ce que tu veux) qui contient les lignes suivantes :

open xxx.xxx.xxx.xxx
yyyy
zzzz
prompt
lcd c:\dossierdetonpc
cd dossierdetonftp
mput *
quit

- xxx.xxx.xxx.xxx c'est l'adresse ip de ton ftp
- yyyy c'est le login
- zzzz c'est le mot de passe
- le lcd change le dossier courant sur ton pc
- le cd change le dossier courant sur ton ftp (ne pas confondre les deux)
- mget * dans cet exemple permet de copier tout le contenu de ton dossier serveur sur ton répertoire local

- il suffit d'exécuter le RECUP_FILE.bat

View solution in original post

31 Replies
kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour,

Il faut que tu fasses une boucle. Pour cela nomme tes fichiers sur le ftp avec un chiffre à la fin.

Par exemple :

- OptinAEL_1.csv

- OptinAEL_2.csv

...

- OptinAEL_10.csv

Ensuite dans ton script :

// charger les fichiers à partir du ftp

Set a=1;

Do while a<10 // changer ce chiffre en fonction du nombre de fichier

LOAD *

FROM

'ftp://USERID:MDP@HOTE_FTP/Qlikview/AEL/OptinAEL_$(a).csv'

(txt, utf8, embedded labels, delimiter is ';', msq);

Let a=a+1;

Loop

Kevin

kevinchevrier
Partner - Creator III
Partner - Creator III

Bonjour,

Il faut que tu fasses une boucle. Pour cela nomme tes fichiers sur le ftp avec un chiffre à la fin.

Par exemple :

- OptinAEL_1.csv

- OptinAEL_2.csv

...

- OptinAEL_10.csv

Ensuite dans ton script :

// charger les fichiers à partir du ftp

Set a=1;

Do while a<10 // changer ce chiffre en fonction du nombre de fichier

LOAD *

FROM

Chemin vers ton FTP/OptinAEL_$(a).csv

(txt, utf8, embedded labels, delimiter is ';', msq);

Let a=a+1;

Loop

Kevin

christophebrault
Specialist
Specialist

Bonjour,

Si tu as des contraintes de nommage, tu peux peut être utiliser une boucle comme celle ci :

for each File in filelist ('ftp://USERID:MDP@HOTE_FTP/Qlikview/AEL/OptinAEL_*.csv')

TABLE_AEL:

LOAD *

FROM

'ftp://USERID:MDP@HOTE_FTP/Qlikview/AEL/$(File).csv'

(txt, utf8, embedded labels, delimiter is ';', msq);

next File;


Pour debugger, regarde le contenu de la variable File pour vérifier que la fontion filelist() renvoie bien tous tes fichiers.

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
kevinchevrier
Partner - Creator III
Partner - Creator III

Effectivement, la solution de Christophe sera bien si tu n'as pas normé tes fichiers.

Tu peux même compléter avec les extensions de fichier voulues.

// Exemple 2 - Liste de tous les fichiers liés à QV sur le disque

sub DoDir (Root)

for each Ext in 'qvw', 'qvo', 'qvs', 'qvt', 'qvd'

for each File in filelist (Root&'\*.' &Ext)

Load '$(File)' as Name, FileSize( '$(File)' ) as

Size, FileTime( '$(File)' ) as FileTime

autogenerate 1;

next File

next Ext

for each Dir in dirlist (Root&' \*' )

call DoDir (Dir)

next Dir

end sub

call DoDir ('C:')

Kevin

Not applicable
Author

Bonjour,

merci pour votre réponse.

J'avais déjà essayé de faire ça mais ça ne fonctionne pas il ne récupère rien. Quand je debug, File = _NULL_.

Le seul moyen que j'ai pour l'instant trouvé est de charger une liste des noms des fichiers présents sur le ftp via un fichier txt qui se situe pour l'instant sur mon ordinateur. En revanche cette liste est manuelle et le but est que tout soit automatisé pour ne pas avoir à intervenir dès qu'un fichier est ajouté sur le ftp.

kevinchevrier
Partner - Creator III
Partner - Creator III

Ton chemin est variable en fonction des users etc. ?

Si oui il faut faire comme cela :

'ftp....USERID&':'&MDP&'@'&HOTE_FTP/Qlikview/AEL/OptinAEL_$(a).csv'


Ps: remplace les ... par ://. J'ai fait ça pour ne pas être en attente de modération

Kevin

Not applicable
Author

Non les userid, mot de passe, et hote sont toujours les mêmes.

Seule la fin du nom de fichier varie.

kevinchevrier
Partner - Creator III
Partner - Creator III

Si tu rajoute filename ça donne quoi ? :

LOAD *, filename()

FROM comme tu l'avais fait avec * dans ton premier post


Kevin

Not applicable
Author

Ca ne marche pas, une erreur s'affiche dès lors que l'ont met une * dans le FROM.