Publié le :
Utilitaire Macro CREATION_INTERNE

Gestion des références de fichiers de log

Ce code est également disponible en : Français
La macro `sas©_log_ref` est conçue pour créer et gérer dynamiquement des filerefs temporaires pour des fichiers de log. Elle prend deux paramètres : `_file_` qui représente le nom de la référence du fichier de log à gérer, et `clear` qui, si présent, indique que la référence doit être libérée. Lors de l'enregistrement, la macro génère un nom de fileref unique (préfixé par `__log`) et l'associe à un chemin de fichier via la fonction `FILENAME`. Ces références actives sont suivies dans la variable macro globale `g_sdk_log_ref`. Pour la libération, elle supprime la référence du `g_sdk_log_ref` et libère le fileref système. La macro inclut une logique conditionnelle basée sur la version de SAS© (`&sysver.`) pour manipuler les chaînes de caractères (utilisant `compress`/`tranwrd` pour les versions antérieures à 9.2, et `prxchange` pour les versions 9.2 et ultérieures), garantissant la compatibilité.
Analyse des données

Type : CREATION_INTERNE


La macro manipule des variables macro et des filerefs SAS internes, mais ne traite pas directement de jeux de données SAS ou de données externes structurées. Son interaction avec les données se limite à la gestion des chemins de fichiers de log et à l'état des références système.

1 Bloc de code
MACRO SAS_LOG_REF
Explication :
Ce bloc de code définit la macro `sas_log_ref`. Elle est utilisée pour gérer dynamiquement les références de fichiers (filerefs) pour les logs. Si l'argument `clear` est fourni et non vide, la macro tente de supprimer une référence de log existante de la variable macro globale `g_sdk_log_ref` et de libérer le fileref associé. La suppression de la référence de la liste `g_sdk_log_ref` est gérée différemment selon la version de SAS (`&sysver.`), utilisant `TRANWRD` et `COMPRESS` pour les versions antérieures à 9.2 et `PRXCHANGE` pour les versions 9.2 et ultérieures. Si l'argument `clear` n'est pas fourni, la macro crée une nouvelle référence de log : elle génère un nom de fileref unique (commençant par `__log` suivi d'un nombre hexadécimal aléatoire), l'associe au chemin de fichier spécifié par le paramètre `_file_` via `FILENAME`, puis ajoute ce nouveau fileref à la variable macro globale `g_sdk_log_ref`. En cas d'échec d'allocation du fileref, un message d'erreur est émis et `_file_` est marqué comme `__err`.
Copié !
1/*************************************************
2* Copyright(c) 2015 coco, All Rights Reserved.
3* @json_qa/isAuthorizedTables_es_qa.json Daniel YU
4* @since 2015-04-09 09:32:34
5* @code_sas/_version.sas 1.0
6*
7*************************************************/
8 
9%macro sas_log_ref(_file_, clear);
10 %IF not %symexist(&_file_.) %THEN
11 %return;
12 %ELSE %IF %LENGTH(&&&_file_.)=0 or %bquote(&&&_file_.)=__err %THEN
13 %DO;
14 %let &_file_.=__err;
15 %return;
16 %END;
17 
18 %IF %LENGTH(&clear.) %THEN
19 %DO;
20 
21 %IF not %symexist(g_sdk_log_ref) %THEN
22 %return;
23 
24 %IF %index(&g_sdk_log_ref., |&&&_file_.|) %THEN
25 %DO;
26 
27 %IF &sysver.<9.2 %THEN
28 %let g_sdk_log_ref=%sysfunc(compress(%sysfunc(tranwrd(&g_sdk_log_ref.,
29 |&&&_file_.|, |))));
30 %ELSE
31 %let g_sdk_log_ref=%sysfunc(prxchange(%bquote(s/\|&&&_file_.\|/\|/),
32 -1, &g_sdk_log_ref.));
33 %local name;
34 %let name=&&&_file_.;
35 %let sysrc=%sysfunc(filename(name));
36 %END;
37 %END;
38 %ELSE
39 %DO;
40 
41 %IF %sysfunc(fileref(&_file_.) )>0 %THEN
42 %DO;
43 
44 %IF not %symexist(g_sdk_log_ref) %THEN
45 %DO;
46 %global g_sdk_log_ref;
47 %let g_sdk_log_ref=|;
48 %END;
49 %local name;
50 %let name=__log%sysfunc(int(%sysfunc(ranuni(-1))*4096),
51 hex3.);
52 
53 %DO %while(%index(&g_sdk_log_ref., |&name.|));
54 %let name=__log%sysfunc(int(%sysfunc(ranuni(-1))*4096),
55 hex3.);
56 %END;
57 
58 %IF %sysfunc(filename(name, &&&_file_.)) %THEN
59 %DO;
60 %put ERROR: Logref allocate failed!;
61 %let &_file_.=__err;
62 %END;
63 %ELSE
64 %DO;
65 %let &_file_.=&name.;
66 %let g_sdk_log_ref=&g_sdk_log_ref.&name.|;
67 %END;
68 %END;
69 %END;
70%mend;
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.
Informations de Copyright : Copyright(c) 2015 coco, All Rights Reserved. @json_qa/isAuthorizedTables_es_qa.json Daniel YU