Rekursives Directorylisting

Aus BI-Snippets - Business Intelligence Code und Module
Wechseln zu: Navigation, Suche

Mittels MOpen kann man ermitteln, ob ein Name einem Verzeichnis oder einer Datei entspricht, da MOpen nur ein Handle erzeugt, falls eine Datei geöffnet wurde. Auf diese Weise lässt sich ein Verzeichnisbaum ab einem gegebenen Startpunkt rekursiv traversieren: <syntaxhighlight lang="SAS" line="1" >%macro recurseList(dir=.);

   %local fileref rc did did2 dnum dmem memname;
   %let rc=%sysfunc(filename(fileref,&dir));
   %let did=%sysfunc(dopen(&fileref));
   %let dnum=%sysfunc(dnum(&did));
   
   %do dmem=1 %to &dnum;
       %let memname=%sysfunc(dread(&did,&dmem));
       %put &dir\&memname;
       
       %let did2=%sysfunc(mopen(&did, &memname));
       %if &did2 = 0 %then %do;
         %recurseList(dir=&dir\&memname) ;
       %end;
       %else %do;
         %let rc=%sysfunc(dclose(&did2));
       %end;
   %end;
   %let rc=%sysfunc(dclose(&did));
   %let rc=%sysfunc(filename(fileref));

%mend recurseList;

options nomprint; %recurseList(dir=f:\temp); </syntaxhighlight>