Publié le :
Macro CREATION_INTERNE

Macro pour obtenir le chemin d'un répertoire système

En attente de validation
Attention : Ce code nécessite des droits administrateur.
Cette macro nommée 'AHGdosdir' a pour but de récupérer le chemin complet d'un répertoire spécifié. Pour ce faire, elle utilise la commande 'X' de SAS©, qui permet d'exécuter des commandes directement au niveau du système d'exploitation (comme une invite de commande DOS/Windows). Le script change d'abord le répertoire courant ('cd'), puis exécute la commande 'cd' seule pour afficher le chemin courant, dont la sortie est redirigée vers un fichier temporaire. Une étape DATA _NULL_ lit ensuite ce fichier pour affecter le chemin à une variable macro globale 'dosdir'. Un paramètre optionnel 'perldir' permet de formater le chemin en doublant les anti-slashes pour une compatibilité avec Perl.
Analyse des données

Type : CREATION_INTERNE


La source de données est le résultat d'une commande système. Le script crée un fichier temporaire ('c:\tmp.tmp' ou '&localtemp\tmp.tmp') qui contient le chemin du répertoire, puis lit ce fichier. Aucune donnée externe préexistante n'est nécessaire.

1 Bloc de code
MACRO Data
Explication :
Ce bloc définit la macro `%AHGdosdir`. Elle commence par activer l'option `noxwait` pour ne pas attendre la fin des commandes système. Elle exécute deux commandes système via l'instruction `X` : la première pour changer de répertoire (`cd`) et la seconde pour écrire le chemin du répertoire courant dans un fichier temporaire. Ensuite, une étape `DATA _NULL_` est utilisée pour lire le contenu de ce fichier temporaire. La fonction `tranwrd` est conditionnellement utilisée pour remplacer les anti-slashes par des doubles anti-slashes. Enfin, `call symput` assigne le chemin lu à la variable macro globale `dosdir`.
Copié !
1%macro AHGdosdir(name,perldir=0,len=300);
2 
3 option noxwait;
4 x "cd \"&name\" ";
5 x "command & cd >&localtemp\tmp.tmp ";
6 %global dosdir;
7 
8 DATA _null_;
9 LENGTH dir $&len;
10 INFILE 'c:\tmp.tmp';
11 INPUT dir;
12 IF &perldir THEN dir=tranwrd(dir,'\','\\');
13 call symput('dosdir',dir);
14 RUN;
15 
16 
17%mend;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Soyez prudent avec l'utilisation des chemins codés en dur comme c:\tmp.tmp. Dans les environnements modernes et sécurisés (comme SAS Viya sur Linux), l'accès direct à la racine C: peut être restreint. Privilégiez l'utilisation de la fonction SAS %sysfunc(getoption(work)) pour placer vos fichiers temporaires dans le répertoire WORK, ce qui garantit que votre macro fonctionnera partout, quel que soit le serveur »