COBOL - Comando COPY - www.cadcobol.com.br



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Comando COPY - In English

Enterprise COBOL for z/OS, V4.2, Language Reference


Usamos COPY no programa simples COBOL e INCLUDE no programa COBOL-DB2.

As instruções COPY são executadas em tempo de compilação e as instruções INCLUDE são executadas em tempo de execução.

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

As entradas de código-fonte pré-escritas podem ser incluídas em uma unidade de compilação no momento da 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 que contém as instruções COPY é logicamente equivalente ao processamento de todas as instruções COPY antes de processar o texto fonte resultante.

O efeito do processamento de uma instrução COPY é que o texto da biblioteca associado ao text-name é copiado para a unidade de compilação, substituindo logicamente a instrução COPY inteira, 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.

text-name, library-name
text-name cobol_copy_statement_portugues.
library-name identifica onde o texto de cópia existe.
  • Pode ter de 1 a 30 caracteres de comprimento
  • Pode conter os seguintes caracteres: letras latinas maiúsculas A-Z, letras latinas minúsculas a-z, dígitos 0-9 e hífen
  • O primeiro ou o último caractere não deve ser um hífen
  • Não pode conter sublinhado (underscore)

Nem o nome do texto nem o nome da biblioteca precisam ser exclusivos dentro de um programa.
Elas podem ser idênticas a outras palavras definidas pelo usuário no programa.

text-name não precisa ser qualificado. Se text-name não for qualificado, um nome de biblioteca de SYSLIB será assumido.

Ao compilar a partir de JCL ou TSO, apenas os primeiros oito caracteres são usados ??como o nome de identificação.
Ao compilar com o comando cob2 e processar o texto COPY que reside no Hierarchical File System (HFS), todos os caracteres são significativos.

literal-1, literal-2
Devem ser literais alfanuméricos. literal-1 identifica o texto da cópia.
literal-2 identifica onde o texto da cópia existe.

Ao compilar a partir de JCL ou TSO:

  • Os literais podem ter de 1 a 30 caracteres de comprimento.
  • Literais podem conter caracteres: A-Z, a-z, 0-9, hífen, @, # ou $.
  • O primeiro ou o último caractere não deve ser um hífen.
  • Literais não podem conter sublinhados (underscore).
  • Apenas os primeiros oito caracteres são usados como nome de identificação.

Ao compilar com o comando cob2 e processar o texto COPY residente no HFS, o literal pode ter de 1 a 160 caracteres de comprimento.

A exclusividade do text-name e library-name é determinada após a aplicação das regras de formação e conversão para um nome dependente do sistema.

Para obter informações sobre o mapeamento de caracteres no nome do texto, nome da biblioteca e literais, consulte o Enterprise COBOL Programming Guide.

operand-1, operand-2
Pode ser um pseudo-texto, um identificador, um identificador de função, um literal ou uma palavra COBOL (exceto a palavra COPY).

O texto e o pseudo-texto da biblioteca podem consistir em ou incluir quaisquer palavras (exceto COPY), identificadores ou literais que podem ser escritos no texto de origem.
Isso inclui palavras definidas pelo usuário DBCS, literais DBCS e literais nacionais.

As palavras DBCS definidas pelo usuário devem ser totalmente formadas; ou seja, não há substituição parcial de palavras para palavras DBCS.

Palavras ou literais contendo caracteres DBCS não podem ser continuados através das linhas.

Cada instrução COPY deve ser precedida por um espaço e terminada com um ponto separador.

Uma instrução COPY pode aparecer no texto de origem em qualquer lugar em que uma seqüência de caracteres ou um separador possa aparecer.

As instruções COPY podem ser aninhadas.
No entanto, as instruções COPY aninhadas não podem conter a frase REPLACING e uma instrução COPY com a frase REPLACING não pode conter instruções COPY aninhadas.

Uma instrução COPY aninhada não pode causar recursão.
Ou seja, um membro COPY pode ser nomeado apenas uma vez em um conjunto de instruções COPY aninhadas até que o final do arquivo para esse membro COPY seja alcançado.
Por exemplo, suponha que o texto fonte contenha a instrução: COPY X. e o texto da biblioteca X contém a instrução: COPY Y..

