Publié le :
Utilitaire EXTERNE

dirlist.sas - Macro pour lister les fichiers

Ce code est également disponible en : Deutsch English Español
En attente de validation
La macro `dirlist` prend deux paramètres : `path` (chemin d'accès au répertoire) et `outdn` (nom du jeu de données de sortie). Si `path` n'est pas fourni, un chemin par défaut est utilisé. Si `outdn` est vide ou `_null_`, les noms de fichiers sont imprimés directement dans le log SAS©. Sinon, un jeu de données est créé avec les informations des fichiers. Le code utilise la commande système 'dir' (spécifique à Windows) pour obtenir la liste des fichiers ; une adaptation (par exemple, 'ls' pour Linux) serait nécessaire dans un environnement SAS© Viya basé sur Linux. Le jeu de données de sortie est facultativement trié par extension et affiché.
Analyse des données

Type : EXTERNE


Les données proviennent d'une source externe : la liste des fichiers d'un répertoire du système d'exploitation, obtenue via la commande 'dir' (Windows) exécutée par un 'filename pipe'. Ces informations sont ensuite traitées pour créer un jeu de données SAS interne ou affichées dans le log.

1 Bloc de code
DÉFINITION MACRO & INITIALISATION
Explication :
Ce bloc définit la macro `dirlist` avec ses paramètres `path` et `outdn`. Il initialise également les valeurs par défaut de ces paramètres si elles ne sont pas fournies. `%superq` est utilisé pour vérifier si les paramètres sont vides, sans tenter de les résoudre, ce qui évite des erreurs pour les valeurs non-initialisées.
Copié !
1%macro dirlist(path, outdn);
2 /*set the defualt value of the required params if the value is null*/
3 %IF %superq(path)= %THEN %let path=&pdir.DATA;
4 %IF %superq(outdn)= %THEN %let outdn=_null_;
2 Bloc de code
FILENAME PIPE
Explication :
Cette instruction `filename pipe` est cruciale. Elle crée un fileref nommé `filelist` qui, au lieu de pointer vers un fichier physique, exécute une commande du système d'exploitation (`dir "&path" /o:n /b`) et traite sa sortie comme un fichier d'entrée. `dir /o:n /b` liste les fichiers du répertoire spécifié par `&path` (ordonnés par nom, format brut). Il est important de noter que 'dir' est une commande Windows ; pour un environnement Linux (courant pour SAS Viya), il faudrait utiliser une commande comme 'ls'.
Copié !
1filename filelist pipe %tslit(dir "&path" /o:n /b);
2 
3 Bloc de code
DATA STEP Data
Explication :
Ce bloc est une étape DATA qui lit la sortie de la commande 'dir' via le fileref `filelist`. Chaque ligne de la sortie (qui correspond à un nom de fichier) est lue dans la variable `fullname`. Si le paramètre `outdn` est `_null_`, le `fullname` est directement écrit dans le log SAS. Sinon, le code analyse le `fullname` pour extraire l'extension (`extname`) et le nom de fichier sans extension (`filename`). Les fonctions `index`, `scan`, `substr`, `length`, `lowcase` et `call missing` sont utilisées pour ce parsage.
Copié !
1DATA &outdn;
2 /*The max length of the name of a PC file is 255*/
3 LENGTH fullname $255 %IF &outdn ne _null_ %THEN filename $255 extname $10 ; ;
4 INFILE filelist truncover dlm="|";
5 INPUT fullname;
6 %IF &outdn=_null_ %THEN put fullname %str(;) ;
7 %ELSE %DO;
8 IF index(fullname, ".") THEN DO;
9 extname=lowcase(scan(fullname, -1, '.'));
10 filename=substr(fullname, 1, LENGTH(fullname)-LENGTH(extname)-1);
11 END;
12 ELSE DO;
13 filename=fullname;
14 call missing(extname);
15 END;
16 %END;
17 RUN;
4 Bloc de code
PROC SORT
Explication :
Si un jeu de données de sortie (`outdn`) a été spécifié (c'est-à-dire non `_null_`), ce bloc exécute une `PROC SORT`. Cette procédure trie le jeu de données créé par la DATA step selon la variable `extname` (extension de fichier), organisant ainsi les fichiers par type.
Copié !
1%IF &outdn ne _null_ %THEN %DO;
2 PROC SORT DATA=&outdn;
3 BY extname;
4 RUN;
5 Bloc de code
PROC PRINT
Explication :
Suite à la `PROC SORT` (si `outdn` n'est pas `_null_`), ce bloc utilise `PROC PRINT` pour afficher le contenu du jeu de données `outdn` dans la sortie SAS. Un titre descriptif est défini pour la sortie de la procédure, puis supprimé après l'exécution. Cela permet de visualiser les fichiers listés et leurs détails (nom complet, nom de fichier, extension) directement dans la sortie SAS.
Copié !
1 title "The &path contents";
2 PROC PRINT DATA=&outdn;
3 RUN;
4 title;
5 %END;
6 Bloc de code
NETTOYAGE & FIN DE MACRO
Explication :
Ce bloc final est responsable du nettoyage et de la clôture de la macro. L'instruction `filename filelist clear;` libère le fileref `filelist`, ce qui est une bonne pratique pour éviter les conflits ou l'utilisation accidentelle ultérieure. Enfin, `%mend dirlist;` marque la fin de la définition de la macro `dirlist`.
Copié !
1 filename filelist clear;
2%mend dirlist;
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 : Name : dirlist.sas Author: Jun Fang June, 2016