Publicado el :
Utilidad EXTERNE

dirlist.sas - Macro para listar archivos

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `dirlist` toma dos parámetros: `path` (ruta al directorio) y `outdn` (nombre del conjunto de datos de salida). Si no se proporciona `path`, se utiliza una ruta predeterminada. Si `outdn` está vacío o es `_null_`, los nombres de archivo se imprimen directamente en el log de SAS©. De lo contrario, se crea un conjunto de datos con la información de los archivos. El código utiliza el comando del sistema 'dir' (específico de Windows) para obtener la lista de archivos; sería necesaria una adaptación (por ejemplo, 'ls' para Linux) en un entorno SAS© Viya basado en Linux. El conjunto de datos de salida se clasifica opcionalmente por extensión y se muestra.
Análisis de datos

Type : EXTERNE


Los datos provienen de una fuente externa: la lista de archivos de un directorio del sistema operativo, obtenida a través del comando 'dir' (Windows) ejecutado por un 'filename pipe'. Esta información se procesa luego para crear un conjunto de datos SAS interno o se muestra en el log.

1 Bloque de código
DEFINICIÓN MACRO E INICIALIZACIÓN
Explicación :
Este bloque define la macro `dirlist` con sus parámetros `path` y `outdn`. También inicializa los valores predeterminados de estos parámetros si no se proporcionan. `%superq` se utiliza para verificar si los parámetros están vacíos, sin intentar resolverlos, lo que evita errores para valores no inicializados.
¡Copiado!
1%macro dirlist(path, outdn);
2 /*set the defualt value of the required params if the value is null*/
3 %IF %superq(path)= %THEN %let path=&pdir.DATA;
4 %IF %superq(outdn)= %THEN %let outdn=_null_;
2 Bloque de código
FILENAME PIPE
Explicación :
Esta instrucción `filename pipe` es crucial. Crea un fileref llamado `filelist` que, en lugar de apuntar a un archivo físico, ejecuta un comando del sistema operativo (`dir "&path" /o:n /b`) y procesa su salida como un archivo de entrada. `dir /o:n /b` lista los archivos del directorio especificado por `&path` (ordenados por nombre, formato bruto). Es importante señalar que 'dir' es un comando de Windows; para un entorno Linux (común para SAS Viya), sería necesario usar un comando como 'ls'.
¡Copiado!
1filename filelist pipe %tslit(dir "&path" /o:n /b);
2 
3 Bloque de código
DATA STEP Data
Explicación :
Este bloque es un paso DATA que lee la salida del comando 'dir' a través del fileref `filelist`. Cada línea de la salida (que corresponde a un nombre de archivo) se lee en la variable `fullname`. Si el parámetro `outdn` es `_null_`, el `fullname` se escribe directamente en el log de SAS. De lo contrario, el código analiza el `fullname` para extraer la extensión (`extname`) y el nombre de archivo sin extensión (`filename`). Las funciones `index`, `scan`, `substr`, `length`, `lowcase` y `call missing` se utilizan para este análisis.
¡Copiado!
1DATA &outdn;
2 /*The max length of the name of a PC file is 255*/
3 LENGTH fullname $255 %IF &outdn ne _null_ %THEN filename $255 extname $10 ; ;
4 INFILE filelist truncover dlm="|";
5 INPUT fullname;
6 %IF &outdn=_null_ %THEN put fullname %str(;) ;
7 %ELSE %DO;
8 IF index(fullname, ".") THEN DO;
9 extname=lowcase(scan(fullname, -1, '.'));
10 filename=substr(fullname, 1, LENGTH(fullname)-LENGTH(extname)-1);
11 END;
12 ELSE DO;
13 filename=fullname;
14 call missing(extname);
15 END;
16 %END;
17 RUN;
4 Bloque de código
PROC SORT
Explicación :
Si se ha especificado un conjunto de datos de salida (`outdn`) (es decir, no es `_null_`), este bloque ejecuta una `PROC SORT`. Este procedimiento ordena el conjunto de datos creado por el paso DATA según la variable `extname` (extensión de archivo), organizando así los archivos por tipo.
¡Copiado!
1%IF &outdn ne _null_ %THEN %DO;
2 PROC SORT DATA=&outdn;
3 BY extname;
4 RUN;
5 Bloque de código
PROC PRINT
Explicación :
Después de la `PROC SORT` (si `outdn` no es `_null_`), este bloque utiliza `PROC PRINT` para mostrar el contenido del conjunto de datos `outdn` en la salida de SAS. Se define un título descriptivo para la salida del procedimiento y luego se elimina después de la ejecución. Esto permite visualizar los archivos listados y sus detalles (nombre completo, nombre de archivo, extensión) directamente en la salida de SAS.
¡Copiado!
1 title "The &path contents";
2 PROC PRINT DATA=&outdn;
3 RUN;
4 title;
5 %END;
6 Bloque de código
LIMPIEZA Y FIN DE MACRO
Explicación :
Este bloque final es responsable de la limpieza y el cierre de la macro. La instrucción `filename filelist clear;` libera el fileref `filelist`, lo cual es una buena práctica para evitar conflictos o el uso accidental posterior. Finalmente, `%mend dirlist;` marca el final de la definición de la macro `dirlist`.
¡Copiado!
1 filename filelist clear;
2%mend dirlist;
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 : Name : dirlist.sas Author: Jun Fang June, 2016