Você está na página 1de 6

O formato segundo o qual as declaraes COBOL devem ser preparadas para serem enviadas para o compilador est definido

rigidamente. Pode considerar-se que qualquer linha consiste em quatro partes, que esto sumariadas no diagrama abaixo. E margem esquerda Nmero Sequencial Colunas 1 a 6 rea do Indicador Coluna 7 rea A Colunas 8 a 11 rea B Colunas 12 at margem direita rea A Cabealhos de Diviso e Seco Incio dos Nomes de Pargrafo. Incio do FD de uma descrio seguido de pelo menos um espao Nmero de Nvel 01 na descrio de um registo, seguido de um espao em branco, pelo menos rea B A primeira instruo do pargrafo deve continuar na mesma linha ou na seguinte, mas em rea B. Todas as instrues subsequentes devem aparecer na rea B. Essas linhas podem ser identadas da margem B para mostra a estrutura do programa Nome do Ficheiro e restante descrio, do FD Restante descrio do Registo de Nvel 01 Todos os outros Itens de Grupo ou Elementares com Nmero de Nvel superior a 01, devem ter pelo menos um espao em branco a seguir ao Nmero de Nvel e devem ser identados para mostra a estrutura do registo. Separadores O separador principal o espao. --> Um elemento uma unidade indivisvel do programa. Em qualquer zona onde seja permitido um espao permitido um nmero qualquer de espaos. ex: IF PAG-TRIBUTADO > 500 (ateno ao espao que precede e antecede o >). Uma interrupo numa declarao por motivo de fim de linha considerada como espao separador, excepto para o caso dos literais no numricos, que tm regra prpria (ver abaixo). . e, tambm podem ser usados como separadores, mas a teriam de ser precedidos de um espao. De notar que referimos o . quando usado como separador e no quando usado como ponto decimal numa clusula PIC ou literal. Outros separadores so os parnteses: - O parnteses esquerdo deve ser precedido de um ou mais espaos, mas no precisa de ser seguido de nenhum; - O parnteses direito no necessita de ser precedido de nenhum espao, mas tem de ser seguido de um ou mais espaos, a no ser que seja ponto final. Linhas de Continuao Qualquer elemento de COBOL pode ser continuado nume ou mais linhas, que devem ser todas em rea B, independentemente do posicionamento desta. Um hfen (-) na rea do indicador indica que o primeiro carcter diferente de espao da rea B da linha de continuao se segue imediatamente aps o ltimo carcter diferente de espao da linha precedente, excluindo linhas de comentrio intervenientes. A nica excepo a esta regra so as constantes no numricas, que so partidas em duas ou mais linhas, utilizando as seguintes regras: - Qualquer linha que seja para continuar no deve estar entre aspas e quaisquer espaos no fim da linha so considerados como partes do literal.

- A linha de continuao deve ter um hfen na rea do indicador, a rea A deve estar a espaos e o primeiro carcter diferente de espao da rea B deve ter aspas. - convencionado que o primeiro carcter aps a aspa de abertura da linha de continuao se segue imediatamente aps o ltimo carcter da linha precedente, excluindo linhas de comentrio intervenientes. Como o nmero de espaos usados como separador no significante, a continuao de constantes no numricas o nico caso em que um indicador de continuao absolutamente necessrio. CAP. 8 ESTRUTURA DE PROGRAMA 8.1. IDENTIFICATION DIVISION Os desenhadores originais do COBOL criaram-na para fornecer unicamente a identificao e outras informaes documentais acerca do programa. A nica entrada obrigatria nesta diviso a identificao do programa. Exemplo completo: IDENTIFICATION DIVISION. PROGRAM-ID. EXEMPLO1. AUTHOR. NUNO AZEVEDO INSTALLATION. CIGRECI, LDA DATE-WRITEN. JANEIRO 1985 DATE-COMPILED. HOJE SECURITY. NENHUMA 8.2. ENVIRONMENT [MEIO] DIVISION Esta diviso deve conter todos os pormenores acerca do meio envolvente em que o programa ir correr. Os desenhadores originais do COBOL definiram que todas as situaes peculiares inerentes ao tipo particular de computador usado estivessem contidas nesta diviso. Assim, o transporte do programa de um tipo de computador para outro envolveria apenas a modificao da ENVIRONMENT DIVISION. esta diviso tem duas seces: CONFIGURATION, para especificar o hardware (mquina fsica) do sistema utilizado, e INPUT-OUTPUT, que, tal como o prprio nome sugere, trata das ligaes entrada e sada em ficheiros externos. CONFIGURATION SECTION O mnimo requerido que SOURCE-COMPUTER e OBJECT-COMPUTER sejam especificados. O primeiro fornece o nome da mquina onde o programa ir ser compilado e o segundo o nome da mquina onde o programa ir ser corrido/executado. Normalmente so a mesma mquina, mas no obrigatrio: Ex: mquina onde se executa no seja suficiente para comportar um compilador (grande). Os nomes a usar so definies do implementador (do compilador). Pode-se ainda usar os SPECIAL-NAMES. INPUT-OUTPUT SECTION A mnima definio requerida um pargrafo FILE-CONTROL contendo uma declarao SELECT para cada ficheiro de input ou de output utilizado pelo programa. As instrues de SELECT associam aos ficheiros (fsicos) os nomes utilizados no programa (internos ou lgicos). De novo, os programas so mais transportveis, pois bastar mudar os nomes dos ficheiros externos quando do transporte do programa dum sistema para outro. Ex: de ENVIRONMENT DIVISION completa: ENVIRONMENTE DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. MM1. OBJECT COMPUTER. MM1.

