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é !
%macro getstats(dir_cmd) ;
filename cmd pipe "&dir_cmd" ;
data _null_ ;
infile cmd truncover ;
* This works on windows XP Professional, but on other version you might need to adjust the settings to
read the information you want from different positions ;
input #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
@code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
@code_sas_json/q203.json size comma17. ;
* Now write the data to macro variables to be used ;
call symput('_date',put(date,date9.)) ;
call symput('_time',put(time,time5.)) ;
* note we use left justification within formatted field , otherwise number is right justified within field ;
call symput('_size',put(size,comma9. -l)) ;
run ;
%mend getstats ;
1
%macro getstats(dir_cmd) ;
2
filename cmd pipe "&dir_cmd" ;
3
DATA _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)) ;
15
RUN ;
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.
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.
« 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. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.