Publicado el :

Extracción de información de archivo mediante comando del sistema operativo

Este código también está disponible en: Deutsch English Français
Attention : Este código requiere privilegios de administrador.
El script define una macro llamada `%getstats` que toma un argumento `dir_cmd`, que representa un comando del sistema operativo (como 'dir'). Utiliza la instrucción `filename pipe` para ejecutar este comando y capturar su salida. Luego se utiliza un paso `DATA _NULL_` para leer la sexta línea de la salida del comando y extraer valores (fecha, hora, tamaño) basándose en posiciones supuestas. Estos valores se asignan posteriormente a variables macro globales (`_date`, `_time`, `_size`) a través de `call symput`. La macro se llama con un comando para inspeccionar 'c:\windows\notepad.exe', y las variables macro resultantes se muestran en el log SAS© a través de `%put`.
Análisis de datos

Type : EXTERNO


Los datos procesados por el script provienen de la salida estándar de un comando del sistema operativo (por ejemplo, 'dir' en Windows) ejecutado a través de `filename pipe`. Estos datos son leídos y analizados sobre la marcha por el paso DATA.

1 Bloque de código
MACRO / FILENAME
Explicación :
Este bloque define el inicio de la macro `%getstats` y declara un fileref `cmd` de tipo 'pipe'. Este fileref está configurado para ejecutar un comando del sistema operativo (pasado como argumento `dir_cmd`) y redirigir su salida a SAS, permitiendo así a SAS leer esta salida como un archivo.
¡Copiado!
1%macro getstats(dir_cmd) ;
2filename cmd pipe "&dir_cmd" ;
3 
2 Bloque de código
DATA STEP
Explicación :
Este bloque `DATA _NULL_` lee la salida del comando OS a través del fileref `cmd`. Está diseñado para leer la sexta línea (`#6`) y extraer valores de fecha (`date`), hora (`time`) y tamaño (`size`) utilizando formatos SAS específicos. **Advertencia:** Las cadenas de caracteres `@code_sas_json/...` incluidas en la instrucción `input` del código original representan un error de sintaxis SAS y harían que el script no funcionara. La intención era probablemente especificar posiciones de columna numéricas (por ejemplo, `@code_sas_json_prod_multi/10 One to One Merge_de.json date ...`). Después de la lectura, `call symput` se utiliza para almacenar estos valores formateados en las variables macro globales `_date`, `_time` y `_size`.
¡Copiado!
1DATA _null_ ;
2 INFILE cmd truncover ;
3 * This works on windows XP Professional, but on other version you might need to adjust the settings to
4 read the information you want from different positions ;
5 INPUT #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
7 @code_sas_json/q203.json size comma17. ;
8 * Now write the data to macro variables to be used ;
9 call symput('_date',put(date,date9.)) ;
10 call symput('_time',put(time,time5.)) ;
11 * note we use left justification within formatted field , otherwise number is right justified within field ;
12 call symput('_size',put(size,comma9. -l)) ;
13RUN ;
3 Bloque de código
MACRO
¡Copiado!
1%global _date _time _size ;
2%mend getstats ;
4 Bloque de código
MACRO CALL / %PUT
¡Copiado!
1%getstats(dir c:\windows
2otepad.exe) ;
3%put Date=&_date Time=&_time Size=&_size ;
4 
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.