Publicado el :
Prueba CREATION_INTERNE

Prueba de la macro mp_base64copy

Este código también está disponible en: Deutsch English Français
En espera de validación
El script comienza definiendo una cadena de caracteres simple, la escribe en un archivo temporal, luego la codifica en base64 usando `%mp_base64copy`. El resultado codificado se decodifica, y la cadena original se compara con la cadena decodificada usando `%mp_assert`. Se realiza una segunda serie de pruebas con una cadena que contiene caracteres multibyte. Esta cadena también se codifica, luego se decodifica, y se hace una aserción para verificar la integridad de la cadena multibyte después del viaje de ida y vuelta de codificación/decodificación. Los resultados de las aserciones se almacenan en `work.test_results`.
Análisis de datos

Type : CREATION_INTERNE


Todos los datos utilizados (cadenas de prueba) se definen y crean directamente dentro del script a través de variables macro o pasos DATA que escriben en archivos temporales. No se leen directamente datos externos o SASHELP.

1 Bloque de código
DATA STEP / Macro (%mp_base64copy, %mp_assert) Data
Explicación :
Este bloque inicializa una variable macro `string1` con una cadena de caracteres simple. Se crea un archivo temporal `tmp` y el valor de `string1` se escribe en él. Luego se llama a la macro `%mp_base64copy` para codificar el contenido de `tmp` (a través de `inref=tmp`) y almacenar el resultado en el fileref `myref`. Un `data _null_` lee `myref` y muestra su contenido en el log (para verificación intermedia). El contenido de `myref` se decodifica luego por `%mp_base64copy` en `mynewref`. Finalmente, otro `data _null_` lee `mynewref`, recupera la cadena decodificada y la almacena en la variable macro `string1_check`. La macro `%mp_assert` se utiliza para comparar `string1` y `string1_check`, verificando así que la codificación/decodificación ha preservado la integridad de la cadena original.
¡Copiado!
1%let string1=base ik ally;
2filename tmp temp;
3DATA _null_;
4 file tmp;
5 put "&string1";
6RUN;
7%mp_base64copy(inref=tmp, outref=myref, ACTION=ENCODE)
8 
9DATA _null_;
10 INFILE myref;
11 INPUT;
12 put _infile_;
13RUN;
14%mp_base64copy(inref=myref, outref=mynewref, ACTION=DECODE)
15DATA _null_;
16 INFILE mynewref lrecl=5000;
17 INPUT;
18 put _infile_;
19 call symputx('string1_check',_infile_);
20 stop;
21RUN;
22%mp_assert(
23 iftrue=("&string1"="&string1_check"),
24 desc=Basic String Compare,
25 outds=work.test_results
26)
2 Bloque de código
DATA STEP / Macro (%mp_base64copy, %mp_assert) Data
Explicación :
Este bloque prueba la capacidad de la macro `%mp_base64copy` para manejar cadenas que contienen caracteres multibyte. Una cadena literal con caracteres especiales se escribe en un archivo temporal `tmp2`. Esta cadena se codifica luego en base64 en `myref2`, y luego se decodifica en `newref2` usando `%mp_base64copy`. Un `data _null_` lee el contenido decodificado de `newref2` y lo compara con la cadena original. El resultado de esta comparación se almacena en la variable macro `check2`. Finalmente, `%mp_assert` se utiliza para verificar que `check2` sea igual a '1', confirmando que la cadena multibyte ha sido procesada correctamente a lo largo del proceso de codificación y decodificación.
¡Copiado!
1filename tmp2 temp lrecl=500;
2DATA _null_;
3 file tmp2;
4 put "'', '', '', '', '', '', '', '', '', '', '', '', '', ''";
5RUN;
6%mp_base64copy(inref=tmp2, outref=myref2, ACTION=ENCODE)
7 
8%mp_base64copy(inref=myref2, outref=newref2, ACTION=DECODE)
9DATA _null_;
10 INFILE newref2 lrecl=5000;
11 INPUT;
12 list;
13 /* do not print the string to the log else viya 3.5 throws exception */
14 IF trim(_infile_)=
15 "'', '', '', '', '', '', '', '', '', '', '', '', '', ''"
16 THEN call symputx('check2',1);
17 ELSE call symputx('check2',0);
18 stop;
19RUN;
20%mp_assert(
21 iftrue=("&check2"="1"),
22 desc=Double Byte String Compare,
23 outds=work.test_results
24)
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.