Nesse caso, o texto da biblioteca Y não deve ter uma instrução COPY X ou COPY Y.

As linhas de depuração são permitidas no texto e pseudo-texto da biblioteca.
As palavras de texto dentro de uma linha de depuração participam das regras de correspondência como se o "D" não aparecesse na área do indicador.
Uma linha de depuração é especificada dentro do pseudo-texto se a linha de depuração começar no texto de origem após o delimitador de pseudo-texto de abertura, mas antes do delimitador de pseudo-texto de fechamento correspondente.

Se linhas adicionais forem introduzidas no texto de origem como resultado de uma instrução COPY, cada palavra de texto introduzida aparecerá em uma linha de depuração se a instrução COPY começar em uma linha de depuração ou se a palavra de texto sendo introduzida aparecer em uma linha de depuração no texto da biblioteca .
Quando uma palavra de texto especificada na frase BY é introduzida, ela aparece em uma linha de depuração se a primeira palavra de texto da biblioteca sendo substituída for especificada em uma linha de depuração.

Quando uma instrução COPY é especificada em uma linha de depuração, o texto copiado é tratado como se tivesse aparecido em uma linha de depuração, exceto que as linhas de comentário no texto aparecem como linhas de comentário no texto de origem resultante.

Se a palavra COPY aparecer em uma entrada de comentário ou no local onde uma entrada de comentário pode aparecer, ela é considerada parte da entrada de comentário.

Depois que todas as instruções COPY e REPLACE foram processadas, uma linha de depuração será considerada como tendo todas as características de uma linha de comentário, se a cláusula WITH DEBUGGING MODE não for especificada no parágrafo SOURCE-COMPUTER.

Linhas de comentário ou linhas em branco podem ocorrer no texto da biblioteca.
As linhas de comentário ou linhas em branco que aparecem no texto da biblioteca são copiadas para o texto fonte resultante inalterado com a seguinte exceção:
uma linha de comentário ou linha em branco no texto da biblioteca não é copiada se essa linha de comentário ou linha em branco aparecer dentro da sequência de palavras do texto que correspondem operando-1 (consulte Replacement and comparison rules) Regras de substituição e comparação ).

Linhas contendo instruções *CONTROL (*CBL), EJECT, SKIP1, SKIP2, SKIP3 ou TITLE podem ocorrer no texto da biblioteca.
Essas linhas são tratadas como linhas de comentário durante o processamento da instrução COPY.

A correção sintática de todo o texto de origem COBOL não pode ser determinada até que todas as instruções COPY e REPLACE tenham sido completamente processadas, porque a correção sintática do texto da biblioteca não pode ser determinada independentemente.

O texto da biblioteca copiado da biblioteca é colocado na mesma área do programa resultante que está na biblioteca.
O texto da biblioteca deve estar de acordo com as regras para o formato COBOL 85 padrão.

Nota: Os caracteres fora dos definidos para palavras COBOL e separadores não devem aparecer no texto da biblioteca ou pseudo-texto, exceto em linhas de comentários, entradas de comentários, literais alfanuméricos, literais DBCS ou literais nacionais.

SUPPRESS phrase

A frase SUPPRESS especifica que o texto da biblioteca não deve ser impresso na lista de fontes.

REPLACING phrase

Na discussão a seguir, cada operando pode consistir em um dos seguintes:

  • Pseudo-texto
  • Um identificador
  • Uma literal
  • Uma palavra COBOL (exceto a palavra COPY)
  • Identificador de função

Quando a frase REPLACING é especificada, o texto da biblioteca é copiado e cada ocorrência do operand-1 com correspondência adequada no texto da biblioteca é substituída pelo operand-2 associado.

pseudo-text
Uma sequência de strings de caracteres ou separadores, ou ambos, limitada por, mas não incluindo, delimitadores de pseudo-texto (==).
Ambos os caracteres de cada delimitador de pseudo-texto devem aparecer em uma linha; no entanto, as cadeias de caracteres dentro do pseudo-texto podem ser continuadas.

As cadeias de caracteres individuais no pseudo-texto podem ter até 322 caracteres; eles podem continuar sujeitos às regras de continuação normais para o formato do código-fonte.

Lembre-se de que uma sequência de caracteres deve ser delimitada por separadores.
Para obter mais informações, consulte Characters.

