Publié le :
Macro CREATION_INTERNE

Macro de création de répertoire récursif

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro `%mkdir` prend un chemin de répertoire en paramètre et le crée de manière récursive en utilisant la commande système `md`. Elle vérifie l'existence de chaque segment du chemin et les crée si nécessaire. La macro gère les noms de fichiers longs et affiche des messages en cas de succès ou d'échec de la création du répertoire. L'utilisation de `%sysexec` la classe comme un script d'administration car elle interagit directement avec le système d'exploitation.
Analyse des données

Type : CREATION_INTERNE


La macro interagit directement avec le système de fichiers pour créer des répertoires et ne traite pas de jeux de données SAS internes ou externes. L'action principale est la modification de l'environnement système.

1 Bloc de code
MACRO %mkdir
Explication :
Ce bloc définit la macro `%mkdir`. Elle prend un chemin de répertoire et un délimiteur optionnel. La macro analyse le chemin segment par segment. Pour chaque segment, elle reconstruit un chemin partiel et vérifie si le répertoire existe avec `%sysfunc(fileexist)`. Si un répertoire n'existe pas, la commande système `md` est exécutée via `%sysexec` pour le créer. Un suivi est maintenu pour détecter si une création a eu lieu (`&op = 1`). En cas d'échec de la création d'un répertoire (vérifié à nouveau par `fileexist`), le processus est interrompu et un message d'erreur est défini. Finalement, un message de succès ou d'échec est affiché. L'utilisation de `%sysexec` implique que l'environnement SAS doit avoir les permissions nécessaires pour exécuter des commandes shell.
Copié !
1 %macro mkdir(path,dlm=\\%);
2
3 %let msg = The path &path was successfully created.;
4
5 %let pos = 1;
6 %let token = %scan(&path, &pos, &dlm);
7 %let segment =;
8 %let delim =;
9 %let op =;
10
11
12 %DO %while (&token ne);
13
14 %let segment = &segment.&delim.&token;
15 %let delim = \\;
16 %* put &segment;
17
18 %let pos = %eval(&pos + 1);
19 %let token = %scan(&path, &pos, &dlm);
20
21 %IF %sysfunc(fileexist(&segment)) eq 0 %THEN %DO;
22 %sysexec md &segment;
23 %* put ERRORCODE &sysrc;
24 %let op = 1;
25
26 /* if the operation failed, display approptiate message
27 and abort the program */
28 %IF %sysfunc(fileexist(&segment)) eq 0 %THEN %DO;
29 %let token =;
30 %let msg = Invalid path name, directory will not be
31created.; %END;
32
33 %END;
34 %END;
35
36 %IF &op = 1 %THEN %put MKDIR: &msg;
37 /*
38 %else %put MKDIR: The path &path does already exist;
39 */
40 %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.
Informations de Copyright : Subject: SOLUTION: Create a directory from SAS Date: 05/22/2000 Author: Benjamin Guralnik <guralnik @BEZEQINT.NET>Thanks, Jim.