SPECIAL-NAMES. MM-CONTROL IS OPERATUIONS-CONSOLE. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT FICH-TRANS ASSIGN TO MM-INPUT. SELECT FICHOUT ASSIGN TO MM-OUTPUT. 8.3. DATA-DIVISION Encontra-se dividida em duas partes principais: a FILE SECTION, que contm descries de todos os ficheiros de input/output utilizados pelo programa, e a WORKING-STORAGE SECTION, que descreve todos os campos de dados temporrios requeridos pelo programa. File Section Todos os ficheiros descritos na FILE SECTION consistem numa descrio do ficheiro seguida de uma ou mais descries de registos. Inicia-se com os caracteres FD seguidos por um nome interno de ficheiro, a clusula LABEL RECORDS e, possivelmente, outras clusulas e termina com ponto final. A clusula LABEL RECORDS fornece informao acerca da estrutura do ficheiro. Os ficheiros que existem em banda ou disco magntico tm, normalmente, um registo de header e trailer definidos para marcar, respectivamente, o incio e fim do ficheiro. O formato destes registos especiais varia de sistema para sistema. Se o ficheiro for descrito como: LABEL RECORDS (ARE) STANDARD ento o ficheiro contm marcas standards para header e trailer para o sistema que st a ser utilizado. Uma alternativa : LABEL RECORDS (ARE) OMITTED que indioca que o ficheiro no tem marcas fsicas para incio e fim de ficheiro, podendo isto significar que o input feito directamente a partir de cartes perfurados ou via teclado ou o output executado directamente para uma impressora. Ex: completo: FD FICHEIRO-TRANS BLOCK CONTAINS 100 TO 2000 CHARACTERS RECORD CONTAINS 300 TO 1500 CHARACTERS LABEL RECORDS STANDARD DATA RECORDS ARE TRANS-BATCH-HEADER TRANS-DETAIL. A esta descrio de ficheiro devem seguir-se descries de registos. Um erro comum colocar-se ponto final aps o nome do ficheiro. A descrio de registo uma estrutura de dados com nmero de nvel 01. A mais simples s com um campo e um PIC: 01 LINHA-OUT PIC X(120). Uma nota importante que a clusula VALUE no deve/pode ser utilizada para dar valores iniciais a nenhum campo de dados da FILE SECTION. Isto no invalida o uso de nomes-condio onde VALUE utilizada de forma diferente. Working-Storage Section a) Variveis de estado: descrevendo o estado corrente do programa. O nico exemplo utilizado at agora o da marca de FIM-DE-<nome-de-ficheiro> b) Registos de output: Para eventual transmisso para o ficheiro de output. c) Campos de dados temporrios d) Cabealhos e outras constantes. Segundo a experincia do autor, um dos blocos mais inconsistentes diz respeito ao valor inicial dos campos de dados. Quando um programa inicia a sua execuo, os valores de todos os campos so indefinidos, a menos que se tenha fornecido um valor

