Publicado el :

Macro de eliminación de archivos externos

Este código también está disponible en: Français Deutsch English
Attention : Este código requiere privilegios de administrador.
Esta macro, llamada `_delFile`, está diseñada para eliminar un archivo externo cuya ruta completa se proporciona como parámetro (`i_file`). Utiliza las funciones del sistema SAS© `filename` para asociar un fileref temporal al archivo, y luego `fdelete` para realizar la eliminación. El código de retorno de la operación es devuelto por la macro. Finalmente, el fileref temporal es liberado.
Análisis de datos

Type : EXTERNE


El script interactúa con un archivo externo especificado por un parámetro (`i_file`), realizando una operación de eliminación directamente en el sistema de archivos del SO. No consume ni produce conjuntos de datos SAS tradicionales.

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `_delFile` que toma `i_file` (la ruta del archivo a eliminar) como parámetro.
1. `%LOCAL rc filrf;`: Declara las variables de macro `rc` (código de retorno) y `filrf` (fileref temporal) como locales para evitar conflictos.
2. `%LET filrf=_tmpf;`: Asigna el nombre de fileref temporal `_tmpf` a la variable `filrf`.
3. `%LET rc=%sysfunc(filename(filrf,&i_file));`: Asocia el fileref `_tmpf` con la ruta del archivo proporcionada por `&i_file`. El código de retorno de esta operación se almacena en `rc`.
4. `%LET rc=%sysfunc(fdelete(_tmpf));`: Elimina el archivo asociado al fileref `_tmpf`. El código de retorno de la eliminación se actualiza en `rc`.
5. `&rc`: Esta línea emite el valor de `rc`, que representa el estado de la operación de eliminación.
6. `%LET rc=%sysfunc(filename(filrf));`: Libera la asociación del fileref `_tmpf`, una buena práctica para limpiar los recursos.
¡Copiado!
1%MACRO _delFile(i_file);
2 
3 %LOCAL rc filrf;
4 %LET filrf=_tmpf;
5 %LET rc=%sysfunc(filename(filrf,&i_file));
6 %LET rc=%sysfunc(fdelete(_tmpf));
7 &rc
8 %LET rc=%sysfunc(filename(filrf));
9%MEND _delFile;
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 : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. Este archivo es parte de SASUnit, el framework de pruebas unitarias para programas SAS(R). Para obtener información sobre derechos de autor y condiciones de uso bajo la Licencia Pública General Reducida de GNU, consulte el archivo README.md incluido o https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.


Banner
Consejo del Experto
Expert
Simon
Expert SAS et fondateur.
« La macro _delFile ilustra un método limpio y profesional para gestionar la eliminación de archivos directamente desde el procesador de macros. Al utilizar las funciones FILENAME y FDELETE, evitas el uso de comandos del sistema operativo (como rm en Unix o del en Windows), lo que garantiza que tu código sea totalmente portable y no dependa de permisos de ejecución de comandos externos (XCMD).

Recomendaciones estratégicas y mejores prácticas
Interpretación del código de retorno: La macro devuelve el valor de &rc. En SAS, un código de retorno 0 significa éxito. Cualquier otro valor indica un error (archivo inexistente, permisos insuficientes o archivo bloqueado por otro proceso). Para flujos de trabajo industriales, es vital capturar este valor (ej. %if %_delFile(...) = 0 %then...) para condicionar los pasos siguientes del programa.

Limpieza de Filerefs: La última instrucción %sysfunc(filename(filrf)) es fundamental. Al no pasar un segundo argumento, la función desasigna el fileref _tmpf. Esto evita la "fuga de filerefs", donde los nombres lógicos se acumulan en la sesión de SAS, lo cual es crítico en procesos que iteran sobre miles de archivos.

Manejo de bloqueos: Ten en cuenta que fdelete fallará si el archivo está siendo leído por otra aplicación o por una instrucción DATA o PROC de SAS que no haya cerrado el manejador de archivos todavía. »