Pregunta

¿Cómo concateno dos cadenas, de longitud desconocida, en COBOL?Así por ejemplo:

WORKING-STORAGE.
    FIRST-NAME    PIC X(15) VALUE SPACES.
    LAST-NAME     PIC X(15) VALUE SPACES.
    FULL-NAME     PIC X(31) VALUE SPACES.

Si FIRST-NAME = 'JOHN ' y LAST-NAME = 'DOE ', como puedo conseguir:

FULL-NAME = 'JOHN DOE                       '

Opuesto a:

FULL-NAME = 'JOHN            DOE            '
¿Fue útil?

Solución

Creo que lo siguiente le dará lo que desea.

STRING
FIRST-NAME DELIMITED BY " ",
" ",
LAST-NAME DELIMITED BY SIZE
INTO FULL-NAME.

Otros consejos

A primera vista, la solución es utilizar la modificación de referencia para unir STRING las dos cadenas, incluido el espacio.El problema es que debes saber cuántos espacios finales hay presentes en FIRST-NAME; de lo contrario, producirás algo como 'JOHNbbbbbbbbbbbbDOE', donde b es un espacio.

No existe una función COBOL intrínseca para determinar el número de espacios finales en una cadena, pero sí hay una para determinar el número de espacios iniciales en una cadena.Por lo tanto, la forma más rápida, hasta donde yo sé, es invertir el nombre, encontrar el número de espacios iniciales y usar la modificación de referencia para unir el nombre y el apellido.

Tendrás que agregar estos campos al almacenamiento de trabajo:

WORK-FIELD        PIC X(15) VALUE SPACES.
TRAILING-SPACES   PIC 9(3)  VALUE ZERO.
FIELD-LENGTH      PIC 9(3)  VALUE ZERO.
  1. Invertir el PRIMER NOMBRE
    • MOVER LA FUNCIÓN INVERSA (PRIMER NOMBRE) AL CAMPO DE TRABAJO.
    • WORK-FIELD ahora contiene espacios iniciales, en lugar de espacios finales.
  2. Encuentre el número de espacios finales en PRIMER NOMBRE
    • INSPECCIONE EL CAMPO DE TRABAJO CONTANDO LOS ESPACIOS FINALES PARA VER LOS ESPACIOS PRINCIPALES.
    • TRAILING-SPACE ahora contiene el número de espacios finales en FIRST-NAME.
  3. Encuentre la longitud del campo PRIMER NOMBRE
    • LONGITUD DEL CAMPO DE COMPUTACIÓN = LONGITUD DE LA FUNCIÓN (PRIMER NOMBRE).
  4. Concatena las dos cadenas juntas.
    • CADENA PRIMER NOMBRE (1: LONGITUD DEL CAMPO – ESPACIOS FINALES) “ “ APELLIDO DELIMITADO POR TAMAÑO, EN NOMBRE COMPLETO.

Podrías intentar hacer un bucle para obtener la longitud real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top