Veröffentlicht am :
Macro CREATION_INTERNE

Erzeugung eines temporären Dateinamens

Dieser Code ist auch verfügbar auf: English Español Français
Dieses Makro generiert einen eindeutigen Dateipfad, indem es ein Präfix, eine zufällige, auf einem Hash basierende Zeichenkette (CRC32 aus Job-ID, Prozess-ID, Zeit, Zufall) und eine optionale Erweiterung kombiniert. Wird kein Pfad angegeben, wird der physische Pfad der WORK-Bibliothek verwendet. Das Ergebnis wird in einer aufrufenden Makrovariablen zurückgegeben. Es beinhaltet eine Fehlerstatusverwaltung (SYSCC), um das Protokoll bei erfolgreicher interner Ausführung nicht zu belasten.
Datenanalyse

Type : CREATION_INTERNE


Die Verarbeitung erfolgt über einen DATA _NULL_ Schritt, der Zeichenketten und Systemfunktionen zur Generierung des Dateinamens manipuliert.

1 Codeblock
Macro Definition
Erklärung :
Initialisierung des Makros: Deklaration lokaler Variablen, Aufruf eines internen Debugging-Makros und Speichern des aktuellen Systemfehlerstatus (SYSCC, SYSMSG) zur Isolierung der Makroausführung.
Kopiert!
1%macro cxtf_tempfile( prefix = __cxtf, path = , fileext = , return = );
2 
3 %local _cxtf_rc _cxtf_syscc _cxtf_sysmsg _cxtf_debug
4 _str
5 ;
6 
7 %* PRINT debug details ;
8 %_cxtf_debug();
9 
10 
11 %* -- capture entry state ;
12 %let _cxtf_syscc = 0;
13 %let _cxtf_sysmsg = ;
14 
15 %IF ( &syscc ^= 0 ) %THEN %DO;
16 %let _cxtf_syscc = &syscc;
17 %let _cxtf_sysmsg = &sysmsg;
18 
19 %let syscc = 0;
20 %let sysmsg = ;
21 
22 %END;
2 Codeblock
DATA STEP
Erklärung :
Kern der Logik: Bestimmt das Stammverzeichnis (Parameter oder WORK), generiert eine eindeutige Zufallszeichenkette (basierend auf dem Hashing von Systeminformationen), fügt die Erweiterung hinzu und erstellt den vollständigen Pfad. Das Ergebnis wird über CALL SYMPUT in der Rückgabe-Makrovariablen gespeichert.
Kopiert!
1 DATA _null_ ;
2 
3 LENGTH root $ 4096
4 str $ 1024 ;
5 
6 %* -- identify parent path ;
7 %* note: IF not specified, using path of WORK library ;
8 root = symget('path');
9 
10 IF ( missing(root) ) THEN
11 root = pathname('WORK');
12 
13 
14 %* initililze with prefix ;
15 str = strip(symget('prefix'));
16 
17 
18 %* force first character to be A-Z-ish (thanks SAS) ;
19 IF missing(str) THEN
20 str = byte( mod( floor(100*rand("uniform")), 26) + rank("A") - 1 ) ;
21 
22 %* add random string ;
23 call cats( str, hashing( "crc32", catx( "-", symget('sysjobid'), symget('sysprocessid'), put( rand("uniform"), best32.), put( datetime(), datetime23.3) ) ) );
24 
25 
26 %* add file extension;
27 IF ( not missing( symget('fileext') ) ) THEN
28 call catx( '.', str, symget('fileext') );
29 
30 
31 %* assign OUTPUT value ;
32 call symput( symget('return'), translate( catx( "/", root, lowcase(str) ), "/", "\") );
33 
34 RUN;
3 Codeblock
Macro Cleanup
Erklärung :
Stellt den Zustand der Systemfehlercodes (SYSCC) so wieder her, wie er vor der Ausführung des Makros war, um sicherzustellen, dass das Makro keine vorherigen Fehler löscht.
Kopiert!
1 %* -- macro exit point ;
2 %macro_exit:
3 
4 
5 
6 %* -- restore entry state ;
7 %IF ( &_cxtf_syscc ^= 0 ) %THEN %DO;
8 %let syscc = &_cxtf_syscc;
9 %let sysmsg = &_cxtf_sysmsg;
10 %END;
11 
12 
13%mend;
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.