COBOL - ENVIRONMENT DIVISION - www.cadcobol.com.br




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

COBOL - ENVIRONMENT DIVISION

A ENVIRONMENT DIVISION serve para fazer ligação com o ambiente operacional onde o programa será executado.
Faz a interface dos arquivos lógicos uqe o programa usará com os arquivos físicos.

Esta divisão possui a seguinte estrutura:

Esta divisão é composta de duas seções:

CONFIGURATION SECTION.

Esta seção destina-se a configuração do ambiente, ela é composta por três partes:
SOURCE-COMPUTER, OBJECT-COMPUTER e SPECIAL-NAMES.

Uma identifica o computador onde foi confeccionado o programa e a segunda identifica o computador do ambiente de produção, ambas servem apenas para comentários haja visto que ambas deixaram de ser obrigatórias mas caso o programador opte em utiliza-las deve escrever sua sintaxe corretamente para não causar erros de compilação.

SPECIAL-NAMES específica o sinal monetário, escolhe o tipo de ponto decimal, específica caracteres simbólicos e possibilitar adaptar o programa para se comunicar com programas de outras linguagens.

INPUT-OUTPUT SECTION

Esta seção destina-se a configuração do ambiente de Leitura e Gravação, ela possui duas partes:
FILE-CONTROL e I-O-CONTROL.
A primeira destina-se a especificação dos arquivos que o programa irá acessar.
A segunda foi descontinuada nas versões mais atuais do compilador, valendo apenas para os ambientes de Mainframe.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT CLIENTES ASSIGN TO "CLIENTES.DAT"
                  ORGANIZATION IS INDEXED
                  ACCESS MODE IS DYNAMIC
                  RECORD KEY IS CLIENTES-CODIGO
                  ALTERNATE KEY IS CLIENTES-NOME WITH DUPLICATES
                  FILE STATUS IS FS-CLIENTES.

Neste exemplo, o programa não faz referências as cláusulas SOURCE-COMPUTER, OBJECT-COMPUTER e SPECIAL-NAMES, as duas primeiras por não serem obrigatórias e a terceira pelo fato do programa não precisar, por exemplo, identificar que as casas decimais serão identificadas por uma vírgula.

Como ele irá tratar um arquivo, temos a seção INPUT-OUTPUT SECTION, a referência desta seção é opcional, podemos escrever diretamente a cláusula FILE-CONTROL.
O comando SELECT é utilizado para declarar um arquivo no programa, todos os arquivos que o programa irá manipular devem possuir uma SELECT.

A cláusula SELECT terá a seguinte estrutura para arquivos seqüenciais:

           SELECT nome-arquivo ASSIGN TO nome-externo 
                  ORGANIZATION IS SEQUENTIAL 
                  ACCESS MODE IS SEQUENTIAL	
                  FILE STATUS IS FS-ARQUIVO.

Nome-arquivo indica o nome que será referenciado internamente pelo programa.
Nome-externo indica onde os dados serão gravados, ou seja, o nome do arquivo, caso não seja especificado o caminho do arquivo será considerado o diretório corrente.
Pode-se substituir este nome-externo por DISK e especificar o nome-externo na FD (será visto mais à frente) e se mesmo assim o nome-externo não for informado o compilador irá criar no diretório corrente de execução um arquivo com o mesmo nome-arquivo.

ORGANIZATION IS SEQUENTIAL indica o tipo de organização do arquivo.
ACCESS MODE IS SEQUENTIAL o tipo de acesso (sendo que este é o único tipo de acesso permitido para esta organização).
FILE STATUS IS fs-arquivo representa uma referência de um campo da Working-Storage section que será atualizada a cada operação feita no arquivo, indicando qual é a situação atual do arquivo, é desta forma que o programa pode fazer testes para saber se pode ou não continuar a execução sem problemas.

A cláusula SELECT terá a seguinte estrutura para arquivos de linhas seqüenciais:

           SELECT nome-arquivo ASSIGN TO nome-externo
                  ORGANIZATION IS LINE SEQUENTIAL
                  ACCESS MODE IS SEQUENTIAL
                  FILE STATUS IS fs-arquivo.

Note que a única mudança é na organização do arquivo LINE SEQUENTIAL.
Todas as outras informações são idênticas ao SEQUENTIAL.

A cláusula SELECT terá a seguinte estrutura para arquivos randômicos:

           SELECT nome-arquivo ASSIGN TO nome-externo
                  ORGANIZATION IS RELATIVE
                  ACCESS MODE IS RANDOM/SEQUENTIAL/DYNAMIC 
                  [RELATIVE KEY IS chave-randomica]
                  FILE STATUS IS fs-arquivo.

Nesta SELECT temos uma modificação na organização que agora é RELATIVE e temos a possibilidade escolher entre três tipos de acesso:

RANDOM (Aleatório)
O programa pode via chave-randômica ir para qualquer registro, informando apenas o número do registro que se deseja acessar.

SEQUENTIAL (Seqüencial)
O programa irá acessar este arquivo apenas para leituras seqüências, ou seja, irá avançar a leitura registro a registro até o fim de todos os registros que estão no arquivo.

DYNAMIC (Dinâmico)
O programa pode fazer acessos do tipo RANDOM e também do tipo SEQUENTIAL, ou seja, o programa pode alternar o tipo de acesso no momento que for oportuno.

A cláusula SELECT terá a seguinte estrutura para arquivos indexados:

           SELECT nome-arquivo ASSIGN TO nome-externo
                  ORGANIZATION IS INDEXED 
                  ACCESS MODE IS RANDOM/SEQUENTIAL/DYNAMIC 
                  RECORD KEY IS nome-campo/chave-separada
                  ALTERNATE KEY IS nome-campo/chave-separada [WITH DUPLICATES] 
                  FILE STATUS IS fs-arquivo.

Nesta organização indexada temos duas novas cláusulas RECORD KEY e ALTERNATE KEY, elas referenciam-se aos campos do registros pelo qual será criado o índice, opcionalmente a ALTERNATE KEY pode possuir valores duplicados, ou seja, mais de um registro onde o campo referenciado como uma chave alternada terá um valor repetido.