Publicado el :
Administración COMMANDE_SYSTEME_EXTERNE

Extracción de metadatos de archivo mediante comando del sistema

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
La macro '%getstats' toma un argumento, 'dir_cmd', que representa el comando del sistema a ejecutar (por ejemplo, 'dir c:\path\to\file.exe'). Utiliza 'filename pipe' para capturar la salida de este comando. Un paso DATA intenta leer la 6ª línea de esta salida para extraer la fecha, la hora y el tamaño del archivo. Estos valores se almacenan luego en las variables macro globales '_date', '_time' y '_size' a través de 'call symput'. Es importante tener en cuenta que la declaración 'input' contiene rutas JSON no válidas como elementos, lo que hará que la extracción de datos no tenga éxito y provoque un error. Después de la llamada a la macro, las variables globales se muestran en el log de SAS©. El comando 'dir' es específico de Windows y su formato de salida puede variar, lo que requiere ajustes para otros sistemas operativos o versiones, y la robustez del análisis depende en gran medida de la constancia del formato de salida del comando del sistema.
Análisis de datos

Type : COMMANDE_SYSTEME_EXTERNE


Los datos procesados (fecha, hora, tamaño del archivo) provienen de la salida textual de un comando del sistema ('dir c:\windows\notepad.exe') ejecutado a través de 'filename pipe'. El formato de esta salida depende del sistema operativo y del idioma configurado, lo que hace que este método sea potencialmente no portable y susceptible a errores de análisis si el formato de salida del comando 'dir' cambia. La instrucción 'input' en el código proporcionado está mal formada, utilizando rutas de archivos JSON como elementos de la instrucción, lo que impedirá la lectura correcta de los datos en las variables 'date', 'time' y 'size'.

1 Bloque de código
MACRO DEFINICIÓN
Explicación :
Este bloque define la macro '%getstats' que espera un argumento 'dir_cmd' (el comando del sistema de tipo 'dir'). Utiliza 'filename pipe' para ejecutar el comando del sistema especificado y redirigir su salida a SAS, luego abre esta salida para lectura a través de 'infile cmd truncover'. Se utiliza un paso DATA para el procesamiento interno sin crear un conjunto de datos. La instrucción 'input #6' intenta leer la 6ª línea de la salida. Sin embargo, la presencia de cadenas como ' @code_sas_json/...' es un error de sintaxis en la instrucción 'input' e impedirá la lectura correcta de los valores de 'date', 'time' y 'size'. Por lo tanto, las variables probablemente estarán ausentes. Las funciones 'call symput' están destinadas a almacenar estos valores (que probablemente estarán ausentes o serán incorrectos) en las variables macro '_date', '_time' y '_size'.
¡Copiado!
1%macro getstats(dir_cmd) ;
2filename cmd pipe "&dir_cmd" ;
3DATA _null_ ;
4 INFILE cmd truncover ;
5 * This works on windows XP Professional, but on other version you might need to adjust the settings to
6 read the information you want from different positions ;
7 INPUT #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
8 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
9 @code_sas_json/q203.json size comma17. ;
10 * Now write the data to macro variables to be used ;
11 call symput('_date',put(date,date9.)) ;
12 call symput('_time',put(time,time5.)) ;
13 * note we use left justification within formatted field , otherwise number is right justified within field ;
14 call symput('_size',put(size,comma9. -l)) ;
15RUN ;
16%mend getstats ;
2 Bloque de código
LLAMADA A MACRO Y VISUALIZACIÓN
Explicación :
Este bloque declara las variables macro '_date', '_time' y '_size' como globales, para que puedan ser utilizadas después de la ejecución de la macro. Luego llama a la macro '%getstats' pasándole el comando del sistema 'dir c:\windows\notepad.exe' como argumento, lo que desencadena la ejecución del código de la macro. Finalmente, la instrucción '%put' intenta mostrar los valores de las variables macro 'Date', 'Time' y 'Size' en el log de SAS. Debido al error de análisis en la instrucción 'input' dentro de la macro, es muy probable que estas variables macro no estén correctamente definidas y que el '%put' muestre valores vacíos o errores.
¡Copiado!
1%global _date _time _size ;
2%getstats(dir c:\windows
3otepad.exe) ;
4%put Date=&_date Time=&_time Size=&_size ;
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.