Die verarbeiteten Daten (Datum, Uhrzeit, Dateigröße) stammen aus der Textausgabe eines Systembefehls ('dir c:\windows\notepad.exe'), der über 'filename pipe' ausgeführt wird. Das Format dieser Ausgabe hängt vom Betriebssystem und der konfigurierten Sprache ab, was diese Methode potenziell nicht portabel und anfällig für Parsing-Fehler macht, falls sich das Ausgabeformat des 'dir'-Befehls ändert. Die 'input'-Anweisung im bereitgestellten Code ist fehlerhaft, da sie JSON-Dateipfade als Elemente der Anweisung verwendet, was das korrekte Lesen der Daten in die Variablen 'date', 'time' und 'size' verhindert.
1 Codeblock
MAKRO DEFINITION
Erklärung : Dieser Block definiert das Makro '%getstats', das ein Argument 'dir_cmd' erwartet (den Systembefehl vom Typ 'dir'). Es verwendet 'filename pipe', um den angegebenen Systembefehl auszuführen und dessen Ausgabe an SAS umzuleiten, und öffnet dann diese Ausgabe zum Lesen über 'infile cmd truncover'. Ein DATA-Schritt wird für die interne Verarbeitung verwendet, ohne ein Dataset zu erstellen. Die 'input #6'-Anweisung versucht, die 6. Zeile der Ausgabe zu lesen. Das Vorhandensein von Zeichenketten wie ' @code_sas_json/...' ist jedoch ein Syntaxfehler in der 'input'-Anweisung und verhindert das korrekte Lesen der Werte von 'date', 'time' und 'size'. Folglich werden die Variablen wahrscheinlich fehlen. Die Funktionen 'call symput' sollen diese Werte (die wahrscheinlich fehlen oder falsch sein werden) in den Makrovariablen '_date', '_time' und '_size' speichern.
Kopiert!
%macro getstats(dir_cmd) ;
filename cmd pipe "&dir_cmd" ;
data _null_ ;
infile cmd truncover ;
* This works on windows XP Professional, but on other version you might need to adjust the settings to
read the information you want from different positions ;
input #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
@code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
@code_sas_json/q203.json size comma17. ;
* Now write the data to macro variables to be used ;
call symput('_date',put(date,date9.)) ;
call symput('_time',put(time,time5.)) ;
* note we use left justification within formatted field , otherwise number is right justified within field ;
call symput('_size',put(size,comma9. -l)) ;
run ;
%mend getstats ;
1
%macro getstats(dir_cmd) ;
2
filename cmd pipe "&dir_cmd" ;
3
DATA _null_ ;
4
INFILE cmd truncover ;
5
* This works on windows XP Professional, but on other version you might need to adjust the settings to
6
read the information you want from different positions ;
7
INPUT #6 @code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json date ddmmyy10.
8
@code_sas_json/L3.13-Storing_a_List_of_Values_in_a_Macro-Variable.json time time5.
9
@code_sas_json/q203.json size comma17. ;
10
* Now write the data to macro variables to be used ;
11
call symput('_date',put(date,date9.)) ;
12
call symput('_time',put(time,time5.)) ;
13
* note we use left justification within formatted field , otherwise number is right justified within field ;
14
call symput('_size',put(size,comma9. -l)) ;
15
RUN ;
16
%mend getstats ;
2 Codeblock
MAKRO AUFRUF UND ANZEIGE
Erklärung : Dieser Block deklariert die Makrovariablen '_date', '_time' und '_size' als global, damit sie nach der Ausführung des Makros verwendet werden können. Anschließend ruft er das Makro '%getstats' auf und übergibt ihm den Systembefehl 'dir c:\windows\notepad.exe' als Argument, wodurch die Ausführung des Makrocodes ausgelöst wird. Schließlich versucht die '%put'-Anweisung, die Werte der Makrovariablen 'Date', 'Time' und 'Size' im SAS-Log anzuzeigen. Aufgrund des Parsing-Fehlers in der 'input'-Anweisung innerhalb des Makros ist es sehr wahrscheinlich, dass diese Makrovariablen nicht korrekt definiert werden und der '%put'-Befehl leere Werte oder Fehler anzeigt.
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.