Toutes les données utilisées sont générées dynamiquement et de manière interne par le script. Il s'agit principalement de fichiers texte temporaires créés dans la bibliothèque SAS WORK pour simuler des scénarios de remplacement de texte. Aucune donnée issue de SASHELP ou de sources externes non gérées n'est nécessaire pour l'exécution de ces tests.
1 Bloc de code
Macro Conditionnelle
Explication : Ce bloc de code effectue une vérification de l'environnement d'exécution. Il teste si la version de SAS est 'V.04', correspondant à SAS Viya 4. Si c'est le cas, un message d'erreur est affiché dans le log SAS, et l'exécution de la macro est interrompue. Cela indique une incompatibilité de la bibliothèque IO Lua, essentielle pour `mp_gsubfile`, avec SAS Viya 4 à ce stade.
Copié !
%if "%substr(&sysver.XX,1,4)"="V.04" %then %do;
%put %str(ERR)OR: Viya 4 does not support the IO library in lua;
%return;
%end;
1
%IF"%substr(&sysver.XX,1,4)"="V.04" %THEN %DO;
2
%put %str(ERR)OR: Viya 4 does not support the IO library in lua;
3
%return;
4
%END;
2 Bloc de code
DATA STEP Data
Explication : Ce bloc prépare le premier scénario de test. Il déclare une variable macro globale `str1`, définit le chemin d'un fichier temporaire `file.txt` dans la bibliothèque `WORK` via `pathname(work)`, et initialise les motifs de recherche (`pat`) et de remplacement (`str`). Un `DATA STEP _null_` est utilisé pour créer le fichier `file.txt` et y écrire la chaîne initiale 'replace/me', qui sera la cible du remplacement.
Copié !
%global str1;
%let file=%sysfunc(pathname(work))/file.txt;
%let pat=replace/me;
%let str=with/this;
data _null_;
file "&file";
put "&pat";
run;
1
%global str1;
2
%let file=%sysfunc(pathname(work))/file.txt;
3
%let pat=replace/me;
4
%let str=with/this;
5
DATA _null_;
6
file "&file";
7
put "&pat";
8
RUN;
3 Bloc de code
Macro Appel
Explication : Dans ce bloc, la macro `mp_gsubfile` est appelée pour effectuer le remplacement du motif `&pat` par `&str` dans le fichier `&file`. Ensuite, un `DATA STEP _null_` relit le contenu modifié de `&file`, et la première ligne est stockée dans la variable macro `str1`. Finalement, la macro `mp_assert` est utilisée pour vérifier que le remplacement a été effectué correctement en comparant `&str1` avec la valeur attendue `&str`. Le résultat de l'assertion est enregistré dans l'ensemble de données `work.test_results`.
Copié !
%mp_gsubfile(file=&file, patternvar=pat, replacevar=str)
data _null_;
infile "&file";
input;
call symputx('str1',_infile_);
run;
%mp_assert(
iftrue=("&str1"="&str"),
desc=Check that simple replacement was successful,
outds=work.test_results
)
desc=Check that SIMPLE replacement was successful,
11
outds=work.test_results
12
)
4 Bloc de code
DATA STEP Data
Explication : Ce bloc prépare le deuxième scénario de test, axé sur le remplacement multi-lignes. Il initialise de nouvelles variables macros globales (`str2`, `strcheck2`, `strcheck2b`), définit un second fichier temporaire `file2.txt` et ses motifs de recherche (`pat2`) et de remplacement (`str2`). Un `DATA STEP _null_` crée `file2.txt` et y écrit trois lignes : 'line1' suivie de deux occurrences de 'replace/me', simulant un fichier avec plusieurs cibles de remplacement.
Copié !
%global str2 strcheck2 strcheck2b;
%let file2=%sysfunc(pathname(work))/file2.txt;
%let pat2=replace/me;
%let str2=with/this;
data _null_;
file "&file2";
put 'line1';output;
put "&pat2";output;
put "&pat2";output;
run;
1
%global str2 strcheck2 strcheck2b;
2
%let file2=%sysfunc(pathname(work))/file2.txt;
3
%let pat2=replace/me;
4
%let str2=with/this;
5
DATA _null_;
6
file "&file2";
7
put 'line1';OUTPUT;
8
put "&pat2";OUTPUT;
9
put "&pat2";OUTPUT;
10
RUN;
5 Bloc de code
Macro Appel
Explication : Dans ce bloc, la macro `mp_gsubfile` est appelée pour remplacer les motifs dans `&file2`. Un `DATA STEP _null_` lit ensuite le contenu modifié de `&file2`. Les lignes spécifiques (2 et 3) où les remplacements devaient se produire sont extraites et stockées dans les variables macros `strcheck2` et `strcheck2b`. Deux appels à la macro `mp_assert` sont effectués pour vérifier indépendamment si les remplacements sur ces lignes ont réussi, validant ainsi la capacité multi-lignes de `mp_gsubfile`. Les résultats sont ajoutés à `work.test_results`.
Copié !
%mp_gsubfile(file=&file2, patternvar=pat2, replacevar=str2)
data _null_;
infile "&file2";
input;
if _n_=2 then call symputx('strcheck2',_infile_);
if _n_=3 then call symputx('strcheck2b',_infile_);
putlog _infile_;
run;
%mp_assert(
iftrue=("&strcheck2"="&str2"),
desc=Check that multi line replacement was successful (line2),
outds=work.test_results
)
%mp_assert(
iftrue=("&strcheck2b"="&str2"),
desc=Check that multi line replacement was successful (line3),
outds=work.test_results
)
desc=Check that multi line replacement was successful (line2),
13
outds=work.test_results
14
)
15
%mp_assert(
16
iftrue=("&strcheck2b"="&str2"),
17
desc=Check that multi line replacement was successful (line3),
18
outds=work.test_results
19
)
6 Bloc de code
Macro Appel
Explication : Ce bloc représente l'appel final à la macro `gsubtest()`. Cette invocation déclenche l'exécution séquentielle de tous les blocs de test et vérifications de compatibilité définis précédemment dans la macro, marquant le début de l'exécution effective des tests.
Copié !
%gsubtest()
1
%gsubtest()
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.