4. Environment Division
A ENVIRONMENT é a divisão do COBOL que reúne informações sobre o ambiente onde o programa será executado. Normalmente são parâmetros de execução, opções de compatibilidade e declarações de arquivos de entrada e saída. Ela é composta por duas seções: CONFIGURATION SECTION e INPUT-OUTPUT SECTION. Se nenhuma informação da ENVIRONMENT for necessária para o programa toda a divisão pode ser omitida.
Substituição do ponto decimal
A CONFIGURATION SECTION é a seção que fornece dados sobre a plataforma que será usada para compilar e executar o programa, além de permitir que o programador estabeleça alguns parâmetros para execução e compatibilidade.
Nesta seção é possível, por exemplo, escolher o alfabeto que será usado pelo programa (ASCII ou EBCDIC), alterar o símbolo de valor monetário ($), definir o posicionamento de sinais em campos numéricos e uma série de outras opções.
No entanto, na imensa maioria dos casos, você utilizará esta seção apenas para substituir o ponto decimal (padrão americano) pela vírgula decimal (padrão brasileiro). Essa cláusula faz com que, por exemplo, o valor 1,359.85 seja exibido como 1.359,85.
Para isso, codificamos a CONFIGURATION SECTION e um de seus parágrafos, SPECIAL-NAMES, com a sentença DECIMAL-POINT IS COMMA, como no exemplo abaixo:
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
Declaração de arquivos
Arquivos convencionais são todos os arquivos sequenciais, indexados e/ou relativos que não fazem parte de um banco de dados. Esse recurso é muito utilizado em COBOL, principalmente em sistemas que precisam processar milhões de registros diariamente. Processar informações em modo batch usando arquivos convencionais apresenta uma performance muito superior à que seria obtida se o sistema usasse apenas banco de dados.
Todos os arquivos convencionais que serão lidos, gravados ou modificados pelo programa precisam ser declarados no parágrafo FILE-CONTROL da seção INPUT-OUTPUT SECTION, da ENVIRONMENT DIVISION.
O trecho abaixo mostra a declaração de dois arquivos:
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CRA0205 ASSIGN TO “../dat/cra0205.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0205. SELECT CRA0206 ASSIGN TO “../dat/cra0206.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0206.
Haverá uma cláusula SELECT para cada arquivo acessado pelo programa. Existem diversos parâmetros que podem ser usados nesta cláusula. É possível, por exemplo, definir o tipo de proteção (lock) que será usado para modificar registros, o modo como o arquivo será compartilhado, o método de acesso (sequencial ou randômico), e assim por diante. Veremos muitas outras opções da cláusula SELECT ao longo desse livro.
Os dois arquivos declarados no exemplo anterior se chamam CRA0205 e CRA0206. Esses nomes serão utilizados internamente pelo programa, e não precisam ter nenhuma semelhança com o nome real do arquivo (o nome externo usado pelo sistema operacional), que aparece entre aspas depois da cláusula ASSIGN[1].
O tipo de arquivo é definido pela cláusula ORGANIZATION. Nesse exemplo, os dois arquivos são do tipo linear sequencial. Arquivos sequenciais lineares são semelhantes a arquivos texto, num ambiente Windows ou Linux. Nesse tipo de organização, os registros são separados por caracteres delimitadores. No Windows os registros são delimitados por dois caracteres: carriage return (CR, que equivale ao hexadecimal x’0D’ da tabela ASCII) e line feed (LF, que equivale ao hexadecimal x’0A’). No Unix ou no Linux, os registros são delimitados apenas pelo caracter LF.
Declarando o File Status
A cláusula FILE STATUS informa em que variável de trabalho o COBOL deverá colocar o código de retorno das operações de I/O que serão realizadas com cada arquivo. Ela identifica uma variável que será definida mais adiante no programa, e o ideal é que você crie uma variável de file status para cada arquivo:
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CRA0205 ASSIGN TO “../dat/cra0205.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0205. SELECT CRA0206 ASSIGN TO “../dat/cra0206.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0206.
No nosso exemplo, dissemos que os códigos de retorno do arquivo CRA0205 ficarão na variável WT-ST-CRA0205, e que para o arquivo CRA0206 esses códigos ficarão em WT-ST-CRA0206. Essas duas variáveis terão que ser declaradas no programa, e veremos como fazer isso no próximo capítulo. Poderíamos ter dado qualquer nome válido para essas variáveis. Os nomes que usamos aqui (WT-ST-…) segue um dos muitos padrões de nomenclatura usados pelas empresas.
Toda operação de I/O realizada sobre os arquivos fará com que o COBOL atualize essas variáveis com um código de retorno de dois dígitos:
Observe na figura anterior que alguns códigos de retorno são esperados pelo programa. Um file status igual a 10, por exemplo, significa que todos os registros do arquivo já foram lidos e essa é uma situação normal. Outros códigos sugerem que houve um erro de programa, como o file status 41. Outros ainda sinalizam problemas operacionais, como o file status 35.
Normalmente os sistemas adotam algum procedimento padronizado para encerramento anormal quando acontece um file status inesperado, como o 41 ou o 35.
Exemplo completo
Como mencionamos anteriormente, todas as empresas definem padrões de codificação que buscam facilitar a construção do programa e suas manutenções futuras. Isso envolve não só o uso de comentários nos lugares certos mas também a própria formatação do código fonte e as regras de nomenclatura para programas, arquivos e variáveis.
O trecho abaixo mostra como ficaria nossa ENVIRONMENT DIVISION seguindo um desses padrões:
*================================================================* ENVIRONMENT DIVISION. *----------------------------------------------------------------* CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. *----------------------------------------------------------------* * UNLOAD DA TABELA DE DUPLICATAS *----------------------------------------------------------------* SELECT CRA0205 ASSIGN TO “../dat/cra0205.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0205. *----------------------------------------------------------------* * DUPLICATAS ATIVAS EMITIDAS NO PERIODO *----------------------------------------------------------------* SELECT CRA0206 ASSIGN TO “../dat/cra0206.dat” ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WT-ST-CRA0206.
Repare que aqui também usamos linhas de comentários tracejados para destacar o início da ENVIRONMENT DIVISION. Além disso, colocamos comentários para descrever o conteúdo de cada um dos arquivos usados pelo programa.
Repare que a INPUT-OUTPUT SECTION não informa se os arquivos serão acessados para leitura ou gravação. Isso será estabelecido mais adiante, na PROCEDURE DIVISION. Também não sabemos nada ainda sobre o conteúdo de cada arquivo. Isso também será definido mais adiante, na DATA DIVISION, sobre o qual falaremos no próximo capítulo.
[1] A cláusula ASSIGN varia ligeiramente de plataforma para plataforma. Este livro adota as convenções do Linux. O exemplo mostra que os arquivos estarão num subdiretório chamado “../dat” e que os arquivos (reais) terão uma extensão .dat.
Anterior | Conteúdo | Próxima |