Menu

COBOL - Declaração COPY


A instrução COPY é uma instrução de biblioteca que coloca texto pré-escrito em uma unidade de compilação COBOL.

Em outras palavras, COPY fornece a facilidade de incluir os layouts (copybooks) no programa de uma maneira muito simples usando o comando COPY.

Entradas de código-fonte pré-escritas podem ser incluídas em uma unidade de compilação em tempo de compilação. Assim, uma instalação pode usar descrições de arquivo padrão, descrições de registro ou procedimentos sem recodificá-los. Essas entradas e procedimentos podem ser salvos em bibliotecas criadas pelo usuário; eles podem então ser incluídos em programas e definições de classe por meio da instrução COPY.

A compilação do código-fonte contendo instruções COPY é logicamente equivalente ao processamento de todas as instruções COPY antes de processar o texto-fonte resultante.

Syntax:

COPY copybook-name
   [REPLACING string-to-be-replaced BY replacing-string]

O efeito de processar uma instrução COPY é que o texto da biblioteca associado a text-name é copiado na unidade de compilação, substituindo logicamente toda a instrução COPY, começando com a palavra COPY e terminando com o ponto, inclusive. Quando a frase REPLACING não é especificada, o texto da biblioteca é copiado inalterado.


Exemplo 1

In this example, the library text PAYLIB consists of the following DATA DIVISION entries:

01  A.
  02  B    PIC S99.
  02  C    PIC S9(5)V99.
  02  D    PIC S9999 OCCURS 1 TO 52 TIMES
      DEPENDING ON B OF A.

Você pode usar a instrução COPY na DATA DIVISION de um programa da seguinte forma:

COPY PAYLIB.

Neste programa, o texto da biblioteca é copiado. O texto resultante é tratado como se estivesse escrito da seguinte forma:

01  A.
  02  B    PIC S99.
  02  C    PIC S9(5)V99.
  02  D    PIC S9999 OCCURS 1 TO 52 TIMES
      DEPENDING ON B OF A.

Exemplo 2

Para alterar alguns ou todos os nomes no texto da biblioteca, você pode usar a frase REPLACING:

COPY PAYLIB REPLACING A BY PAYROLL
                      B BY PAY-CODE
                      C BY GROSS-PAY
                      D BY HOURS.

Neste programa, o texto da biblioteca é copiado. O texto resultante é tratado como se estivesse escrito da seguinte forma:

01  PAYROLL.
  02  PAY-CODE    PIC S99.
  02  GROSS-PAY   PIC S9(5)V99.
  02  HOURS       PIC S9999 OCCURS 1 TO 52 TIMES
      DEPENDING ON PAY-CODE OF PAYROLL.

As alterações mostradas são feitas apenas para este programa. O texto permanece inalterado conforme aparece na biblioteca.


Exemplo 3

Se as convenções a seguir forem seguidas no texto da biblioteca, partes dos nomes (por exemplo, a parte do prefixo dos nomes de dados) poderão ser alteradas com a frase REPLACING.

Neste exemplo, o texto da biblioteca PAYLIB consiste nas seguintes entradas DATA DIVISION.

01  :TAG:.
  02  :TAG:-WEEK          PIC S99.
  02  :TAG:-GROSS-PAY     PIC S9(5)V99.
  02  :TAG:-HOURS         PIC S999  OCCURS 1 TO 52 TIMES
      DEPENDING ON :TAG:-WEEK OF :TAG:.

Neste exemplo, o texto da biblioteca PAYLIB consiste nas seguintes entradas DATA DIVISION.

COPY PAYLIB REPLACING ==:TAG:== BY ==Payroll==.

Nota de uso: Neste exemplo, o uso obrigatório de dois pontos ou parênteses como delimitadores no texto da biblioteca. Os dois pontos são recomendados para maior clareza porque os parênteses podem ser usados ​​para um subscrito, por exemplo, ao fazer referência a um elemento de tabela.

Neste programa, o texto da biblioteca é copiado. O texto resultante é tratado como se tivesse sido escrito da seguinte forma.

01  PAYROLL.
  02  PAYROLL-WEEK        PIC S99.
  02  PAYROLL-GROSS-PAY   PIC S9(5)V99.
  02  PAYROLL-HOURS       PIC S999  OCCURS 1 TO 52 TIMES
      DEPENDING ON PAYROLL-WEEK OF PAYROLL.

As alterações mostradas são feitas apenas para este programa. O texto permanece inalterado conforme aparece na biblioteca.


Exemplo 4:

Este exemplo mostra como substituir seletivamente os números de nível sem substituir os números na cláusula PICTURE.

COPY xxx REPLACING ==(01)== BY ==(01)==
                   == 01 == BY == 05 ==.