.

pseudo-text-1 refere-se a pseudo-texto quando usado para operand-1, e pseudo-text-2 refere-se a pseudo-text quando usado para operand-2.

pseudo-text-1 pode consistir apenas na vírgula ou ponto e vírgula separador. o pseudo-text-2 pode ser nulo; pode consistir apenas em caracteres de espaço ou linhas de comentário.

O pseudo-text não deve conter a palavra COPY.

Cada palavra de texto no pseudo-text-2 que deve ser copiada para o programa é colocada na mesma área do programa resultante que a área em que aparece no pseudo-text-2.

O pseudo-text pode consistir em ou incluir quaisquer palavras (exceto COPY), identificadores ou literais que podem ser escritos no texto de origem.
Isso inclui palavras definidas pelo usuário DBCS, literais DBCS e literais nacionais.

As palavras DBCS definidas pelo usuário devem ser totalmente formadas; ou seja, não há substituição parcial de palavras para palavras DBCS.

Palavras ou literais contendo caracteres DBCS não podem ser continuados através das linhas.

identifier
Pode ser definido em qualquer seção da divisão de dados.

literal
Pode ser numérico, alfanumérico, DBCS ou nacional.

word
Pode ser qualquer palavra COBOL única (exceto COPY), incluindo palavras DBCS definidas pelo usuário.
As palavras DBCS definidas pelo usuário devem ser totalmente formadas.
Você não pode substituir parte de uma palavra DBCS.

Você pode incluir os caracteres COBOL não separadores (por exemplo, +, *, /, $, <,> e =) como parte de uma palavra COBOL quando usada como operandos REPLACING.
Além disso, um hífen ou sublinhado pode estar no início da palavra ou um hífen pode estar no final da palavra.

Para fins de correspondência, cada identifier-1, literal-1, ou word-1 é tratado como pseudo-text contendo apenas identifier-1, literal-1, or word-1, respectivamente.

