viernes, 7 de mayo de 2021

COBOL - cláusula REPLACING

Partamos del siguiente ejemplo, en donde tenemos una copy llamada PERSONAS cuya estructura es la siguiente:

     01 :REG:.
          05 :REG:-NOMBRE       PIC X(20).
          05 :REG:-APELLIDOS   PIC X(50).
          05 :REG:-DIRECCION   PIC X(50).
          05 :REG:-LOCALIDAD   PIC X(20).
          05 :REG:-PROVINCIA    PIC X(20).
          05 :REG:-TLF-FIJO       PIC 9(09).
          05 :REG:-TLF-MOVIL    PIC 9(09).
          05 :REG:-EMAIL           PIC X(30).

Al tener una copy con una estructura definida con :REG: nos facilita mucho las cosas porque podemos usar la misma copy tanto en un fichero de entrada como en un fichero de salida dentro del mismo programa. Para diferenciar una copy de otra sólo tendremos que hacer lo siguiente:

          COPY PERSONAS REPLACING ==:REG:== BY ==FE-PERSONA==.
          COPY PERSONAS REPLACING ==:REG:== BY ==FS-PERSONA==.

Los ficheros de entrada y salida estarán definidos así:

-> "INPUT-OUTPUT SECTION"/"FILE CONTROL":
     SELECT FENTRADA ASSIGN TO FENTRADA
         ORGANITAZION     IS SEQUENTIAL
         ACCESS MODE       IS SEQUENTIAL
         FILE STATUS         IS FS-FENTRADA.
     SELECT FSALIDA ASSIGN TO FSALIDA
         ORGANITAZION     IS SEQUENTIAL
         ACCESS MODE       IS SEQUENTIAL
         FILE STATUS         IS FS-FSALIDA.

-> "DATA DIVISION"/"FILE SECTION":
     FD FENTRADA
          BLOCK CONTAINS 0 RECORDS
          RECORD 0 CHARACTERS
          DATA RECORD R-FENTRADA.
     01 R-FENTRADA        PIC X(208).
     FD FSALIDA
          BLOCK CONTAINS 0 RECORDS
          RECORD 0 CHARACTERS
          DATA RECORD R-FSALIDA.
     01 R-FSALIDA           PIC X(208).

Cuando se haga referencia a estas copys tendremos que:

     Leer del fichero de entrada:
          READ FENTRADA INTO FE-PERSONA.

     Escribir en el fichero de entrada:
          WRITE R-FSALIDA FROM FS-PERSONA.

Y cuando hagamos referencia a uno de los campos de la copy PERSONAS, en función de si es del fichero de entrada o del fichero de salida, lo diferenciaremos de la siguiente manera:

     FE-PERSONA-NOMBRE -> Campo NOMBRE de la copy del fichero de entrada
     FS-PERSONA-NOMBRE -> Campo NOMBRE de la copy del fichero de salida

Basándonos en la misma copy del ejemplo, ¿cómo se hace para inicializar dicha copy? Muy fácil, de la siguiente manera:

     INITIALIZE PERSONAS
          REPLACING ALPHANUMERIC DATA BY SPACES
          NUMERIC DATA BY ZEROES

Pues esto ha sido todo por hoy. Espero que os haya sido de utilidad este post.

No hay comentarios:

Publicar un comentario