Publié le :
Administration COMMANDE_SYSTEME_EXTERNE

Extraction de métadonnées de fichier via commande système

Ce code est également disponible en : Deutsch English Español
Attention : Ce code nécessite des droits administrateur.
La macro '%getstats' prend un argument, 'dir_cmd', qui représente la commande système à exécuter (par exemple, 'dir c:\path\to\file.exe'). Elle utilise 'filename pipe' pour capturer la sortie de cette commande. Un DATA step tente de lire la 6ème ligne de cette sortie pour en extraire la date, l'heure et la taille du fichier. Ces valeurs sont ensuite stockées dans les variables macro globales '_date', '_time' et '_size' via 'call symput'. Il est important de noter que la déclaration 'input' contient des chemins JSON invalides en tant qu'éléments, ce qui rendra l'extraction des données infructueuse et provoquera une erreur. Après l'appel de la macro, les variables globales sont affichées dans le log SAS©. La commande 'dir' est spécifique à Windows et son format de sortie peut varier, nécessitant des ajustements pour d'autres systèmes d'exploitation ou versions, et la robustesse de l'analyse dépend fortement de la constance du format de sortie de la commande système.
Analyse des données

Type : COMMANDE_SYSTEME_EXTERNE


Les données traitées (date, heure, taille du fichier) proviennent de la sortie textuelle d'une commande système ('dir c:\windows\notepad.exe') exécutée via 'filename pipe'. Le format de cette sortie dépend du système d'exploitation et de la langue configurée, ce qui rend cette méthode potentiellement non portable et sujette à des erreurs de parsing si le format de sortie de la commande 'dir' change. L'instruction 'input' dans le code fourni est malformée, utilisant des chemins de fichiers JSON comme éléments de l'instruction, ce qui empêchera la lecture correcte des données dans les variables 'date', 'time' et 'size'.

1 Bloc de code
MACRO DÉFINITION
Explication :
Ce bloc définit la macro '%getstats' qui attend un argument 'dir_cmd' (la commande système de type 'dir'). Il utilise 'filename pipe' pour exécuter la commande système spécifiée et rediriger sa sortie vers SAS, puis ouvre cette sortie en lecture via 'infile cmd truncover'. Un DATA step est utilisé pour le traitement interne sans créer de jeu de données. L'instruction 'input #6' tente de lire la 6ème ligne de la sortie. Cependant, la présence de chaînes comme '@code_sas_json/...' est une erreur de syntaxe dans l'instruction 'input' et empêchera la lecture correcte des valeurs de 'date', 'time' et 'size'. Par conséquent, les variables seront probablement manquantes. Les fonctions 'call symput' sont destinées à stocker ces valeurs (qui seront probablement manquantes ou incorrectes) dans les variables macro '_date', '_time' et '_size'.
Copié !
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 Bloc de code
MACRO APPEL ET AFFICHAGE
Explication :
Ce bloc déclare les variables macro '_date', '_time' et '_size' comme globales, afin qu'elles puissent être utilisées après l'exécution de la macro. Il appelle ensuite la macro '%getstats' en lui passant la commande système 'dir c:\windows\notepad.exe' comme argument, ce qui déclenche l'exécution du code de la macro. Enfin, l'instruction '%put' tente d'afficher les valeurs des variables macro 'Date', 'Time' et 'Size' dans le log SAS. En raison de l'erreur d'analyse dans l'instruction 'input' au sein de la macro, il est fort probable que ces variables macro ne seront pas correctement définies et que le '%put' affichera des valeurs vides ou des erreurs.
Copié !
1%global _date _time _size ;
2%getstats(dir c:\windows
3otepad.exe) ;
4%put Date=&_date Time=&_time Size=&_size ;
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
Stéphanie
Spécialiste Machine Learning et IA.
« our rendre ce code plus robuste, privilégiez l'utilisation de fonctions natives SAS comme FINFO, FOPTNAME et FOPTNUM. Ces fonctions sont indépendantes de l'OS et évitent les risques liés à l'analyse (parsing) manuel de chaînes de caractères issues de commandes système externes. »