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 ==. |