La instrucción CONDENSE sirve para eliminar espacios superfluos de un objeto de datos de tipo carácter (generalmente de tipo C - cadena de longitud fija). Modifica el contenido de la variable especificada directamente en el lugar (“in place”).
Concretamente, CONDENSE realiza las siguientes acciones en su comportamiento por defecto:
- Elimina todos los espacios iniciales.
- Reemplaza secuencias de múltiples espacios internos (espacios entre caracteres visibles) por exactamente un solo espacio.
Importante: ¡Por defecto, CONDENSE no elimina espacios finales al final de la cadena!
Sintaxis
CONDENSE <variable> [NO-GAPS].<variable>: El nombre de la variable de tipo carácter (generalmente tipoC) cuyo contenido se condensará.[NO-GAPS](Opcional): Un agregado que cambia el comportamiento: Cuando se especificaNO-GAPS, todos los espacios (iniciales, internos y finales) se eliminan completamente de la variable.
Funcionamiento en detalle
Sin NO-GAPS (CONDENSE <variable>.)
" Hola Mundo "se convierte en"Hola Mundo "(si<variable>es p.ej.C(30). Los espacios finales hasta la longitud del campo permanecen.)" "se convierte en" "(solo espacios, se rellena a la izquierda con espacios hasta la longitud del campo)" ABC "se convierte en"ABC ""A B C"se convierte en"A B C "
Con NO-GAPS (CONDENSE <variable> NO-GAPS.)
" Hola Mundo "se convierte en"HolaMundo "(resto rellenado con espacios)" "se convierte en" "(campo vacío)" ABC "se convierte en"ABC ""A B C"se convierte en"ABC "
Aplicabilidad (Tipo C vs. STRING)
Tipo C (Cadena de longitud fija): Este es el caso de uso principal para CONDENSE. Los campos tipo C a menudo se rellenan con espacios a la derecha después de asignaciones o pueden contener espacios iniciales/múltiples internos por procesamiento.
Tipo STRING (Cadena de longitud variable): CONDENSE también puede aplicarse a strings.
- El
CONDENSEestándar elimina espacios iniciales y reduce múltiples espacios internos a uno. Los espacios finales que son parte del valor del string se conservan. CONDENSE ... NO-GAPSelimina todos los espacios del string.- Para strings a menudo hay alternativas más específicas y modernas como
SHIFT ... DELETING LEADING/TRAILING space.,REPLACEo String Templates/funciones que ofrecen más control.
Ejemplos
1. CONDENSE estándar con Tipo C
DATA text_c TYPE c LENGTH 40 VALUE ' Primera Parte segunda Parte '.
WRITE: / 'Tipo C Antes :', |'{ text_c }'|.CONDENSE text_c.WRITE: / 'Tipo C Después:', |'{ text_c }'|.Salida:
Tipo C Antes : '{ Primera Parte segunda Parte }'Tipo C Después: '{Primera Parte segunda Parte }'(Espacios iniciales eliminados, internos reducidos a 1, espacios finales permanecen hasta longitud 40).
2. CONDENSE con NO-GAPS en Tipo C
DATA text_c_ng TYPE c LENGTH 40 VALUE ' Primera Parte segunda Parte '.
WRITE: / 'Tipo C NG Antes :', |'{ text_c_ng }'|.CONDENSE text_c_ng NO-GAPS.WRITE: / 'Tipo C NG Después:', |'{ text_c_ng }'|.Salida:
Tipo C NG Antes : '{ Primera Parte segunda Parte }'Tipo C NG Después: '{PrimeraPartesegundaParte }'(Todos los espacios eliminados, el resto está alineado a la izquierda).
3. CONDENSE con Tipo STRING
DATA text_s TYPE string VALUE ` String con mucho espacio `.
WRITE: / 'String Antes :', |'{ text_s }'|.CONDENSE text_s.WRITE: / 'String Después:', |'{ text_s }'|. " Iniciales eliminados, internos reducidos, finales permanecen
DATA text_s_ng TYPE string VALUE ` String con mucho espacio `.CONDENSE text_s_ng NO-GAPS.WRITE: / 'String NG Desp:', |'{ text_s_ng }'|. " Todos los espacios eliminadosSalida:
String Antes : '{ String con mucho espacio }'String Después: '{String con mucho espacio }'String NG Desp: '{Stringconmuchoespacio}'Notas importantes / Mejores prácticas
CONDENSEmodifica la variable pasada directamente. Guarde el valor original previamente si aún lo necesita.- El error más común es asumir que
CONDENSEelimina espacios finales. Esto es incorrecto en el comportamiento estándar. SoloCONDENSE ... NO-GAPSelimina todos los espacios. - Para eliminar solo espacios finales en strings se usa
SHIFT <str> RIGHT DELETING TRAILING space.o para tipo C p.ej. la asignación a un string y de vuelta o módulos de función especiales. CONDENSEes útil para limpiar campos de entrada o datos de fuentes externas que podrían contener espacios no deseados.- Para manipulaciones de string complejas, a menudo las funciones de string modernas u operadores son la mejor opción que
CONDENSE.