Veröffentlicht am :

Extrahieren von Dateiinformationen über OS-Befehl

Dieser Code ist auch verfügbar auf: English Español Français
Attention : Dieser Code erfordert Administratorrechte.
Das Skript definiert ein Makro namens `%getstats`, das ein Argument `dir_cmd` entgegennimmt, welches einen Betriebssystembefehl (wie 'dir') darstellt. Es verwendet die Anweisung `filename pipe`, um diesen Befehl auszuführen und seine Ausgabe zu erfassen. Ein `DATA _NULL_`-Schritt wird anschließend verwendet, um die sechste Zeile der Befehlsausgabe zu lesen und Werte (Datum, Uhrzeit, Größe) basierend auf angenommenen Positionen zu extrahieren. Diese Werte werden dann über `call symput` globalen Makrovariablen (`_date`, `_time`, `_size`) zugewiesen. Das Makro wird mit einem Befehl aufgerufen, um 'c:\windows\notepad.exe' zu inspizieren, und die resultierenden Makrovariablen werden über `%put` im SAS©-Log angezeigt.
Datenanalyse

Type : EXTERNE


Die vom Skript verarbeiteten Daten stammen aus der Standardausgabe eines Betriebssystembefehls (z.B. 'dir' unter Windows), der über `filename pipe` ausgeführt wird. Diese Daten werden vom DATA-Schritt spontan gelesen und analysiert.

1 Codeblock
MACRO / FILENAME
Erklärung :
Dieser Block definiert den Beginn des Makros `%getstats` und deklariert ein Fileref `cmd` vom Typ 'pipe'. Dieses Fileref ist so konfiguriert, dass es einen Betriebssystembefehl (als Argument `dir_cmd` übergeben) ausführt und dessen Ausgabe an SAS umleitet, wodurch SAS diese Ausgabe wie eine Datei lesen kann.
Kopiert!
1%macro getstats(dir_cmd) ;
2filename cmd pipe "&dir_cmd" ;
3 
2 Codeblock
DATA STEP
Erklärung :
Dieser `DATA _NULL_`-Block liest die Ausgabe des OS-Befehls über das Fileref `cmd`. Er ist darauf ausgelegt, die sechste Zeile (`#6`) zu lesen und Datum (`date`), Uhrzeit (`time`) und Größe (`size`) unter Verwendung spezifischer SAS-Formate zu extrahieren. **Achtung:** Die Zeichenketten ` @code_sas_json/...` in der `input`-Anweisung des Originalcodes stellen einen SAS-Syntaxfehler dar und würden das Skript funktionsunfähig machen. Die Absicht war wahrscheinlich, numerische Spaltenpositionen anzugeben (z.B. ` @code_sas_json_prod_multi/10 One to One Merge_de.json date ...`). Nach dem Lesen wird `call symput` verwendet, um diese formatierten Werte in den globalen Makrovariablen `_date`, `_time` und `_size` zu speichern.
Kopiert!
1DATA _null_ ;
2 INFILE cmd truncover ;
3 * This works on windows XP Professional, but on other version you might need to adjust the settings to
4 read the information you want from different positions ;
5 INPUT #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
7 @code_sas_json/q203.json size comma17. ;
8 * Now write the data to macro variables to be used ;
9 call symput('_date',put(date,date9.)) ;
10 call symput('_time',put(time,time5.)) ;
11 * note we use left justification within formatted field , otherwise number is right justified within field ;
12 call symput('_size',put(size,comma9. -l)) ;
13RUN ;
3 Codeblock
MACRO
Erklärung :
Dieser Abschnitt deklariert die Makrovariablen `_date`, `_time` und `_size` als global, wodurch sie nach Ausführung des Makros zugänglich sind. `%mend getstats` markiert das Ende der Makrodefinition.
Kopiert!
1%global _date _time _size ;
2%mend getstats ;
4 Codeblock
MACRO CALL / %PUT
Erklärung :
Dieser Block ruft das Makro `%getstats` auf und übergibt ihm den Systembefehl `dir c:\windows\notepad.exe`. Dies führt den Befehl aus und aktualisiert die Makrovariablen. Anschließend wird die Anweisung `%put` verwendet, um die endgültigen Werte von `_date`, `_time` und `_size` im SAS-Log anzuzeigen.
Kopiert!
1%getstats(dir c:\windows
2otepad.exe) ;
3%put Date=&_date Time=&_time Size=&_size ;
4 
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.