Alle verwendeten Daten werden dynamisch und intern vom Skript generiert. Es handelt sich hauptsächlich um temporäre Textdateien, die in der SAS WORK-Bibliothek erstellt werden, um Textersetzungsszenarien zu simulieren. Für die Ausführung dieser Tests sind keine Daten aus SASHELP oder unmanaged externen Quellen erforderlich.
1 Codeblock
Macro Conditionnelle
Erklärung : Dieser Codeblock führt eine Überprüfung der Ausführungsumgebung durch. Er testet, ob die SAS-Version 'V.04' ist, was SAS Viya 4 entspricht. Ist dies der Fall, wird eine Fehlermeldung im SAS-Log angezeigt und die Makroausführung abgebrochen. Dies weist auf eine Inkompatibilität der IO Lua-Bibliothek hin, die für `mp_gsubfile` an dieser Stelle mit SAS Viya 4 wesentlich ist.
Kopiert!
%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 Codeblock
DATA STEP Data
Erklärung : Dieser Block bereitet das erste Testszenario vor. Er deklariert eine globale Makrovariable `str1`, definiert den Pfad zu einer temporären Datei `file.txt` in der Bibliothek `WORK` über `pathname(work)` und initialisiert die Suchmuster (`pat`) und Ersetzungsmuster (`str`). Ein `DATA STEP _null_` wird verwendet, um die Datei `file.txt` zu erstellen und den anfänglichen String 'replace/me' hineinzuschreiben, der das Ziel der Ersetzung sein wird.
Kopiert!
%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 Codeblock
Macro Appel
Erklärung : In diesem Block wird das Makro `mp_gsubfile` aufgerufen, um das Muster `&pat` durch `&str` in der Datei `&file` zu ersetzen. Anschließend liest ein `DATA STEP _null_` den geänderten Inhalt von `&file` und die erste Zeile wird in der Makrovariablen `str1` gespeichert. Schließlich wird das Makro `mp_assert` verwendet, um zu überprüfen, ob die Ersetzung korrekt durchgeführt wurde, indem `&str1` mit dem erwarteten Wert `&str` verglichen wird. Das Ergebnis der Assertion wird im Dataset `work.test_results` gespeichert.
Kopiert!
%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 Codeblock
DATA STEP Data
Erklärung : Dieser Block bereitet das zweite Testszenario vor, das sich auf die mehrzeilige Ersetzung konzentriert. Er initialisiert neue globale Makrovariablen (`str2`, `strcheck2`, `strcheck2b`), definiert eine zweite temporäre Datei `file2.txt` und ihre Suchmuster (`pat2`) und Ersetzungsmuster (`str2`). Ein `DATA STEP _null_` erstellt `file2.txt` und schreibt drei Zeilen hinein: 'line1', gefolgt von zwei Vorkommen von 'replace/me', wodurch eine Datei mit mehreren Ersetzungszielen simuliert wird.
Kopiert!
%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 Codeblock
Macro Appel
Erklärung : In diesem Block wird das Makro `mp_gsubfile` aufgerufen, um die Muster in `&file2` zu ersetzen. Ein `DATA STEP _null_` liest dann den geänderten Inhalt von `&file2`. Die spezifischen Zeilen (2 und 3), in denen die Ersetzungen stattfinden sollten, werden extrahiert und in den Makrovariablen `strcheck2` und `strcheck2b` gespeichert. Zwei Aufrufe des Makros `mp_assert` werden durchgeführt, um unabhängig zu überprüfen, ob die Ersetzungen auf diesen Zeilen erfolgreich waren, wodurch die mehrzeilige Fähigkeit von `mp_gsubfile` validiert wird. Die Ergebnisse werden zu `work.test_results` hinzugefügt.
Kopiert!
%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 Codeblock
Macro Appel
Erklärung : Dieser Block stellt den abschließenden Aufruf des Makros `gsubtest()` dar. Dieser Aufruf löst die sequentielle Ausführung aller zuvor im Makro definierten Testblöcke und Kompatibilitätsprüfungen aus und markiert den Beginn der eigentlichen Testausführung.
Kopiert!
%gsubtest()
1
%gsubtest()
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.