Veröffentlicht am :

dirlist.sas - Makro zum Auflisten von Dateien

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
Das Makro `dirlist` verwendet zwei Parameter: `path` (Verzeichnispfad) und `outdn` (Name des Ausgabe-Datasets). Wenn `path` nicht angegeben wird, wird ein Standardpfad verwendet. Wenn `outdn` leer oder `_null_` ist, werden die Dateinamen direkt im SAS©-Log ausgegeben. Andernfalls wird ein Dataset mit den Dateiinformationen erstellt. Der Code verwendet den Systembefehl 'dir' (spezifisch für Windows), um die Dateiliste abzurufen; eine Anpassung (z.B. 'ls' für Linux) wäre in einer Linux-basierten SAS© Viya-Umgebung erforderlich. Das Ausgabe-Dataset wird optional nach Erweiterung sortiert und angezeigt.
Datenanalyse

Type : EXTERNE


Die Daten stammen aus einer externen Quelle: die Dateiliste eines Betriebssystemverzeichnisses, abgerufen über den Befehl 'dir' (Windows), der von einem 'filename pipe' ausgeführt wird. Diese Informationen werden anschließend verarbeitet, um ein internes SAS-Dataset zu erstellen oder im Log angezeigt zu werden.

1 Codeblock
MAKRO-DEFINITION & INITIALISIERUNG
Erklärung :
Dieser Block definiert das Makro `dirlist` mit seinen Parametern `path` und `outdn`. Er initialisiert auch die Standardwerte dieser Parameter, falls sie nicht angegeben sind. `%superq` wird verwendet, um zu prüfen, ob die Parameter leer sind, ohne sie aufzulösen, was Fehler bei nicht initialisierten Werten vermeidet.
Kopiert!
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 Codeblock
FILENAME PIPE
Erklärung :
Diese `filename pipe`-Anweisung ist entscheidend. Sie erstellt ein Fileref namens `filelist`, das, anstatt auf eine physische Datei zu verweisen, einen Betriebssystembefehl (`dir "&path" /o:n /b`) ausführt und dessen Ausgabe als Eingabedatei behandelt. `dir /o:n /b` listet die Dateien im durch `&path` angegebenen Verzeichnis auf (nach Namen geordnet, Rohformat). Es ist wichtig zu beachten, dass 'dir' ein Windows-Befehl ist; für eine Linux-Umgebung (üblich für SAS Viya) müsste ein Befehl wie 'ls' verwendet werden.
Kopiert!
1filename filelist pipe %tslit(dir "&path" /o:n /b);
2 
3 Codeblock
DATA STEP Data
Erklärung :
Dieser Block ist ein DATA-Step, der die Ausgabe des 'dir'-Befehls über das Fileref `filelist` liest. Jede Zeile der Ausgabe (die einem Dateinamen entspricht) wird in die Variable `fullname` gelesen. Wenn der Parameter `outdn` `_null_` ist, wird `fullname` direkt in das SAS-Log geschrieben. Andernfalls analysiert der Code `fullname`, um die Erweiterung (`extname`) und den Dateinamen ohne Erweiterung (`filename`) zu extrahieren. Die Funktionen `index`, `scan`, `substr`, `length`, `lowcase` und `call missing` werden für diese Analyse verwendet.
Kopiert!
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 Codeblock
PROC SORT
Erklärung :
Wenn ein Ausgabe-Dataset (`outdn`) angegeben wurde (d.h. nicht `_null_`), führt dieser Block eine `PROC SORT` aus. Diese Prozedur sortiert das durch den DATA-Step erstellte Dataset nach der Variablen `extname` (Dateierweiterung) und organisiert die Dateien somit nach Typ.
Kopiert!
1%IF &outdn ne _null_ %THEN %DO;
2 PROC SORT DATA=&outdn;
3 BY extname;
4 RUN;
5 Codeblock
PROC PRINT
Erklärung :
Nach der `PROC SORT` (falls `outdn` nicht `_null_` ist) verwendet dieser Block `PROC PRINT`, um den Inhalt des Datasets `outdn` in der SAS-Ausgabe anzuzeigen. Ein beschreibender Titel wird für die Prozedurausgabe definiert und dann nach der Ausführung entfernt. Dies ermöglicht die direkte Visualisierung der aufgelisteten Dateien und ihrer Details (vollständiger Name, Dateiname, Erweiterung) in der SAS-Ausgabe.
Kopiert!
1 title "The &path contents";
2 PROC PRINT DATA=&outdn;
3 RUN;
4 title;
5 %END;
6 Codeblock
BEREINIGUNG & MAKRO-ENDE
Erklärung :
Dieser letzte Block ist für die Bereinigung und das Beenden des Makros verantwortlich. Die Anweisung `filename filelist clear;` gibt das Fileref `filelist` frei, was eine gute Praxis ist, um Konflikte oder unbeabsichtigte spätere Verwendung zu vermeiden. Schließlich markiert `%mend dirlist;` das Ende der Definition des Makros `dirlist`.
Kopiert!
1 filename filelist clear;
2%mend dirlist;
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Name : dirlist.sas Author: Jun Fang June, 2016