lunes, 1 de agosto de 2011

Cobol: ¿Cómo concatenar un nombre y dos apellidos en una sola cadena?

Para concatenar un nombre y sus apellidos dejando un espacio en blanco entremedias se usa la instrucción STRING tal y como se indica a continuación:

IDENTIFICATION DIVISION.
PROGRAM-ID.    CONCATENAR-NA.
AUTHOR.        DESCONOCIDO.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
     01 WHOLE-NAME                PIC X(25).
     01 FIRST-NAME                  PIC X(25).
     01 MIDDLE-NAME               PIC X(25).

     01 LAST-NAME                   PIC X(25).
PROCEDURE DIVISION.
MAIN-STREET.
    MOVE 'GEMA'           TO FIRST-NAME.
    MOVE 'FERNANDEZ'  TO MIDDLE-NAME.
    MOVE 'TEJEDOR'      TO LAST-NAME.
    STRING FIRST-NAME  DELIMITED BY SPACE
           ' '                     DELIMITED BY SIZE
           MIDDLE-NAME    DELIMITED BY SPACE
           ' '                     DELIMITED BY SIZE
           LAST-NAME        DELIMITED BY SPACE
           INTO WHOLE-NAME.
    DISPLAY WHOLE-NAME.

    STOP RUN.

6 comentarios:

  1. Y como se puede resolver el mismo problema si el nombre es compuesto? En ese mismo ejemplo imagina que el nombre es GEMA MARIA

    ResponderEliminar
    Respuestas
    1. Hola Javier,

      Perdón por la tardanza pero aquí va la respuesta.

      Siguiendo el ejemplo anterior tendríamos algo como lo siguiente:

      MOVE 'GEMA MARIA' TO FIRST-NAME

      OJO!!! Sólo cambiaría el MOVE relativo al nombre o FIRST-NAME. El resultado sería 'GEMA MARIA FERNANDEZ TEJEDOR', ya que estás concatenando tres cadenas (una de ellas siendo 'GEMA MARIA') dejando un espacio entre medias. Lo que sería más complejo es si tuvieras la cadena 'GEMA MARIA FERNANDEZ TEJEDOR' y quisieras descomponerlo en nombre, apellido1 y apellido2. Aunque seguro que en estos casos, las aplicaciones están preparadas para almacenar los nombres compuestos con algún tipo de carácter y a la hora de mostrarlos en pantalla separar ambos nombres por ese carácter.

      Espero que te sirva de ayuda.

      Un saludo.

      Eliminar
  2. Muy bueno el ejemplo, gracias por el aporte

    ResponderEliminar