Publicado el :

Formato de Cadena con Delimitadores y Comillas

Este código también está disponible en: Deutsch English Français
La macro `%mf_getquotedstr` toma una cadena de caracteres como entrada (`IN_STR`) y la transforma en una nueva cadena donde cada elemento está rodeado de comillas (simples, dobles o ninguna) y separado por un delimitador especificado. Los parámetros incluyen:
  • `IN_STR`: La cadena de entrada sin comillas, delimitada por espacios (por defecto).
  • `DLM`: El delimitador a aplicar a la cadena de salida (coma por defecto).
  • `QUOTE`: El tipo de comillas a aplicar (S para simple, D para doble, N para ninguna). Cualquier otro valor se usará como carácter de comilla.
  • `indlm`: El delimitador utilizado en la cadena de entrada (espacio por defecto).
El proceso consiste en recorrer cada 'palabra' de la cadena de entrada, aplicar las comillas especificadas, eliminar los espacios superfluos alrededor de cada palabra (`%qtrim`), y luego ensamblar la nueva cadena con el delimitador de salida. Si la cadena de entrada está vacía, devuelve dos comillas vacías (según el tipo especificado).
Análisis de datos

Type : AUCUNE


La macro opera exclusivamente sobre cadenas de caracteres proporcionadas como parámetros. No accede ni crea conjuntos de datos SAS, ni depende de datos externos (archivos, tablas).

1 Bloque de código
MACRO
Explicación :
Este bloque define la macro `%mf_getquotedstr` que procesa una cadena de entrada. Comienza determinando el carácter de comilla a usar, convirtiendo 'S' en comilla simple (`byte(39)`) y 'D' en comilla doble (`byte(34)`) a través de `%qsysfunc`. Inicializa una variable local `i` para recorrer la cadena de entrada `IN_STR` usando un bucle `%do %while` y la función `%qscan` para extraer cada elemento según el delimitador de entrada `indlm`. Cada elemento se encierra entre comillas y se limpia de espacios excedentes con `%qtrim`. El primer elemento inicializa el `buffer`, los siguientes se agregan con el `DLM` especificado. Finalmente, se usa `%sysfunc(coalescec())` para manejar el caso en que la cadena de entrada está vacía, devolviendo dos comillas. El resultado final es la cadena `&buffer`.
¡Copiado!
1%macro mf_getquotedstr(IN_STR
2 ,DLM=%str(,)
3 ,QUOTE=S
4 ,indlm=%str( )
5)/*/STORE SOURCE*/;
6 /* credit Rowland Hale - byte34 is double quote, 39 is single quote */
7 %IF "e=S %THEN %let quote=%qsysfunc(byte(39));
8 %ELSE %IF "e=D %THEN %let quote=%qsysfunc(byte(34));
9 %ELSE %IF "e=N %THEN %let quote=;
10 %local i item buffer;
11 %let i=1;
12 %DO %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;
13 %let item=%qscan(&IN_STR,&i,%str(&indlm));
14 %IF %bquote("E) ne %THEN %let item="E%qtrim(&item)"E;
15 %ELSE %let item=%qtrim(&item);
16 
17 %IF (&i = 1) %THEN %let buffer =%qtrim(&item);
18 %ELSE %let buffer =&buffer&DLM%qtrim(&item);
19 
20 %let i = %eval(&i+1);
21 %END;
22 
23 %let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));
24 
25 &buffer
26 
27%mend mf_getquotedstr;
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.
Información de copyright : Autor: Allan Bowe