Cette macro génère un chemin de fichier unique en combinant un préfixe, une chaîne aléatoire basée sur le hachage (CRC32 de l'ID de job, ID de processus, temps, aléatoire), et une extension optionnelle. Si aucun chemin n'est fourni, elle utilise le chemin physique de la bibliothèque WORK. Le résultat est renvoyé dans une macro-variable appelante. Elle inclut une gestion de l'état des erreurs (SYSCC) pour ne pas polluer le journal en cas d'exécution réussie interne.
Analyse des données
Type : CREATION_INTERNE
Le traitement est effectué via une étape DATA _NULL_ qui manipule des chaînes de caractères et des fonctions système pour générer le nom de fichier.
1 Bloc de code
Macro Definition
Explication : Initialisation de la macro : déclaration des variables locales, appel à une macro de débogage interne, et sauvegarde de l'état actuel des erreurs système (SYSCC, SYSMSG) pour isoler l'exécution de la macro.
Explication : Cœur de la logique : détermine le répertoire racine (paramètre ou WORK), génère une chaîne aléatoire unique (basée sur le hachage d'infos système), ajoute l'extension et construit le chemin complet. Le résultat est stocké dans la macro-variable de retour via CALL SYMPUT.
Copié !
data _null_ ;
length root $ 4096
str $ 1024 ;
%* -- identify parent path ;
%* note: if not specified, using path of WORK library ;
root = symget('path');
if ( missing(root) ) then
root = pathname('WORK');
%* initililze with prefix ;
str = strip(symget('prefix'));
%* force first character to be A-Z-ish (thanks SAS) ;
if missing(str) then
str = byte( mod( floor(100*rand("uniform")), 26) + rank("A") - 1 ) ;
%* add random string ;
call cats( str, hashing( "crc32", catx( "-", symget('sysjobid'), symget('sysprocessid'), put( rand("uniform"), best32.), put( datetime(), datetime23.3) ) ) );
%* add file extension;
if ( not missing( symget('fileext') ) ) then
call catx( '.', str, symget('fileext') );
%* assign output value ;
call symput( symget('return'), translate( catx( "/", root, lowcase(str) ), "/", "\") );
run;
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) ;
Explication : Restaure l'état des codes erreurs système (SYSCC) tel qu'il était avant l'exécution de la macro, assurant que la macro n'efface pas les erreurs précédentes.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.