Regras de substituição e comparação

  1. Os operadores aritméticos e lógicos são considerados palavras de texto e podem ser substituídos apenas por meio da opção de pseudo-text.

  2. Espaços em branco iniciais e finais não são incluídos no processo de comparação de texto.
    Os espaços em branco incorporados são usados no processo de comparação de texto para separar várias palavras de texto.

  3. Quando o operando-1 é uma constante figurativa, o operando-1 corresponde apenas à mesma constante figurativa exata.
    Por exemplo, se ALL "AB" for especificado no texto da biblioteca, "ABAB" não será considerado uma correspondência; apenas ALL "AB" é considerado uma correspondência.

  4. Ao substituir uma sequência de caracteres PICTURE, a opção de pseudo-texto deve ser usada; para evitar ambigüidades, o pseudo-texto-1 deve especificar a cláusula PICTURE inteira, incluindo a palavra-chave PICTURE ou PIC.

  5. Qualquer separador vírgula, ponto-e-vírgula ou espaço que anteceda a palavra mais à esquerda no texto da biblioteca é copiado para o texto de origem.
    Começando com a palavra de texto da biblioteca mais à esquerda e o primeiro operand-1 especificado na opção REPLACING, todo o operando REPLACING que precede a palavra chave BY é comparado a um número equivalente de palavras de texto contíguas da biblioteca.

  6. operand-1 corresponde ao texto da biblioteca se, e somente se, a sequência ordenada de palavras de texto no operand-1 for igual, caractere por caractere, à sequência ordenada de palavras da biblioteca.
    Para caracteres nacionais, a sequência de caracteres nacionais deve ser igual, caractere nacional para caractere nacional, à sequência ordenada de palavras da biblioteca. No entanto, quando o operand-1 consiste apenas em uma vírgula ou ponto-e-vírgula separador, ele participa da correspondência como uma palavra de texto (neste caso, o espaço após a vírgula ou o separador de ponto-e-vírgula pode ser omitido).

    Quando o texto da biblioteca contém uma aspa de fechamento que não é seguida imediatamente por um espaço separador, vírgula, ponto e vírgula ou ponto, a aspa de fechamento é considerada uma aspa separadora.


  7. Se nenhuma correspondência ocorrer, a comparação é repetida com cada operand-1 sucessivo, se especificado, até que uma correspondência seja encontrada ou não haja mais operandos REPLACING.

  8. Sempre que ocorre uma correspondência entre o operand-1 e o texto da biblioteca, o operand-2 associado é copiado para o texto fonte.

  9. A instrução COPY com a frase REPLACING pode ser usada para substituir partes de palavras.
    Ao inserir um operando fictício delimitado por dois pontos no texto do programa, o compilador substituirá o operando fictício pelo texto desejado.
    O Exemplo 3 mostra como isso é usado com o operando fictício: TAG :.

    Os dois pontos servem como separadores e tornam o TAG um operando autônomo.


  10. Quando todos os operandos foram comparados e nenhuma correspondência é encontrada, a palavra de texto da biblioteca mais à esquerda é copiada para o texto de origem.

  11. A próxima palavra de texto de biblioteca não copiada sucessiva é então considerada a palavra de texto mais à esquerda e o processo de comparação é repetido, começando com o primeiro operand-1.
    O processo continua até que a palavra de texto da biblioteca mais à direita tenha sido comparada.

  12. As linhas de comentário ou em branco que ocorrem no texto da biblioteca e no pseudo-text-1 são ignoradas para fins de correspondência; e a sequência de palavras do texto no texto da biblioteca e no pseudo-texto-1 é determinada pelas regras de formato de referência.
    Linhas de comentário ou linhas em branco que aparecem no pseudo-text-2 são copiadas para o programa resultante inalterado sempre que o pseudo-text-2 é colocado no texto fonte como resultado da substituição do texto.
    As linhas de comentário ou linhas em branco que aparecem no texto da biblioteca são copiadas para o texto fonte resultante inalterado com a seguinte exceção:
    uma linha de comentário ou linha em branco no texto da biblioteca não é copiada se essa linha de comentário ou linha em branco aparecer dentro da sequência de palavras de texto que correspondem pseudo-text-1.

  13. As palavras de texto, após a substituição, são colocadas no texto de origem de acordo com as regras de formato padrão COBOL 85.

  14. Quando palavras de texto são colocadas no texto de origem, espaços adicionais são introduzidos apenas entre palavras de texto onde já existe um espaço (incluindo o espaço assumido entre as linhas de origem).

  15. COPY REPLACING não afeta as instruções de direção do compilador EJECT, SKIP1, SKIP2, SKIP3 ou TITLE.

Seqüências de código (como descrições de arquivo e dados, rotinas de erro e exceção) que são comuns a vários programas podem ser salvas em uma biblioteca e então usadas em conjunto com a instrução COPY.
Se as convenções de nomenclatura forem estabelecidas para esse código comum, a frase REPLACING não precisa ser especificada.
Se os nomes mudarem de um programa para outro, a frase REPLACING pode ser usada para fornecer nomes significativos para este programa.

Exemplo 1

Neste exemplo, o texto da biblioteca PAYLIB consiste nas seguintes entradas na divisão de dados (DATA DIVISION):

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

O Desenvolvedor pode usar a instrução COPY na divisão de dados (DATA DIVISION) de um programa da seguinte maneira:

    COPY PAYLIB.

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

    01  A.
        05  B    PIC S99.
        05  C    PIC S9(5)V99.
        05  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, o programador pode usar a frase REPLACING (SUBSTITUIR):

    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 tivesse sido escrito da seguinte forma:

    01  PAYROLL.
        05  PAY-CODE    PIC S99.
        05  GROSS-PAY   PIC S9(5)V99.
        05 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, da forma como aparece na biblioteca, permanece inalterado.

Exemplo 3

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

Neste exemplo, o texto da biblioteca PAYLIB consiste nas seguintes entradas de divisão de dados:

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

O Desenvolvedor pode usar a instrução COPY na divisão de dados (DATA DIVISION) de um programa da seguinte maneira:

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

Nota de uso: é importante observar neste exemplo o uso obrigatório de dois pontos ou parênteses como delimitadores no texto da biblioteca.
Dois pontos são recomendados para maior clareza porque 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.
        05  PAYROLL-WEEK        PIC S99.
        05  PAYROLL-GROSS-PAY   PIC S9(5)V99.
        05  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, da forma como aparece na biblioteca, permanece inalterado.

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

Veja também


© Copyright IBM Corp.