Publié le :
Utilitaire CREATION_INTERNE

Exécuter une commande système et capturer la sortie dans un jeu de données

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
La macro `%cmd2ds` prend deux paramètres : `cmd` (la commande système à exécuter) et `dsout` (le nom du jeu de données de sortie, par défaut `_cmd2ds`). Elle utilise l'interface `filename ... pipe` pour exécuter la commande et rediriger sa sortie standard. Un DATA STEP lit ensuite chaque ligne de cette sortie et la stocke dans une variable `str` de 256 caractères dans le jeu de données spécifié. La référence `filename` est ensuite libérée, ce qui est crucial pour les ressources système.
Analyse des données

Type : CREATION_INTERNE


Le jeu de données de sortie est créé dynamiquement en lisant la sortie standard d'une commande système exécutée via l'interface 'pipe'. Chaque ligne de sortie de la commande devient une observation dans le jeu de données SAS.

1 Bloc de code
DATA STEP Data
Explication :
Ce bloc définit la macro `%cmd2ds`. Il gère le nom du jeu de données de sortie en lui attribuant une valeur par défaut `_cmd2ds` si `dsout` n'est pas spécifié. La déclaration `filename _cmd2ds pipe "&cmd";` est cruciale car elle exécute la commande système fournie par le paramètre `&cmd` et associe sa sortie à la fileref `_cmd2ds`. Le `DATA STEP` lit ensuite cette sortie ligne par ligne à l'aide de `infile _cmd2ds;` et `input;`, assignant chaque ligne à la variable `_infile_` puis à la variable `str`, créant ainsi le jeu de données SAS. Enfin, `filename _cmd2ds CLEAR;` libère la fileref, fermant le pipe et libérant les ressources système.
Copié !
1%put MACRO CALLED: cmd2ds v1.0;
2 
3%macro cmd2ds(cmd,dsout);
4 %IF not %LENGTH(&dsout) %THEN %let dsout=_cmd2ds;
5 filename _cmd2ds pipe "&cmd";
6 DATA &dsout;
7 LENGTH str $ 256;
8 INFILE _cmd2ds;
9 INPUT;
10 str=_infile_;
11 RUN;
12 filename _cmd2ds CLEAR;
13%mend cmd2ds;
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.
Informations de Copyright : This is public domain software. No guarantee as to suitability or accuracy is given or implied. User uses this code entirely at their own risk.