Publicado el :
Pruebas CREATION_INTERNE

Macro de prueba para mp_gsubfile

Este código también está disponible en: Deutsch English Français
En espera de validación
La macro `gsubtest` comienza con una verificación condicional de la versión de SAS©. Si la ejecución se realiza en SAS© Viya 4, la macro muestra un mensaje de error y se detiene, ya que la biblioteca IO Lua, requerida por `mp_gsubfile`, no es compatible en este entorno. Luego procede a dos pruebas distintas: un reemplazo simple de patrón en un archivo temporal y un reemplazo de patrones múltiples en diferentes líneas de otro archivo temporal. Para cada escenario, se crean archivos de prueba, se llama a la macro `mp_gsubfile` y los resultados se validan utilizando la macro `mp_assert`. Los resultados de las aserciones se guardan en el conjunto de datos `work.test_results`. Este enfoque garantiza la fiabilidad de la utilidad `mp_gsubfile` para la manipulación de archivos.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos utilizados son generados dinámicamente e internamente por el script. Se trata principalmente de archivos de texto temporales creados en la biblioteca SAS WORK para simular escenarios de reemplazo de texto. No se requiere ningún dato de SASHELP o de fuentes externas no gestionadas para la ejecución de estas pruebas.

1 Bloque de código
Macro Condicional
Explicación :
Este bloque de código realiza una verificación del entorno de ejecución. Prueba si la versión de SAS es 'V.04', correspondiente a SAS Viya 4. Si es así, se muestra un mensaje de error en el registro SAS y la ejecución de la macro se interrumpe. Esto indica una incompatibilidad de la biblioteca IO Lua, esencial para `mp_gsubfile`, con SAS Viya 4 en este momento.
¡Copiado!
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 Bloque de código
DATA STEP Data
Explicación :
Este bloque prepara el primer escenario de prueba. Declara una variable macro global `str1`, define la ruta de un archivo temporal `file.txt` en la biblioteca `WORK` a través de `pathname(work)`, e inicializa los patrones de búsqueda (`pat`) y reemplazo (`str`). Se utiliza un `DATA STEP _null_` para crear el archivo `file.txt` y escribir la cadena inicial 'replace/me', que será el objetivo del reemplazo.
¡Copiado!
1%global str1;
2%let file=%sysfunc(pathname(work))/file.txt;
3%let pat=replace/me;
4%let str=with/this;
5DATA _null_;
6 file "&file";
7 put "&pat";
8RUN;
3 Bloque de código
Macro Appel
Explicación :
En este bloque, se llama a la macro `mp_gsubfile` para realizar el reemplazo del patrón `&pat` por `&str` en el archivo `&file`. Luego, un `DATA STEP _null_` relee el contenido modificado de `&file`, y la primera línea se almacena en la variable macro `str1`. Finalmente, se utiliza la macro `mp_assert` para verificar que el reemplazo se ha realizado correctamente comparando `&str1` con el valor esperado `&str`. El resultado de la aserción se registra en el conjunto de datos `work.test_results`.
¡Copiado!
1%mp_gsubfile(file=&file, patternvar=pat, replacevar=str)
2DATA _null_;
3 INFILE "&file";
4 INPUT;
5 call symputx('str1',_infile_);
6RUN;
7 
8%mp_assert(
9 iftrue=("&str1"="&str"),
10 desc=Check that SIMPLE replacement was successful,
11 outds=work.test_results
12)
4 Bloque de código
DATA STEP Data
Explicación :
Este bloque prepara el segundo escenario de prueba, centrado en el reemplazo multi-línea. Inicializa nuevas variables macros globales (`str2`, `strcheck2`, `strcheck2b`), define un segundo archivo temporal `file2.txt` y sus patrones de búsqueda (`pat2`) y reemplazo (`str2`). Un `DATA STEP _null_` crea `file2.txt` y escribe en él tres líneas: 'line1' seguida de dos ocurrencias de 'replace/me', simulando un archivo con múltiples objetivos de reemplazo.
¡Copiado!
1%global str2 strcheck2 strcheck2b;
2%let file2=%sysfunc(pathname(work))/file2.txt;
3%let pat2=replace/me;
4%let str2=with/this;
5DATA _null_;
6 file "&file2";
7 put 'line1';OUTPUT;
8 put "&pat2";OUTPUT;
9 put "&pat2";OUTPUT;
10RUN;
5 Bloque de código
Macro Appel
Explicación :
En este bloque, se llama a la macro `mp_gsubfile` para reemplazar los patrones en `&file2`. Luego, un `DATA STEP _null_` lee el contenido modificado de `&file2`. Las líneas específicas (2 y 3) donde se esperaban los reemplazos se extraen y se almacenan en las variables macros `strcheck2` y `strcheck2b`. Se realizan dos llamadas a la macro `mp_assert` para verificar independientemente si los reemplazos en estas líneas tuvieron éxito, validando así la capacidad multi-línea de `mp_gsubfile`. Los resultados se agregan a `work.test_results`.
¡Copiado!
1%mp_gsubfile(file=&file2, patternvar=pat2, replacevar=str2)
2DATA _null_;
3 INFILE "&file2";
4 INPUT;
5 IF _n_=2 THEN call symputx('strcheck2',_infile_);
6 IF _n_=3 THEN call symputx('strcheck2b',_infile_);
7 putlog _infile_;
8RUN;
9 
10%mp_assert(
11 iftrue=("&strcheck2"="&str2"),
12 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 Bloque de código
Macro Appel
¡Copiado!
1%gsubtest()
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.