Académique Documents
Professionnel Documents
Culture Documents
Abril/2016
1
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
ÍNDICE
1. INTRODUÇÃO .............................................................................................................................. 6
COBOL II.................................................................................................................................................... 6
INTERPRETAÇÃO DOS FORMATOS NESTA APOSTILA ............................................................... 7
IDENTAÇÃO.............................................................................................................................................. 7
IDENTIFICATION DIVISION............................................................................................................... 11
ENVIRONMENT DIVISION .................................................................................................................. 12
CONFIGURATION SECTION .............................................................................................................. 12
INPUT-OUTPUT SECTION .................................................................................................................. 12
DATA DIVISION ..................................................................................................................................... 13
FILE SECTION. ...................................................................................................................................... 13
WORKING-STORAGE SECTION. ...................................................................................................... 13
ESPECIFICAÇÃO PARA DADOS DE ARQUIVOS OU VÁRIAVEIS ............................................ 13
PROCEDURE DIVISION ....................................................................................................................... 18
PERFORM ................................................................................................................................................ 19
PERFORM PARÁGRAFO [THRU] PARÁGRAFO-FIM ................................................................................ 19
PERFORM PARÁGRAFO N TIMES .......................................................................................................... 19
PERFORM PARÁGRAFO [WITH TEST {BEFORE | AFTER}] UNTIL ............................................. 19
CONDIÇÃO .................................................................................................................................................. 19
PERFORM PARÁGRAFO [WITH TEST {BEFORE|AFTER}] VARYING ......................................... 20
CAMPO FROM N BY M .............................................................................................................................. 20
ACCEPT ................................................................................................................................................... 21
DISPLAY .................................................................................................................................................. 22
MOVE ....................................................................................................................................................... 22
INITIALIZE ............................................................................................................................................. 23
EXIT .......................................................................................................................................................... 24
STOP RUN ................................................................................................................................................ 24
2
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
ADD ........................................................................................................................................................... 25
SUBTRACT .............................................................................................................................................. 26
DIVIDE ..................................................................................................................................................... 27
MULTIPLY .............................................................................................................................................. 28
COMPUTE................................................................................................................................................ 28
IF ................................................................................................................................................................ 30
EVALUATE .............................................................................................................................................. 32
CONTINUE .............................................................................................................................................. 33
NEXT SENTENCE ................................................................................................................................... 33
3
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
COPY......................................................................................................................................................... 44
CALL E LINKAGE SECTION ............................................................................................................... 44
CANCEL ................................................................................................................................................... 45
EXIT PROGRAM .................................................................................................................................... 45
GOBACK .................................................................................................................................................. 45
STRING..................................................................................................................................................... 46
TABELAS ................................................................................................................................................. 46
CLAUSULA OCCURS ................................................................................................................................ 46
NÍVEIS DE TABELAS ............................................................................................................................ 47
FORMATO ESPECIAIS DE DADOS .................................................................................................... 48
FORMATOS BINÁRIOS ........................................................................................................................ 48
CLÁUSULA USAGE................................................................................................................................ 49
USAGE COMP. ........................................................................................................................................ 50
USAGE COMP-3. ..................................................................................................................................... 50
RECOMENDAÇÕES E BOAS PRÁTICAS ....................................... ERROR! BOOKMARK NOT DEFINED.
./
4
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Revisões
Versão Data Responsável Comentário
1.0 Out/2006 Edinelson Pacci Versão inicial
2.0 Nov/2006 Edinelson Pacci Recomendações e Boas práticas
3.0 Fev/2008 Edinelson Pacci Caderno de Exercícios
5
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
1. INTRODUÇÃO
O Cobol é uma linguagem de alto nível criada no ano de 1959. A palavra
Cobol é uma abreviação de:
COmmon
Business
Oriented
Language.
Como seu nome indica, o objetivo desta linguagem é permitir o
desenvolvimento de aplicações comerciais para pessoas sem conhecimento
profundo de computadores. Por isso a linguagem Cobol usa frases normais
da língua inglesa, e a estrutura de um programa Cobol se assemelha a um
texto com divisões, parágrafos e frases em inglês.
Depois de escrito o programa Cobol (ou programa fonte), é necessário
traduzi-lo para a linguagem interna do computador (linguagem de máquina),
convertendo-se então em um programa objeto. Esta conversão é feita pelo
próprio computador, usando o programa compilador de Cobol.
Teremos em seguida a definição de alguns termos importantes para o
desenvolvimento do curso:
• Byte: Conjunto de 8 bits (pontos magnéticos) que formam uma
posição de memória.
• ASCII : tabela usada em micros para conversão do valor binário dos
bits de um byte em um caracter.
• EBCDIC : tabela da IBM para conversão do valor binário dos bits de
um byte em um caracter.
• Programa fonte: Texto de um programa escrito em uma linguagem de
alto nível (ex.: Cobol).
• Programa objeto: Programa convertido para a linguagem interna do
computador (linguagem de máquina).
• Compilador: Conversor de programa fonte em programa objeto.
COBOL II
O COBOL II, foi liberado pela IBM no inicio dos anos 90. É uma linguagem
poderosa e flexível para as aplicações comerciais atuais e introduziu a
codificação da programação estruturada projeto TOP-DOWN e MODULAR.
No COBOL II foram incluídos comandos para “COPY’S”, “PERFORM INLINE”,
DELIMITADORES DE ESCOPO” e os comandos “EVALUATE” e “INITIALIZE”
entre outros.
O modulo objeto gerado ficou mais potente, podendo utilizar todas as
facilidades do MVS e OS/390.
Pode-se rodar um programa acima da linha dos 16-MBYTES e com 31-BIT de
endereçamento de memória tornando mais fácil o desenvolvimento de
grandes aplicações.
No COBOL II o retorno de FILE-STATUS de arquivo VSAM é mais detalhado,
com a opção de acesso ao VSA-CODE.
O compilador foi totalmente reescrito tendo sido eliminados comandos e
instruções obsoletas das versões anteriores, tratando-se de um compilador
novo, o COBOL II apresenta algumas melhorias em relação ao antigo
permitindo uso mais eficiente dos recursos, como maior facilidade de
depuração BATH e novo formato das listagens de compilação.
6
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
IDENTAÇÃO
O processo de identação consiste em alinhar comandos, de forma que fique
mais fácil ao programador que estiver analisando o código, visualizar e, por
decorrência, entender o conjunto de instruções. Algumas instruções trabalham
com Subconjuntos (blocos) de (outras) instruções; por meio da identação
coloca-se instruções que façam parte de um mesmo bloco num mesmo
alinhamento.
O caso mais comum é o das instruções de teste (IF), onde normalmente existe
pelo menos um bloco de instruções que deve ser executado quando a condição
testada for satisfeita; e, opcionalmente, outro bloco de instruções que devem
ser executadas quando a condição testada não for satisfeita, exemplo:
IF condição
bloco para condição satisfeita
ELSE
bloco para condição não satisfeita
END-IF
7
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Sem identação :
IF condição
IF condição
COMPUTE A = (B * C ) ** 4
COMPUTE C = A / 0.005
ELSE
COMPUTE A = (B * C ) ** 8
COMPUTE C = A / 0.055
END-IF
ELSE
IF conical
COMPUTE A = (B * C ) ** 5
COMPUTE C = A / 0.007
ELSE
COMPUTE A = (B * C ) ** 9
COMPUTE C = A / 0.007
END-IF
END-IF
Com identação:
IF condição
IF condição
COMPUTE A = (B * C ) ** 4
COMPUTE C = A / 0.005
ELSE
COMPUTE A = (B * C ) ** 8
COMPUTE C = A / 0.055
END-IF
ELSE
IF condição
COMPUTE A = (B * C ) ** 5
COMPUTE C = A / 0.007
ELSE
COMPUTE A = (B * C ) ** 9
COMPUTE C = A / 0.007
END-IF
END-IF.
8
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
HÍFEN(-)
Se o hífen estiver nesta posição indica que existe uma continuação de
uma cadeia de caracteres, (uma palavra ou frase), que foi iniciada na
linha anterior. Uma literal que não caiba numa linha, para que seja
continuada na próxima linha, precisa ter na próxima linha a indicação
da continuação (hífen na coluna 7) e, em qualquer coluna a partir da
12, um apóstrofe indicando o início da continuação.
1A6 7 A AREA B
DISPLAY “RELATORIO MENSAL DE VEN
- “DAS POR AGENCIA”
ASTERISCO(*)
Nesta posição indica, para o compilador COBOL, que toda a linha
deve ser tratada como uma linha de comentário.
1A6 7 A AREA B
* ESTA ROTINA CONFERE A DATA DGITADA
VERIFICAR-DATA.
9
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
10
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
3. DIVISÕES DO COBOL
De maneira semelhante a um livro com seus capítulos, parágrafos e
itens, um programa Cobol é formado por uma hierarquia de Divisions,
Sections, parágrafos e instruções. Uma regra importante em Cobol é que
toda declaração (Instrução, Nome de parágrafo, Division ou Section),
deve ser terminada por ponto final (.).
O código Cobol possui quatro divisões que devem ser utilizadas nesta
ordem:
• IDENTIFICATION DIVISION.
• ENVIRONMENT DIVISION.
• DATA DIVISION.
• PROCEDURE DIVISION.
IDENTIFICATION DIVISION
Esta é a divisão de identificação do programa. Não contêm sections,
mas somente alguns parágrafos pré-estabelecidos e opcionais. O
único parágrafo obrigatório é o PROGRAM-ID (Nome do programa). O
nome do programa deve ser uma palavra com até 8 caracteres (letras
ou números), começando por uma letra.
11
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
ENVIRONMENT DIVISION
Esta divisão descreve o equipamento envolvido no programa. Possui
duas SECTION e sua estrutura é a seguinte:
ENVIRONMENT DIVISION.
*
CONFIGURATION SECTION.
SOURCE-COMPUTER. Comentário.
OBJECT-COMPUTER. Comentário.
SPECIAL-NAMES.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
I-O CONTROL.
CONFIGURATION SECTION
Esta seção destina-se a uma descrição geral do ambiente do
computador. Ela é composta por três parágrafos: SOURCE-
COMPUTER, OBJECT-COMPUTER e SPECIAL-NAMES.
SOURCE-COMPUTER identifica o computador onde foi
confeccionado o programa (opcional).
OBJECT-COMPUTER identifica o computador do ambiente de
produção (opcional).
SPECIAL-NAMES
Têm comandos pré-definidos em Cobol, para especificar
alfabeto, moeda, ou separador de decimal (vírgula ou
ponto), mas todos os comandos são opcionais. O
separador de decimais é usado mais freqüentemente.
Formato:
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION
Esta seção destina-se a configuração dos arquivos e será
tratada no item 8.
12
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
DATA DIVISION
A DATA DIVISION é a divisão do programa onde são definidos os
dados, incluindo todas as variáveis e constantes necessárias, assim
como o conteúdo dos registros dos arquivos. A DATA DIVISION é
composta habitualmente por duas Sections: FILE SECTION e
WORKING-STORAGE SECTION. Também existe a LINKAGE SECTION
que será tratada no COBOL AVANÇADO.
FILE SECTION.
A FILE SECTION é a Section usada para detalhar o conteúdo dos
registros dos arquivos e será tratada no item 8.
WORKING-STORAGE SECTION.
NA WORKING-STORAGE SECTION devemos definir todas as variáveis
que o programa precisa para seu completo funcionamento. Não há
parágrafos nesta Section, e os dados podem ser definidos como
grupos hierárquicos (níveis 01 a 49), ou dados independentes (nível
77) em qualquer ordem, desde que não se crie um nível 77 no meio
de uma hierarquia causando seu rompimento. Exemplo:
WORKING-STORAGE SECTION.
77 CONTADOR PIC 999.
77 SOMA PIC 9(6)V99.
01 DATA-VENCIMENTO.
03 DIA PIC 99.
03 MÊS PIC 99.
03 ANO PIC 99.
NÍVEL
O nível é um número variando de 01 a 99 que define a hierarquia do
dado em relação aos outros dados. Em Cobol pode-se agrupar os
dados e concatená-los formando hierarquias como no exemplo
abaixo:
DATA-NASCIMENTO
DIA-NASCIMENTO
MES-NASCIMENTO
ANO-NASCIMENTO
13
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
03 DATA-NASCIMENTO
05 DIA-NASCIMENTO
05 MES-NASCIMENTO
05 ANO-NASCIMENTO
NOME-DO-DADO
Qualquer palavra, pode ter no máximo 30 caracteres, incluindo
letras, números e hífen, sendo que pelo menos um dos caracteres
deve ser letra. Quando um campo criado na DATA DIVISION não for
referenciado em nenhum comando do programa, não será necessário
criar um nome-do-dado para este campo, e neste caso usa-se a
palavra FILLER como nome-do-dado deste campo.
FORMATO DO DADO
O formato dos dados em Cobol é especificado pela palavra reservada
PICTURE, ou pela sua abreviação PIC. Os formatos são descritos
usando uma das 3 letras seguintes:
9 – O dado é numérico.
X – O dado é alfa-numérico, e pode conter letras, números e
outros caracteres.
A – O dado é alfabético, e contem somente letras e espaços.
14
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PIC F(n).
01 FUNC.
03 NASCIMENTO.
05 MÊS PIC 99.
05 ANO PIC 99.
03 ENDERECO.
05 RUA PIC X(20).
05 NUMERO PIC 9999.
VALOR-INICIAL
Esta cláusula é opcional em Cobol. Seu objetivo é definir um valor
para o item quando o programa se inicia. Se ela for omitida, o item
correspondente terá valores imprevisíveis. No caso de um item que
irá conter uma totalização, por exemplo, é conveniente que ele
comece com o valor zero. O valor-inicial é definido em Cobol pelo
formato:
VALUE literal.
15
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
MÁSCARAS DE EDIÇÃO
A cláusula PICTURE (ou PIC) tem alguns formatos próprios para fazer
edição de variáveis numéricas no momento de uma impressão que
são mostrados na tabela abaixo:
Exemplo:
03 VALOR PIC ZZ.ZZ9,99 BLANK WHEN ZERO.
16
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
IMPORTANTE :
1. Para campos numéricos (PIC 9) pode-se opcionalmente colocar a
indicação de sinal : PIC 9(03) ou PIC S9(03).
17
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PROCEDURE DIVISION
Esta divisão controla a execução do programa, e é onde colocamos os
comandos oriundos do algoritmo planejado pelo programador
(lógica). Os comandos (instruções) do Cobol são formados por um
único verbo da língua inglesa, seguido dos parâmetros necessários, e
que serão discutidos um a um nos parágrafos seguintes. As
instruções de um programa Cobol podem ser reunidas em parágrafos,
e estes em seções, definidas pelo programador com o fim de tornar o
programa mais fácil de ser entendido.
Exemplo:
******* INICIO PROCEDIMENTOS DO PROGRAMA **********
PROCEDURE DIVISION.
ROTINA-PRINCIPAL SECTION.
PERFORM INICIALIZAR.
PERFORM PROCESSAR.
PERFORM FINALIZAR.
FIM-ROTINA-INICIAL.
STOP RUN.
18
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PERFORM
A instrução PERFORM permite que o controle passe temporariamente para
um parágrafo diferente e depois retorne para o parágrafo original do qual a
instrução PERFORM foi executada.
Há dois tipos de instrução PERFORM.
1. PERFORM OUT–LINE: PROCEDURE-NAME é especificado, ou seja, é
dado um PERFORM em um PARÁGRAFO ou SECTION.
2. PERFORM IN–LINE: As instruções estão logo abaixo do comando
PERFORM. Deve ser delimitado pela frase END- PERFORM.
• Há 4 Formatos de PERFORM.
1. PERFORM básico
2. PERFORM com opção TIMES
3. PERFORM com opção UNTIL
4. PERFORM com opção VARYING UNTIL
Formato 1:
PERFORM parágrafo [THRU] parágrafo-fim
A opção THRU é opcional e pode também ser utilizado nos demais
formatos.
Exemplo 1.1:
PERFORM INICIALIZAR.
PERFORM PROCESSAR THRU PROCESSAR-FIM.
Formato 2:
PERFORM parágrafo N TIMES
O parágrafo referido é executado N TIMES, onde N pode ser uma
constante ou variável numérica.
Formato 3:
PERFORM parágrafo [WITH TEST {BEFORE | AFTER}] UNTIL
condição
O parágrafo referido é executado até que a condição especificada pela
opção UNTIL seja verdadeira.
19
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Formato 4:
PERFORM parágrafo [WITH TEST {BEFORE|AFTER}] VARYING
campo FROM n BY m
UNTIL condição
Executa o parágrafo especificado, até que a condição especificada
seja satisfeita. Antes de executar o bloco de instruções pela primeira
vez, atribui o valor N a variável CAMPO. Após cada execução do
bloco, antes de voltar a executá-lo, incrementa M à variável CAMPO.
20
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
COMANDOS BASICOS
ACCEPT
O Cobol foi desenvolvido originalmente para processar arquivos de dados e
ainda é usado, com esta finalidade. Entretanto, em muitas vezes existe a
necessidade de interação com o operador. Usamos o comando (verbo)
ACCEPT para fornecer os dados de entrada por meio de um cartão DD do
JCL (tratado no programa Cobol como SYSIN).
O comando ACCEPT recebe do dispositivo de entrada padrão SYSIN (cartão
//DDSYSIN DD *) ou informações do sistema contidas em um registrador
especial (DATE, DAY, DAY-OF-WEEK ou TIME).
Formato:
[SYSIN ]
[DATE ]
ACCEPT identificador-1 [FROM [DAY ]]
[DAY-OF-WEEK ]
[TIME ]
Obs: Quando a opção FROM é omitida o padrão FROM SYSIN é
assumido.
Regras:
▪ SYSIN
Cada vez que o programa Cobol passa pela instrução ACCEPT, uma
linha da SYSIN do JCL é carregada na variável CAMPO. É necessário
prever com cuidado quantas linhas terá a SYSIN do JCL, porque se o
comando ACCEPT não encontrar uma linha para carregar na sua
variável, o sistema operacional emitirá uma mensagem de erro para
o operador e o programa ficará suspenso até a intervenção do
operador.
21
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
▪ DAY-OF-WEEK
Tem implícito PIC 9(1), onde:
1 = Segunda-feira, 2 = terça-feira,
3 = quarta –feira,4 = quinta-feira,
5 = sexta-feira, 6 = sábado, 7 = domingo.
Exemplos:
ACCEPT RESPOSTA FROM SYSIN
• Lê um registro lógico em SYSIN e coloca-o na variável
denominada RESPOSTA
WORKING-STORAGE SECTION.
05 WS-DATE PIC 9(06).
05 WS-TIME PIC 9(08).
...
ACCEPT WS-DATE FROM DATE.
ACCEPT WS-TIME FROM TIME.
DISPLAY
Exibe conteúdo de campo(s) num dispositivo de saída. Normalmente é o
dispositivo cujo DDNAME é SYSOUT.
Formato:
DISPLAY [identificador-1 | literal-1] ...
Exemplos:
DISPLAY "PROGRAMA INICIANDO............. "
DISPLAY "TOTAL REGISTROS LIDOS.........: " WS-REGLIDOS
DISPLAY "TOTAL REGISTROS GRAVADOS..: " WS-REGGRAV
DISPLAY WS-SQLCODE
DISPLAY WS-DIA ‘/’ WS-MES ‘/’ WS-ANO
MOVE
A instrução MOVE transfere dados de uma área de memória para uma ou
mais áreas.
• Alinhamento alfabético/alfa-numérico
Os dados são acomodados no campo receptor alinhando-se da esquerda
para a direita. Se o campo emissor for maior que o receptor, os BYTES
mais a direita, em excesso, serão truncados no campo receptor. Se o
emissor for menor que o receptor os BYTES faltantes para preencher o
campo receptor serão preenchidos com SPACES.
• Alinhamento Numérico
Os dados são acomodados no campo receptor alinhando-se da direita
para a esquerda. Se o campo emissor for maior que o receptor os BYTES
mais a direita do campo emissor serão truncados.
• Os campos: EMISSOR e RECEPTOR podem ser itens de grupo ou
elementares.
22
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Formato:
MOVE ALL {identificador-1 | literal-1} TO {identificador-2 ...}
Exemplos:
MOVE WS-NUM-PAG TO NUM-PAG-REL.
MOVE WS-CODCLI-ARQ TO WS-CODCLI-AUX, COD-CLI-REL.
MOVE ZEROS TO WS-ACUM-VALOR,
WS-TOT-PAG,
WS-ACUM-COMISSAO.
MOVE “N” TO WS-FIM-ARQ.
MOVE “S” TO WS-FIM-ARQ.
INITIALIZE
Efetua a inicialização (atribuição de valores) de uma variável (ou um
conjunto de variáveis).
• Como default variáveis numéricas são inicializadas com zeros e
variáveis alfas-numéricas são inicializadas com espaços.
• Se a variável especificada for um item de grupo, todos os seus sub-itens
serão inicializados de acordo com seu formato: os que forem numéricos,
serão inicializados com zero (respeitando-se seu formato : zonado,
compactado ou binário) ; se a variável for alfa-numérica ou alfabética,
ela será inicializada com espaços.
• Da mesma forma, se a variável tiver a cláusula OCCURS, todas as suas
ocorrências serão inicializadas.
23
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Formato:
INITIALIZE variável
[ REPLACING [NUMERIC | ALPHABETIC]
DATA BY literal/variável]
Exemplos:
INITIALIZE AREA-DE-VALORES, WS-ACUM-VALOR
EXIT
A instrução EXIT provê um ponto de encerramento comum para uma serie
de parágrafos. A instrução EXIT não tem efeito na compilação nem na
execução do programa, é portanto, usado com a finalidade de documentar o
programa.
Formato:
EXIT
Exemplo:
PROCEDURE DIVISION
00-00-MAIN-LINE.
PERFORM INICIALIZAR.
PERFORM PROCESSAR.
PERFORM FINALIZAR.
00-99-FIM. EXIT.
STOP RUN
A instrução STOP RUN encerra a execução do programa.
Formato:
STOP RUN
Exemplo:
PROCEDURE DIVISION
00-00-MAIN-LINE.
PERFORM INICIALIZAR.
PERFORM PROCESSAR.
PERFORM FINALIZAR.
00-99-FIM. EXIT.
STOP RUN.
24
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
5. COMANDOS ARITMÉTICOS
As instruções para efetuar cálculos aritméticos em Cobol são: ADD(somar),
SUBTRACT(subtrair), MULTIPLY(multiplicar), DIVIDE(dividir) e
COMPUTE(calcular).
Opção ROUNDED
Para obter resultados arredondados, a opção ROUNDED pode ser
especificada em qualquer instrução aritmética. Em todos os casos, ela
vem imediatamente após o nome de dados resultante. O Cobol faz um
arredondamento clássico para o resultado da instrução aritmética
(valores menores que 5 são truncados, e os maiores são arredondados
para cima). Exemplo: ADD WS-VALOR1 TO WS-VALOR2 ROUNDED
ADD
Acumula dois ou mais operandos numéricos e armazena resultados.
Formato:
ADD { identificador-1 ... literal-1 ...} TO | GIVING
{ identificador-de-resultado ... }
Regras:
1. Todos os literais e campos que são parte da adição devem ser
numéricos. Após a palavra GIVING, contudo, o campo pode ser um
item de relatório.
2. O campo identificador-de-resultado, após TO ou GIVING, deve ser um
nome de dados, e não um literal.
3. Pelo menos dois operandos deverão anteceder a palavra GIVING.
25
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Exemplos:
ADD WS-VALOR TO WS-AC-TOTAL.
• Efetua: WS-AC-TOTAL = WS-AC-TOTAL + WS-VALOR.
ADD WS-AC-TOTAL1,
WS-AC-TOTAL2,
WS-AC-TOTAL3 TO WS-AC-TOTGERAL.
• Efetua: WS-AC-TOTGERAL = WS-AC-TOTGERAL +
WS-AC-TOTAL1 + WS-AC-TOTAL2 + WS-AC-TOTAL3.
SUBTRACT
Subtrai um ou mais operandos numéricos e armazena resultados.
Formato 1:
SUBTRACT { identificador-1 ... literal-1 ...}
FROM identificador-de-resultado …
Formato 2:
SUBTRACT { identificador-1 ... literal-1 ...}
FROM identificador-2 literal-2
GIVING identificador-de-resultado ...
Regras:
1. Observe a colocação das reticências (...) no Formato 1. O primeiro
conjunto depois do identificador-1 significa que dois ou mais
operandos podem ser subtraídos do identificador-2. Além disso, os
operandos podem ser subtraídos do identificador-de-resultado-1, do
identificador-resultado-2, e assim por diante.
2. Com o Formato 2, pode vir qualquer número ou identificadores
imediatamente após a palavra SUBTRACT ou a palavra GIVING, mas
depois da palavra FROM é permitido um único identificador ou literal.
3. Todos os literais e campos que são parte da instrução SUBTRACT
devem ser numéricos. Depois da palavra GIVING, contudo, o campo
pode ser um item de relatório.
4. O campo identificador-de-resultado, após FROM ou GIVING, deve ser
um nome de dados, e não um literal.
26
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Exemplos:
SUBTRACT VL-CHEQUE FROM SALDO.
• Efetua: SALDO = SALDO – VL-CHEQUE.
DIVIDE
Efetua uma divisão, disponibilizando o quociente e, se indicado, o resto.
Formato 1:
DIVIDE {(divisor)identificador-1 literal-1} INTO
{(dividendo)identificador-2 literal-2}
GIVING identificador-de-resultado …
[ REMAINDER identificador-de-resto ]
Formato 2:
DIVIDE {(dividendo)identificador-1 literal-1} BY
{(divisor)identificador-2 literal-2}
GIVING identificador-de-resultado ...
[ REMAINDER identificador-de-resto ]
Regras:
1. Observar que GIVING é opcional com INTO, mas obrigatório com
BY.
2. No formato 1, quando a opção GIVING não é utilizada o resultado
da divisão é colocado dentro do indentificador logo após a palavra
INTO.
3. A opção REMAINDER é utilizada quando se faz necessário guardar
o resto da divisão em outro identificador.
Exemplos:
DIVIDE 2 INTO WS-NUMERO
• Efetua WS-NUMERO = WS-NUMERO / 2
DIVIDE WS-NUM BY 2
GIVING WS-RESULT
REMAINDER WS-RESTO
• Efetua WS-RESULT = WS-NUM / 2 (resto em WS-RESTO)
27
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
MULTIPLY
Efetua a multiplicação entre variáveis
Formato:
MULTIPLY {identificador-1 literal-1} BY
{identificador-2 literal-2}
GIVING identificador-de-resultado ...
[END-MULTIPLY] ]
Regras:
1. Observe a colocação das reticências (...). O resultado será
armazenado em todos os identificadores-de-resultado após
GIVING.
Exemplos:
MULTIPLY 2 BY VALOR ROUNDED
• Efetua VALOR = 2 * VALOR (com arredondamento)
COMPUTE
Com a instrução COMPUTE, as operações aritméticas podem ser combinadas
sem as restrições impostas para o campo receptor quando é usado ADD,
SUBTRACT, MULTIPLY e DIVIDE. Quando as operações aritméticas são
combinadas, a instrução compute é mais eficiente que as instruções
aritméticas escritas em serie.
Formato:
COMPUTE identificador-de-resultado [ROUNDED] =
Intrução-aritmética
[ [NOT] ON SIZE ERROR instrução-imperativa]
Regras:
1. A opção ROUNDED e ON SIZE ERROR segue a mesma regra
utilizada para expressões aritméticas.
2. Os símbolos que podem ser utilizados em uma instrução
COMPUTE, conforme sua ordem de prioridade de execução,
são:
( ) Parênteses
** Exponenciação
* Multiplicação
/ Divisão
+ Adição
- Subtração
3. O sinal de igual, assim como os símbolos aritméticos devem ser
precedidos e seguidos de um espaço. Assim, para calcular
B+C+D**2 e colocar o resultado em A, use a seguinte instrução:
28
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Exemplos:
COMPUTE WS-RESULT ROUDEND = (AA + BB) / CC
COMPUTE WS-RESULT = (((AA + BB) / CC) / DD) * (EE ** 2)
A fórmula A = B² + C²
ficará em Cobol da seguinte forma:
COMPUTE A = (B ** 2 + C ** 2) ** (0,5).
29
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
6. COMANDOS DE DECISÃO
IF
Efetua teste de condições especificadas, e efetua os desvios necessários de
acordo com o resultado.
• A base para identificar os pontos de desvio é o PONTO, o ELSE ou o END-
IF.
• PONTO e END-IF indicam o fim da especificação da instrução; as
instruções que estão após o PONTO e o END-IF, portanto, são
executadas tanto para os casos de condição satisfeita quanto para os
casos de condição não satisfeita.
Formato:
IF CONDIÇÃO
instruções (para condição verdadeira)
[ELSE
instruções (para condição não verdadeira)
END –IF]
CONDIÇÃO
Pode ser uma condição simples ou complexa. A Tabela de
operadores lógicos e relacionais abaixo, pode ser utilizada para
combinar a condição a ser testada.
Descrição Símbolo Em COBOL
Igual = EQUAL
Maior ou
NOT < NOT LESS
igual a
Menor ou
NOT > NOT GREATER
igual a
OPERADOR DESCRIÇÃO
"NÃO": Inverte o valor de um
operando. Se o operando é verdadeiro o
Not resultado será falso. Se o operando é
falso o resultado será verdadeiro.
"E": Se os dois operandos são
verdadeiros, o resultado será
And verdadeiro. Se um dos dois operandos é
falso, o resultado será falso.
"OU": Se os dois operandos são falsos,
o resultado será falso. Se um dos dois
Or operandos é verdadeiro, o resultado
será verdadeiro.
Categorias Símbolo Notação alternativa
30
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
INSTRUÇÕES
Podem ser uma das seguintes condições:
- Uma instrução imperativa
- Uma instrução condicional
- Uma instrução imperativa seguida pôr uma instrução condicional.
ELSE
Se a avaliação da condição for verdadeira, será executado a instrução
antes do ELSE. Se a avaliação testada for falsa, será executada a
instrução entre o ELSE e o END-IF.
IF sem ELSE
Se a avaliação da condição for verdadeira, será executada a instrução
entre o IF e o END-IF.
31
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
ELSE
IF WS-CAMPO7 EQUAL “H”
NEXT SENTENCE
ELSE
PERFORM 20-00-SITUAÇÃO3
END-IF
END-IF
END-IF
EVALUATE
Faz a comparação de uma variável contra os valores indicados, efetuando as
instruções correspondentes. A instrução EVALUATE é uma notação abreviada
para ninho de IF’S em série, que permite codificar a estrutura CASE, da
programação estruturada.
Formato:
EVALUATE variável
WHEN identificador-1 THRU identificador-2 …
Instrução-imperativa-1 …
[WHEN OTHER
instrução-imperativa-2]
END-EVALUATE
Exemplo:
EVALUATE SIGLA-UF
WHEN 'SP' DISPLAY 'SÃO PAULO'
WHEN 'PR' DISPLAY 'PARANA'
WHEN 'SC' DISPLAY 'SANTA CATARINA'
WHEN 'RS' DISPLAY 'RIO GRANDE DO SUL'
WHEN OTHER DISPLAY
'OUTRO ESTADO'
END-EVALUATE.
EVALUATE WS-SALDO
WHEN ZEROS THRU 10000
DISPLAY “CLIENTE COMUM”
WHEN 10001 THRU 20000
DISPLAY “CLIENTE ESPECIAL”
WHEN > 20000
DISPLAY “CLIENTE SUPER-ESPECIAL”
END-EVALUATE.
32
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
CONTINUE
A instrução CONTINUE permite que seja especificado um desvio de um bloco
nulo. Esta instrução indica que nenhuma instrução executável condicional ou
imperativa pode ser usada.
Formato:
CONTINUE
Exemplo:
IF A > B
CONTINUE
ELSE
DISPLAY ‘A MENOR OU = B’
END-IF.
DISPLAY “COMPARAÇÃO EFETUADA”.
NEXT SENTENCE
Efetua um desvio para a próxima sentença (o início dela é identificado pelo
próximo ponto ou END-comando )
Formato:
NEXT SENTENCE
Exemplos:
IF A = B
NEXT SENTENCE
ELSE
DISPLAY ‘A DIFERENTE B’
END-IF.
DISPLAY “COMPARAÇÃO EFETUADA”.
33
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Formato:
SELECT nome-arquivo-lógico ASSIGN TO nome-arquivo-fisico
ORGANIZATION IS tipo-de-organização
ACCESS MODE IS tipo-de-acesso
[FILE STATUS IS identificador-1]
Regras:
• Nome-arquivo-lógico: Nome que será tratado internamente
pelo progrrama.
• Nome-arquivo-fisico: Deve especificar o nome do arquivo que
será grafado fisicamente no sistema operacional. No caso de
programação Mainframe, deve-se usar a mesma palavra que será
empregada no JCL (comandos de execução do programa), para
especificar o arquivo quando o programa for executado.
• ORGANIZATION:
LINE-SEQUENTIAL: Arquivo do tipo texto sequencial
• ACCESS MODE:
SEQUENTIAL: O arquivo será gravado e lido sequencialmente
34
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Exemplo:
No exemplo abaixo mostramos uma ENVIRONMENT DIVISION
de um programa que irá acessar um arquivo CLIENTES.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CLIENTES ASSIGN TO DA-S-CLIENTES
ORGANIZATION IS LINE-SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS WS-STATUS.
*
Neste exemplo escolhemos como nome-arquivo-lógico
dentro da instrução SELECT a palavra CLIENTES. O
programador pode usar qualquer palavra com até 30
caracteres para definir este nome, mas uma vez definido um
nome-arquivo-lógico na instrução SELECT, deverá usar
sempre este nome no programa quando se referir a este
arquivo.
STATUS SIGNIFICADO
'00' Comando realizado com sucesso
'10' Fim de arquivo
'34' Leitura em arquivo que já foi lido até o Final
'35' Open em arquivo que não existe (Ver SELECT ASSIGN TO ....)
'39' Conflito de atribu.tos (tamanho da FD x tamanho fisico do
arquivo
'41' Open em Arquivo já aberto
'42' Close em arquivo já fechado
'46' Gravação em Arquivo que já está sem espaço para gravar
(normalmente é loop)
'47' Read em arquivo não aberto com INPUT, IO ou EXTEND
'48' Write em arquivo não aberto com OUTPUT ou IO
'9x' Permissão / acesso ao arquivo não ok
Depende da letra/número mostrado no x
35
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
FD (FILE DESCRIPTION)
FD nome-do-arquivo
LABEL RECORD [STANDARD | OMITTED]
BLOCK CONTAIS O RECORDS
RECORDING MODE IS F
RECORD CONTAIS n CHARACTERS
DATA-RECORD IS nome-registro-do-arquivo.
01 nome-do-registro. ...
[03 nome-de-campo ...]
Regras:
1. As clausulas RECORDING MODE, RECORD CONTAINS e DATA-
RECORD são todas opcionais, e servem só como documentação.
2. A clausula LABEL RECORD com a opção STANDARD é utilizada
para a definição de arquivo SEQUENCIAL. A opção OMITTED
deve ser utilizada em arquivo para RELATÓRIOS.
3. É necessário observar com atenção o uso correto do
ponto final na FILE SECTION, como está demonstrado no
exemplo abaixo.
Exemplo:
O arquivo CLIENTES definido na INPUT-OUTPUT SECTION seria
detalhado aqui como:
DATA DIVISION.
FILE SECTION.
FD CLIENTES
RECORDING MODE IS F
RECORD CONTAINS 80 CHARACTERS.
01 REG-CLIENTES.
03 COD-CLIENTE PIC 9(8).
03 NOME-CLIENTE PIC X(20).
03 ENDER-CLIENTE PIC X(40).
03 VALOR-CLIENTE PIC 9(10)V99.
36
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PROCEDURE DIVISION
OPEN
Todo arquivo antes de ser manipulado deve ter seu acesso aberto pelo
comando OPEN. Este comando abre o contato com o dispositivo físico do
arquivo e reserva, na memória (WORKING-STORAGE SECTION), áreas
necessárias para a troca de dados entre o computador e o dispositivo
externo. Indica quais arquivos serão de entrada e quais serão de saída.
Formato:
OPEN [INPUT | OUTPUT | EXTEND] Nome-arquivo1 ...
Regras:
1. INPUT: Permite abrir o arquivo apenas para operações de leitura.
2. OUTPUT: Permite abrir o arquivo para operações de gravação /
impressão. Esta operação pode ser especificada quando o arquivo
estiver sendo criado. Esta opção não permite comandos de leitura no
arquivo.
3. EXTEND: Permite abrir um arquivo para operações de OUTPUT. Esta
opção deve ser utilizada apenas para arquivo LINE-SEQUENTIAL.
4. NOME-Arquivo1 ... : Nome lógico do(s) arquivo(s) definido(s) na
clausula SELECT e na FD-File Description.
Exemplos:
OPEN INPUT CADAGENCIA.
OPEN I-O CADBANCOS, CADFILIAIS.
READ
Para acesso seqüencial, a instrução READ obtém o próximo registro lógico de
um arquivo disponível ao programa objeto.
Para acesso RANDOMICO, a instrução READ obtém um registro especificado
de um arquivo de acesso direto disponível ao programa objeto. Quando a
instrução READ for executada, o arquivo associado deve estar aberto no
modo INPUT ou I-O
Regras:
1. INTO: O registro corrente é movido de uma área de INPUT para
nome-area-working, de acordo com as regras da instrução MOVE.
2. AT END: Se a condição AT END for especificada, a instrução-
imperativa do após o AT END será executada.
37
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
...
PROCEDURE DIVISION.
...
LER-ARQ-SEQENT.
READ SEQENT01 INTO WS-REGISTRO-SEQENT01
AT END MOVE “N” TO WS-FIM
END-READ.
WRITE
A instrução WRITE regrava logicamente um dado registro num arquivo de
acesso direto.
Formato:
WRITE nome-de-registro-1 [FROM identificador-1].
Regras:
1. O arquivo de acesso direto associado à instrução WRITE deve ser
aberto no modo OUTPUT ou EXTEND.
Exemplo:
WRITE REGISTRO-ARQUIVO FROM REGISTRO-AUXILIAR.
CLOSE
Efetua o fechamento de arquivos. A boa prática de programação é fechar
todos os arquivos abertos através do comando OPEN
Formato:
CLOSE nome-de-arquivo ...
Exemplos:
CLOSE ARQBANCO.
CLOSE ARQAGENCIA.
CLOSE ARQBANCO, ARQAGENCIA.
CLOSE ARQBANCO
ARQAGENCIA.
38
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Macro-Fluxo:
CADCLI MOVCLI
(1) (N)
ACAENNnn
CADCLIN
LAYOUTS:
01 WS-REGISTRO-CADCLI.
03 CHAVE-CADCLI.
05 AGENCIA-CADCLI PIC 9(10).
05 NUM-CONTA-CADCLI PIC 9(10).
03 NOME-CADCLI PIC X(40).
03 SALDO-CADCLI PIC 9(11)V99.
03 FILLER PIC X(07).
01 WS-REGISTRO-MOVCLI.
03 CHAVE-MOVCLI.
05 AGENCIA-MOVCLI PIC 9(10).
05 NUM-CONTA-MOVCLI PIC 9(10).
03 NOME-MOVCLI PIC X(40).
03 VALOR-DEB-MOVCLI PIC 9(08)V99.
03 VALOR-CRE-MOVCLI PIC 9(08)V99.
01 WS-REGISTRO-CADCLIN.
03 CHAVE-CADCLIN.
05 AGENCIA-CADCLIN PIC 9(10).
05 NUM-CONTA-CADCLIN PIC 9(10).
03 NOME-CADCLIN PIC X(40).
03 SALDO-CADCLIN PIC S9(11)V99.
03 FILLER PIC X(07).
39
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Se CHAVE-CADCLI = CHAVE-MOVCLI
Atualizar CADCLIN (com dados do CADCLI e MOVCLI)
Obs.: Calcular o novo saldo do cliente com todos os registros do
movimento pertencente ao mesmo cliente
Se VALOR-DEB-MOVCLI NOT = ZEROS
SALDO-CADCLIN = SALDO-CADCLI - VALOR-DEB-MOVCLI
SENAO
SALDO-CADCLIN = SALDO-CADCLI + VALOR-CRE-MOVCLI
GRAVAR CADCLIN
LER PROXIMO CADCLI
LER PROCIMO MOVCLI
IDENTIFICATION DIVISION.
PROGRAM-ID. ACAENNnn.
AUTHOR. EDINELSON PACCI.
******************************************************
* PROGRAMA DE BALANCE-LINE. *
******************************************************
******************************************************
* ENVIRONMENT DIVISION *
******************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CADCLI ASSIGN TO SYSDA-CADCLI
FILE STATUS IS WS-STATUS.
40
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
**********************************************************
* DATA DIVISION *
**********************************************************
DATA DIVISION.
***************************************
* FILE DESCRIPTION: CADCLI *
***************************************
FILE SECTION.
FD CADCLI
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS.
***************************************
* FILE DESCRIPTION: CADCLIN *
***************************************
FD CADCLIN
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS.
***************************************
* FILE DESCRIPTION: MOVCLI *
***************************************
FD MOVCLI
LABEL RECORD STANDARD
BLOCK CONTAINS 0 RECORDS.
**********************************************************
* WORKING-STORAGE SECTION *
**********************************************************
WORKING-STORAGE SECTION.
77 WS-STATUS PIC X(02).
**********************************************************
* BOOKS DE ARQUIVOS *
**********************************************************
01 WS-REGISTRO-CADCLI.
03 CHAVE-CADCLI.
05 AGENCIA-CADCLI PIC 9(10).
05 NUM-CONTA-CADCLI PIC 9(10).
03 NOME-CADCLI PIC X(40).
03 SALDO-CADCLI PIC 9(11)V99.
03 FILLER PIC X(07).
01 WS-REGISTRO-MOVCLI.
03 CHAVE-MOVCLI.
05 AGENCIA-MOVCLI PIC 9(10).
05 NUM-CONTA-MOVCLI PIC 9(10).
03 NOME-MOVCLI PIC X(40).
03 VALOR-DEB-MOVCLI PIC 9(08)V99.
03 VALOR-CRE-MOVCLI PIC 9(08)V99.
41
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
01 WS-REGISTRO-CADCLIN.
03 CHAVE-CADCLIN.
05 AGENCIA-CADCLIN PIC 9(10).
05 NUM-CONTA-CADCLIN PIC 9(10).
03 NOME-CADCLIN PIC X(40).
03 SALDO-CADCLIN PIC S9(11)V99.
03 FILLER PIC X(07).
**********************************************************
* PROCEDURE DIVISION *
**********************************************************
PROCEDURE DIVISION.
********************* ROTINA PRINCIPAL *******************
MAIN-LINE SECTION.
ROTINA-PRINCIPAL.
PERFORM INICIALIZAR.
PERFORM PROCESSAR UNTIL CHAVE-CADCLI = ALL "9" AND
CHAVE-MOVCLI = ALL "9".
PERFORM FINALIZAR.
ROTINA-PRINCIPAL-FIM.
STOP RUN.
42
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PERFORM LER-CADCLI.
PERFORM LER-MOVCLI.
FIM-INICIALIZAR. EXIT.
FIM-LER-CADCLI. EXIT.
FIM-LER-MOVCLI. EXIT.
FIM-COPIAR. EXIT.
FIM-ATUALIZAR. EXIT.
************ INCLUIR NOVO CLIENTE EM CADCLIN ****************
INCLUIR-CADCLIN SECTION.
MOVE CHAVE-MOVCLI TO CHAVE-CADCLIN.
MOVE NOME-MOVCLI TO NOME-CADCLIN.
MOVE VALOR-CRE-MOVCLI TO SALDO-CADCLIN.
WRITE REGISTRO-CADCLIN FROM WS-REGISTRO-CADCLIN.
FIM-INCLUIR. EXIT.
FIM-FINALIZAR. EXIT.
******************** ABENDAR PROGRAMA ***********************
ABENDAR-PROGRAMA.
DISPLAY ”ERRO DE ABEND DO PROGRAMA”.
STOP-RUN.
43
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
COPY
O comando COPY é usado para copiar trechos de programa fonte que estão
armazenados em bibliotecas (BOOKS) para dentro dos programas Cobol.
Esses trechos de programa podem conter descrições de registros de
arquivos, rotinas padronizadas que devem ser repetidas em muitos
programas etc. No local conveniente do programa onde deverá ser copiado o
BOOK basta codificar:
Formato:
COPY nome-do-book.
Importante:
O comando COPY pode ser utilizado em qualquer divisão do
COBOL.
Formato:
CALL nome-programa [USING parametro-1
[parametro-2 ... parametro-n] ]
Exemplos:
*PROGRAMA CHAMADOR ******************************
ID DIVISION.
PROGRAM-ID. “PGM001”.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WRK-PROGNAME PIC X(07).
01 WRK-AREA1.
05 WRK-PGTO PIC S9(05)V99
05 WRK-VLR-HORA PIC S9(01)V99
05 WRK-HORAS PIC S9(02)V99
01 WRK-AREA-2 PIC X(01).
PROCEDURE DIVISION.
MOVE ‘SUBPGM1’ TO WRK-PROGNAME
CALL 'WRK-PROGNAME USING WRK-AREA-1 WRK-AREA-2.
CANCEL WRK-PROGNAME.
...
44
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
PROGRAM-ID. “SUBPGM1”.
DATA DIVISION.
LINKAGE SECTION.
01 WRK-AREA1.
05 WRK-PGTO PIC S9(05)V99
05 WRK-VLR-HORA PIC S9(01)V99
05 WRK-HORAS PIC S9(02)V99
01 WRK-AREA-2 PIC X(01).
PROCEDURE DIVISION USING WRK-AREA1 WRK-AREA2.
ROTINA-PRINCIPAL.
IF WRK-PGTO > 1000,00
PERFORM PROCESSAR.
...
GOBACK.
CANCEL
A instrução CANCEL libera a área de memória ocupada por um sub-
programa chamado.
Formato:
CANCEL nome-programa
Exemplo:
CALL ‘SUBPGM1’ USING WRK-AREA-1 WRK-AREA-2.
CANCEL ‘SUBPGM1’.
EXIT PROGRAM
A instrução EXIT PROGRAM especifica o final de um programa chamado e
retorna o controle ao programa chamador.
• Se o fluxo de execução do programa chamado atingir a instrução EXIT
PROGRAM enquanto estiver operando sob o controle de uma instrução
CALL o controle retornara ao programa chamador na próxima instrução
após o comando CALL.
• Se o fluxo de execução atingir a instrução EXIT PROGRAM e não estiver
sob o controle de uma instrução CALL, a instrução EXIT PROGRAM será
ignorada, sendo executada a próxima instrução após a instrução EXIT
PROGRAM.
Formato:
EXIT PROGRAM.
Exemplo:
...
99-99-EXIT.
EXIT PROGRAM.
GOBACK
Finaliza o programa e volta para o programa chamador. Tem a mesma
funcionalidade do EXIT PROGRAM.
Formato:
45
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
GOBACK
Exemplo:
...
PERFORM PROCESSAR THRU PROCESSAR-FIM.
GOBACK
...
STRING
A instrução STRING concatena o conteúdo de vários campos em um campo
receptor. Seu formato é:
Formato:
STRING identificador-1 ... literal-1 ... DELIMITED BY SIZE
INTO identificador-2
Exemplo:
STRING “QUANTIDADE RE REGISTROS PROCESSADOS: “ WS-LIDOS
DELIMITED BY SIZE INTO WS-MENSAGEM.
TABELAS INTERNAS
Alguns algoritmos mais avançados exigem a definição de uma mesma
variável várias vezes, aumentando o trabalho de codificação do programa
correspondente tanto na DATA DIVISION, como também as instruções
resultantes na PROCEDURE DIVISION. Por exemplo, em um algoritmo para
acumular as vendas do ano separadas por mês, precisamos definir 12
campos de total na DATA DIVISION, e a PROCEDURE DIVISION deverá ter
12 testes do mês da venda para decidir em que total deve ser feito a soma.
Ex.:
DATA DIVISION.
...
03 TOTAL-01 PIC 9(8)V99.
03 TOTAL-02 PIC 9(8)V99.
...
03 TOTAL-12 PIC 9(8)V99.
PROCEDURE DIVISION.
…
IF MÊS = 01
ADD VENDAS TO TOTAL-01
ELSE
IF MÊS = 02
ADD VENDAS TO TOTAL-02
ELSE
...
IF MÊS = 12
ADD VENDAS TO TOTAL-12.
Clausula OCCURS
A linguagem Cobol possui um recurso para resolver este problema.
Na DATA DIVISION a variável será definida somente uma vez,
acompanhada da cláusula OCCURS que definirá quantas vezes a
variável deve ser repetida. A sintaxe da definição do item com
OCCURS é:
46
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
Formato:
NÍVEL identificador-1 PIC ____ OCCURS n TIMES.
Regras:
1. A cláusula OCCURS só pode ser usada em variáveis de nível 02 a 49.
2. Quando uma variável de uma tabela (definida com OCCURS) for usada
na PROCEDURE DIVISION, ela precisa ser acompanhada de um
indexador (subscrito) que definirá qual ocorrência da tabela está
sendo referido. Este subscrito deve estar dentro de parênteses e pode
ser um literal numérico ou uma variável numérica com valores
inteiros. Por ex: ADD VENDAS TO TOTAL-MENSAL(5).Neste caso a
soma esta sendo feita no quinto mês (Maio).
Exemplo:
A codificação do algoritmo do exemplo acima ficará reduzido agora a:
DATA DIVISION.
01 TOTAIS-GERAIS.
03 TOTAL-MENSAL PIC 9(8)V99 OCCURS 12 TIMES.
...
PROCEDURE DIVISION.
...
ADD VENDAS TO TOTAL-MENSAL (MES-VENDA).
NÍVEIS DE TABELAS
Em Cobol podemos definir um item de uma tabela como uma nova
tabela, e assim sucessivamente até um nível de 3 tabelas. Por
exemplo, para obter o total de vendas separado por estado, e em
cada estado por tipo de produto, e para cada produto por mês de
venda, montaremos a DATA DIVISION como abaixo:
DATA DIVISION.
01 TOTAIS-VENDA.
03 VENDAS-ESTADO OCCURS 27 TIMES.
05 VENDAS-PRODUTO OCCURS 5 TIMES.
07 VENDAS-MÊS PIC 9(8)V99 OCCURS 12 TIMES.
PROCEDURE DIVISION.
....
ADD VENDAS TO
VENDAS-MÊS (CD-ESTADO, CD-PRODUTO, MÊS-VENDA).
Importante:
Os indexadores dentro do parênteses devem estar na
mesma seqüência da definição das tabelas (mesma
hierarquia).
47
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
REDEFINES
A cláusula REDEFINES é usada quando alguma informação da DATA
DIVISION precisa ser definida em dois ou mais formatos diferentes. Por
exemplo, em um campo de data podemos ter o formato dia/mês/ano ou
ano/mês/dia:
PROCEDURE DIVISION.
ACEITAR-DATA-SISTEMA.
ACCEPT WS-DATA FROM DATE.
MOVE ANO-D TO ANO-INV.
MOVE Mês-D TO MÊS-INV.
MOVE DIA-D TO DIA-INV.
IF ANO-D > 50
MOVE 19 TO SEC-INV
ELSE
MOVE 20 TO SEC-INV.
FORMATOS BINÁRIOS
Quando usamos os formatos descritos nos parágrafos anteriores para
descrever variáveis na DATA DIVISION, o Cobol armazena cada caracter das
variáveis definidas em 1 byte da memória. Um byte é um conjunto de 8 bits.
O computador associa cada combinação de bits ligado/desligado destes 8
48
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
bits com uma letra (ou caracter) do nosso alfabeto. Assim, no caso do
mainframe IBM, que usa o padrão EBCDIC, podemos representar estes 2
exemplos:
Acontece porem que o computador não foi projetado para fazer cálculos com
este formato. Ele usa o valor binário puro dos bits para cálculos, onde cada
bit da direita para a esquerda tem o valor da potencia de 2 correspondente,
como no esquema:
Bits 8 7 6 5 4 3 2 1
Valor 128 64 32 16 8 4 2 1
CLÁUSULA USAGE
49
Apostila: LINGUAGEM PROGRAMAÇÃO COBOL
USAGE COMP.
Usado para especificar que a variável deve ter formato binário. Só é usado
para variáveis numéricas. A sintaxe para definir VAR como variável binária
é:
77 VAR PIC 9(6) USAGE COMP.
Ou
77 VAR PIC 9(6) COMP.
DE ATE BYTES
S9(1)COMP S9(4) COMP 2
S9(5)COMP S9(9) COMP 4
S9(10)COMP S9(18)COMP 8
USAGE COMP-3.
Neste formato usa-se grupos de 4 bits para representar 1 numero, e por isso
1 byte consegue armazenar 2 números.
Para calcular o tamanho fisico do campo deve-se utilizar a seguinte formula:
• Dividir o tamanho do Campo por 2
• Desprezar a casa decimal
• Soma 1 no resultado
Exemplo:
01 WS-SALDO-CONTA PIC S9(15)V99
17 / 2 = 8,5
8+1=9
O tamanho fisíco desse campo é 8 digitos
50