inicial atravs da clusula VALUE na DATA DIVISION (WSS), mas que no novamente posto a esse valor (ex: 0) quando ele for alterado no programa. Um campo que no tenha um valor inicial pode ser colocado com um valor na PROCEDURE DIVISION, atravs das clusulas MOVE, COMPUTE ou READ. Olhar para certos campos como constantes que tero um valor fixo durante o programa uma boa prtica de programao. ex: IVA 05 TAXA-IVA PIC 99V9 VALUE 15. Outro ponto que determinar um bom estilo de programao manter juntos e na mesma ordem em todos os programas escritos os campos de dados similares. O COBOL standard inclui um nmero de nvel especial, 77, para capos independentes que aparecem no princpio da WORKING-STORAGE SECTION. No se recomenda o uso deste nmero de nvel porque muito melhor juntar os vrios tipos de campos tornando desnecessario um nmero de nvel especial o nvel 01 com uma picture tem o mesmo efeito. 8.4. PROCEDURE DIVISION EX: PROGRAMA-PRINCIPAL. PERFORM ESTADO-INIC PERFORM <processamento-principal> PERFORM FECHO. Parar um Programa STOP RUN. possvel que um programa contenha vrias declaraes STOP RUN, mas, geralmente, isto denuncia um desempenho pobre. Abertura e Fecho de Ficheiros OPEN INPUT <lista-input> OUTPUT <lista-output> No CLOSE no necessrio especificar as palavras reservadas INPUT nem OUTPUT. Leitura de Registos de um Ficheiro O mecanismo de leitura do COBOL tem como base os registos e utiliza uma aproximao de leitura-falhada para a condio de fim de ficheiro. O facto de a leitura ter como base os registos significa que no possvel ler caracteres ou nmeros individuais do ficheiro, mas apenas registos completos tal como o especificado na FILE SECTION da DATA DIVISION. A abordagem leitura-falhada significa que, quando uma declarao READ executada, ela ou copia um registo para a rea de input associada, ou executa uma sequncia de instrues especficas para lidar com a condio fim de ficheiro. Depois da execuo desta sequncia de instrues, diz que o ficheiro est na condio atend e que a rea de input do ficheiro est inacessvel para o programa. Depois disto qualquer nova tentativa de leitura d erro de execuo. Forma mais usada: READ <nome-ficheiro-input> AT END <aco-em-fim-ficheiro>. O que se deve fazer: a) Defina uma condio de END-OF-<nome-ficheiro-input> na WSS 05 END-<nome-ficheiro-input> PIC X. 88 END-OF-<nome-ficheiro-input> VALUE F A condio 88 ser verdadeira se e s se o valor F for movido para o campo de dados associado 05. b) Inicialize a condio END-OF-<nome-ficheiro-input> com o valor falso no incio do programa, em ESTADO-INIC. c) Sempre que se executa uma declarao READ, certifique-se de que a condio END-OF<nome-ficheiro-input> tornada verdadeira pelo membro AT END do READ.

d) Certifique-se de que cada declarao READ somente executada se END-OF<nome-ficheiro-input> for falso. Escrita num Ficheiro Forma mais simples: WRITE <nome-registo-output> O efeito desta declarao WRITE transferir os dados armazenados na rea de output, referida por <nome-registo-output>, em 01, para o ficheiro ao qual est associado <nome-ficheiro-output> em FD correspondente. Repare que WRITE se refere ao nome de um registo enquanto READ ao nome de um ficheiro. Alternativamente WRITE <nome-registo-output> FROM <nome-registo> , sendo esta uma estrutura de dados descrita na WSS. 8.5. LINHAS E PGINAS

CAP. 3 O PROGRAMA DE COBOL 3.1. ESTRUTURAS DE PROGRAMAS IDENTIFICATION DIVISION largamente documental e a nica entrada principal o nome do programa. O material documental pode incluir: o nome do programador, a data em que o programa foi escrito ou em que foi compilado e comentrios introdutrios da matria do programa. ENVIRONMENT DIVISION Aqui define-se o meio em que o programa vai ser posto a correr. Inclui detalhes sobre o tipo de computador utilizado e sobre os nomes dos ficheiros actuais usados pelo programa. Esta division foi projectada para ser a aprte do programa dependente da mquina; na teoria, esta deveria ser a nica parte do programa afectada, se um programa fosse transferido de um sistema de computador para outro. DATA DIVISION Descreve todas as estruturas de dados que so requeridas pelo programa. Tem duas seces principais: FILE SECTION que descreve 3.2. PALAVRAS RESERVADAS E NOMES DEFINIDOS PELO UTILIZADOR