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



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

INITIALIZE
Esta declaração permite inicializar uma série de item elementares contidos em um item de grupo.
Itens numéricos serão inicializados com o valor zero e itens não-numéricos serão incializados com espaços em branco.

A instrução INITIALIZE é funcionalmente equivalente a uma ou mais instruções MOVE.

Onde category-name é:
  • ALPHABETIC
  • ALPHANUMERIC
  • ALPHANUMERIC-EDITED
  • DBCS
  • EGCS
  • NATIONAL
  • NATIONAL-EDITED
  • NUMERIC
  • NUMERIC-EDITED
identifier-1
Áreas de recebimento.
O identifier-1 deve fazer referência a um dos seguintes itens:
  • Um item de grupo alfanumérico
  • Um item de grupo national
  • Um item de dados elementar de uma das seguintes categorias:
    • Alphabetic
    • Alphanumeric
    • Alphanumeric-edited
    • DBCS
    • External floating-point
    • Internal floating-point
    • National
    • National-edited
    • Numeric
    • Numeric-edited
  • Um registro especial que é válido como um operando de recebimento em uma instrução MOVE com identifier-2 ou literal-1 como operando de envio.
identifier-1 referencia um item elementar ou um item de grupo.
O efeito da execução de uma instrução INITIALIZE é como se uma série de instruções MOVE implícitas, cada uma com um item de dados elementar como operando receptor, fosse executada.

Quando o identifier-1 faz referência a um item de grupo national, o identifier-1 é processado como um item de grupo.

identifier-2, literal-1
Áreas de envio.
Quando o identifier-2 faz referência a um item do grupo national, o identifier-2 é processado como um item de dados elementar da categoria national.

O identifier-2 deve referenciar um item de dados elementares (ou um item de grupo national tratado como elementar) que seja válido como um operando de envio em uma instrução MOVE com o identifier-2 como o operando de recebimento.

O literal-1 deve ser um literal válido como um operando de envio em uma instrução MOVE com o identifier-1 como o operando de recebimento.

Um item subscrito pode ser especificado para o identifier-1 .
Uma tabela completa pode ser inicializada apenas especificando o identifier-1 como um grupo que contém a tabela completa.

Nota de uso: A entrada de descrição de dados para o identifier-1 pode conter a frase DEPENDING da cláusula OCCURS.
No entanto, você não pode usar a instrução INITIALIZE para inicializar um item localizado de forma variável ou um item de comprimento variável.

A entrada de descrição de dados para o identificador-1 não deve conter uma cláusula RENAMES.

Registradores especiais podem ser especificados para o identifier-1 e o identifier-2 somente se forem campos de recebimento ou de envio válidos, respectivamente, para as instruções MOVE implícitas.

FILLER
Quando a frase FILLER é especificada, os itens de dados elementares de recebimento que possuem uma cláusula FILLER explícita ou implícita serão inicializados.

VALUE
Quando a frase VALUE é especificada:

  • Se ALL for especificado na frase VALUE, é como se todas as categorias listadas em category-name tivessem sido especificadas.
  • A mesma categoria não pode ser repetida em uma frase VALUE.

REPLACING
Quando a frase REPLACING é especificada:

  • O identifier-2 deve referenciar um item de uma categoria que seja válido como um operando de envio em uma instrução MOVE para um item da categoria correspondente especificada na frase REPLACING.
  • O literal-1 deve ser de uma categoria válida como um operando de envio em uma instrução MOVE para um item da categoria correspondente especificada na frase REPLACING.
  • Um literal de ponto flutuante, um item de dados da categoria ponto flutuante interno ou um item de dados da categoria ponto flutuante externo é tratado como se estivesse na categoria NUMERIC.
  • A mesma categoria não pode ser repetida em uma frase REPLACING.



Primeiro exemplo:
       01  WSS-REGISTRO.
           05  CAMPOS-01       PIC X(020).
           05  CAMPOS-02       PIC 9(009)V(002).
           05  CAMPOS-03       PIC X(001).
           05  CAMPOS-04       PIC 9(010).
           05  CAMPOS-05       PIC X(020).
           05  CAMPOS-06       PIC 9(005)V(005).
           05  CAMPOS-07       PIC X(020).

           INITIALIZE WSS-REGISTRO	ou

           INITIALIZE WSS-REGISTRO
                      REPLACING ALPHANUMERIC BY SPACES
                                     NUMERIC BY ZEROES
       

