Publicado el :
Macro CREATION_INTERNE

Macro para la creación recursiva de directorios

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
La macro `%mkdir` toma una ruta de directorio como parámetro y la crea de forma recursiva utilizando el comando del sistema `md`. Verifica la existencia de cada segmento de la ruta y los crea si es necesario. La macro maneja nombres de archivo largos y muestra mensajes en caso de éxito o fallo en la creación del directorio. El uso de `%sysexec` la clasifica como un script de administración ya que interactúa directamente con el sistema operativo.
Análisis de datos

Type : CREATION_INTERNE


La macro interactúa directamente con el sistema de archivos para crear directorios y no procesa conjuntos de datos SAS internos o externos. La acción principal es la modificación del entorno del sistema.

1 Bloque de código
MACRO %mkdir
Explicación :
Este bloque define la macro `%mkdir`. Toma una ruta de directorio y un delimitador opcional. La macro analiza la ruta segmento por segmento. Para cada segmento, reconstruye una ruta parcial y verifica si el directorio existe con `%sysfunc(fileexist)`. Si un directorio no existe, el comando del sistema `md` se ejecuta a través de `%sysexec` para crearlo. Se mantiene un seguimiento para detectar si se ha realizado una creación (`&op = 1`). En caso de fallo en la creación de un directorio (verificado de nuevo por `fileexist`), el proceso se interrumpe y se define un mensaje de error. Finalmente, se muestra un mensaje de éxito o fallo. El uso de `%sysexec` implica que el entorno SAS debe tener los permisos necesarios para ejecutar comandos de shell.
¡Copiado!
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;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Subject: SOLUTION: Create a directory from SAS Date: 05/22/2000 Author: Benjamin Guralnik <guralnik @BEZEQINT.NET>Thanks, Jim.