Publié le :

Extraction d'informations de fichier via commande OS

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
Le script définit une macro nommée `%getstats` qui prend un argument `dir_cmd`, représentant une commande du système d'exploitation (comme 'dir'). Il utilise l'instruction `filename pipe` pour exécuter cette commande et capturer sa sortie. Un `DATA _NULL_` pas est ensuite utilisé pour lire la sixième ligne de la sortie de la commande et extraire des valeurs (date, heure, taille) en se basant sur des positions supposées. Ces valeurs sont ensuite assignées à des variables macro globales (`_date`, `_time`, `_size`) via `call symput`. La macro est appelée avec une commande pour inspecter 'c:\windows\notepad.exe', et les variables macro résultantes sont affichées dans le log SAS© via `%put`.
Analyse des données

Type : EXTERNE


Les données traitées par le script proviennent de la sortie standard d'une commande du système d'exploitation (par exemple, 'dir' sous Windows) exécutée via `filename pipe`. Ces données sont lues et analysées à la volée par le DATA step.

1 Bloc de code
MACRO / FILENAME
Explication :
Ce bloc définit le début de la macro `%getstats` et déclare un fileref `cmd` de type 'pipe'. Ce fileref est configuré pour exécuter une commande du système d'exploitation (passée en argument `dir_cmd`) et rediriger sa sortie vers SAS, permettant ainsi à SAS de lire cette sortie comme un fichier.
Copié !
1%macro getstats(dir_cmd) ;
2filename cmd pipe "&dir_cmd" ;
3 
2 Bloc de code
DATA STEP
Explication :
Ce bloc `DATA _NULL_` lit la sortie de la commande OS via le fileref `cmd`. Il est conçu pour lire la sixième ligne (`#6`) et extraire des valeurs de date (`date`), d'heure (`time`) et de taille (`size`) en utilisant des formats SAS spécifiques. **Attention :** Les chaînes de caractères `@code_sas_json/...` incluses dans l'instruction `input` du code original représentent une erreur de syntaxe SAS et rendraient le script non fonctionnel. L'intention était probablement de spécifier des positions de colonne numériques (e.g., `@10 date ...`). Après la lecture, `call symput` est utilisé pour stocker ces valeurs formatées dans les variables macro globales `_date`, `_time` et `_size`.
Copié !
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 Bloc de code
MACRO
Explication :
Cette section déclare les variables macro `_date`, `_time` et `_size` comme globales, les rendant accessibles après l'exécution de la macro. `%mend getstats` marque la fin de la définition de la macro.
Copié !
1%global _date _time _size ;
2%mend getstats ;
4 Bloc de code
MACRO CALL / %PUT
Explication :
Ce bloc appelle la macro `%getstats` en lui fournissant la commande système `dir c:\windows\notepad.exe`. Cela exécute la commande et met à jour les variables macro. Ensuite, l'instruction `%put` est utilisée pour afficher les valeurs finales de `_date`, `_time` et `_size` dans le log SAS.
Copié !
1%getstats(dir c:\windows
2otepad.exe) ;
3%put Date=&_date Time=&_time Size=&_size ;
4 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« ce script est dépendant de l'environnement. Puisqu'il lit des positions fixes (colonne et ligne), un changement de version du système d'exploitation ou même de langue de la console (ex: passage de l'anglais au français) peut décaler les colonnes et fausser l'extraction. Pour une robustesse accrue, privilégiez toujours une vérification des positions de lecture lors du portage de ce code sur un nouveau serveur. »