Segundo exemplo - leia com atenção:
       01  WSS-REGISTRO.
           05  CAMPOS-01       PIC A(020).
           05  CAMPOS-02       PIC 9(009)V(002).
           05  CAMPOS-03       PIC X(001).
           05  FILLER          PIC X(005).
           05  FILLER          PIC X(009) VALUE 'DORNELLES'.

           INITIALIZE WSS-REGISTRO	ou

           INITIALIZE WSS-REGISTRO
                      REPLACING ALPHANUMERIC BY SPACES
                                     NUMERIC BY ZEROES 
Os campos definido como FILLER não sofrem nenhuma ação do comando INITIALIZE ou seja:
           05  FILLER          PIC X(005).                   poderá conter caracteres inválidos  
           05  FILLER          PIC X(009) VALUE 'DORNELLES'. permanecerá com o conteúdo DORNELLES
 
       


Terceiro exemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. INITIALIZE.
DATA DIVISION.
WORKING-STORAGE SECTION.

01  WSS-REGISTRO.
    05  CAMPOS-01       PIC X(020).
    05  CAMPOS-02       PIC 9(009).
    05  CAMPOS-03       PIC 9(010).
    05  CAMPOS-04       PIC X(020).
    05  FILLER          PIC X(009)    VALUE 'DORNELLES'.

PROCEDURE DIVISION.

    INITIALIZE WSS-REGISTRO
               REPLACING ALPHANUMERIC BY SPACES
                              NUMERIC BY ZEROES

    DISPLAY 'INITIALIZE - 1'.
    DISPLAY 'WSS-REGISTRO  ' WSS-REGISTRO
    DISPLAY 'CAMPOS-01     ' CAMPOS-01
    DISPLAY 'CAMPOS-02     ' CAMPOS-02
    DISPLAY 'CAMPOS-03     ' CAMPOS-03
    DISPLAY 'CAMPOS-04     ' CAMPOS-04

    INITIALIZE WSS-REGISTRO
               REPLACING ALPHANUMERIC BY 'CARLOS'
                              NUMERIC BY 12345

    DISPLAY 'INITIALIZE - 2'.
    DISPLAY 'WSS-REGISTRO  ' WSS-REGISTRO
    DISPLAY 'CAMPOS-01     ' CAMPOS-01
    DISPLAY 'CAMPOS-02     ' CAMPOS-02
    DISPLAY 'CAMPOS-03     ' CAMPOS-03
    DISPLAY 'CAMPOS-04     ' CAMPOS-04

STOP RUN.

Resultado:

INITIALIZE - 1

WSS-REGISTRO                      0000000000000000000                    DORNELLES
CAMPOS-01
CAMPOS-02     000000000
CAMPOS-03     0000000000
CAMPOS-04


INITIALIZE - 2

WSS-REGISTRO  CARLOS              0000123450000012345CARLOS              DORNELLES
CAMPOS-01     CARLOS
CAMPOS-02     000012345
CAMPOS-03     0000012345
CAMPOS-04     CARLOS

Observação: Observem que o campo FILLER não foi afetado e permanece com o mesmo conteúdo.


INITIALIZE:
  • A instrução acima estabelecerá valor zero para os campos CAMPOS-02, CAMPOS-04 e CAMPOS-06 e preencherá os demais com espaços.
  • Observações:

  • identifier-1 é o campo a ser inicializado. Pode ser um item de grupo ou um item elementar.
  • identifier-2 é o conteúdo, na forma de constante, que irá inicializar o identifier-1. É o emissor.
  • literal-1 é um campo, cujo conteúdo irá inicializar o identifier-1. É o emissor.
  • O conteúdo que irá inicializar o identifier-1 deve ser compatível com a categoria deste.
  • Não pode haver repetição de categorias na opçãp REPLACING.
  • As categorias de dados da opçãp REPLACING são as categorias válidas para o COBOL.
  • O identifier-1 ou itens a ele subordinados não podem conter a opção DEPENDING ON da clásula OCCURS.
  • Campos do tipo índice (USAGE IS INDEX) não podem ser usados.
  • Índices declarados na opção INDEXED BY da cláusula OCCURS não podem ser usados.
Se a opçãp REPLACING não for usada, os campos de categoria:
  • Numérica, terão todos os seus bytes inicializados com zeros;
  • Alfabética, terão todos os seus bytes inicializados com bracos (espaços);
  • Alfanumérica, terão todos os seus bytes inicializados com bracos (espaços);


Veja também