Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Eviter les chemins absolus dans SCRIPT

Bonjour,

Je cherche m'affranchir de l’utilisation de chemin absolue

Quand je déplace le répertoire ou contient l'application (par exemple, vers un répertoire utilisateur ou un autre disque dur), le programme ne trouver plus les fichiers liés ni exécuter le script.

FOR Each Directory IN DirList('..\PROJET1\Sources\20*') // Pour chaque dossier commençant par 20...ON va effectuer la boucle 
Let folder='$(Directory)\*';
FOR Each Directory IN DirList('$(folder)')
Let folder2='$(Directory)\*';
     FOR Each File IN FileList('$(folder2)')
LET AnneeTravail = Left(Right('$(folder)',8),4);
LET MoisTravail = Right(Left('$(folder)',57),2);

Ainsi sur cette base j'utilise des fonctions RIGHT() et LELFT() pour récupérer la donnée que je souhaite.

Exemple :

LEFT(Mid('$(folder2)',INDEX('$(folder2)', '2')+7),INDEX(Mid('$(folder2)',INDEX('$(folder2)', '2')+7),'\')-1) as Ville

Il y aura un moyen de résoudre mon problème?

Merci d'avance

3 Replies
Not applicable
Author

Bonjour,

Pourrais-tu communiquer sur la hierarchie des repertoires car je ne sais pas trop comment tu recuperes le nom d'une ville.

P.S : tu n'utilises pas des chemins absolus mais relatifs (../)

Not applicable
Author

Oui vous avez raison chemin relatif, en fait je veux juste récupérer le nom de la ville de façon dynamique.

En fait j'ai l’architecture suivante : sur le bureau

Projet PSR -> PSR -> Sources->

                                                  201402(Ou il ya les villes)

                                                  201403 etc...

                                                             Marseille(ou il ya mes fichiers a traiter)

                                                               Paris

j'ai changé mon code :

FOR Each Directory in DirList('..\PSR\Sources\20*') // Pour chaque dossier commençant par 20...on va effectuer la boucle

LET AnneeMoisTravail = Right('$(Directory)',6);

LET AnneeTravail = Left('$(AnneeMoisTravail)',4);

LET MoisTravail = Right('$(AnneeMoisTravail)',2);

LET v_chemin = Right('$(Directory)',15);

LET folder='$(Directory)\*';

FOR Each Directory in DirList('$(folder)')

Let folder2='$(Directory)\*';

    FOR Each File in FileList('$(folder2)')

j'ai mis une variable "v_chemin" qui contient "\Sources\201402(AnnéeMois)"

je voulais déterminer la position de ma chaine de caractère contenu dans "v_chemin" depuis

le C:\Users\NomUsers\Desktop\Projet PSR\PSR

puis prendre tous ce qu'il vient après, ainsi prendre mon nom de ville qui est compris entre les deux '\' 

Exemple :

C:\Users\NomUsers\Desktop\Projet PSR\PSR\Sources\201402\Marseille\

Avant j'avais ça :

left(Mid('$(folder2)',index('$(folder2)', '2')+7),index(Mid('$(folder2)',index('$(folder2)', '2')+7),'\')-1) as Ville

Ainsi dans ma fonction MID() je lui dis de commencera partir du chiffre 2 mais si un jour j'ai chiffre 2 avant mon AnnéeMois ça ne marchera plus

Je ne sais pas si j'arrive a me faire comprendre?

Merci encoe de votre aide

Anonymous
Not applicable
Author

Bonjour,

Cette expression est beaucoup plus simple:

PurgeChar(Mid($(folder2), Index($(folder2), '\', -2)), '\') as Ville

Cordialement