COBOL - ENVIRONMENT DIVISION - www.cadcobol.com.br
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:
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.
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.
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.