Escolar Documentos
Profissional Documentos
Cultura Documentos
COBOL II
INTRODUO
A natureza do COBOL:
a mais conhecidalinguagem para aplicaes comerciais em uso
atualmente.
COBOL uma sigla derivada de Common Business Oriented Language.
uma linguagem semelhante ao ingls.
As verses do COBOL segundo as American National Standards - ANS
so 1968, 1975 e 1985
Procedimentos para codificao e depurao de um programa em linguagem
COBOL:
obter as especificaes do analista
usar ferramentas de planejamento - fluxograma, pseudocdigo, diagramas
hierrquicos - para projeto do programa
codificar o programa
testar o programa usando tcnicas de depurao:
teste de mesa
correo de erros de sintaxe
execues manuais do programa
verificao dos erros de lgica aps a execuo do programa
documentar o programa
Tcnicas para aperfeioar o projeto de programas:
programao estruturada
denominada programao sem GO TO
os programas estruturados so subdivididos em pargrafos ou mdulos
Programao Top-Down:
Os mdulos ou procedimentos principais so codificados antes dos
secundrios
Anloga ao desenvolvimento de um esboo, antes de se escrever um
programa - a organizao e a estrutura so muito importantes; os detalhes
so introduzidos posteriormente.
As divises do COBOL
IDENTIFICATION DIVISION.
Identifica o programa para o sistema de computao
tambm pode fornecer alguma documentao
PROGRAM-ID a nica entrada obrigatria dentro da diviso.
ENVIRONMENT DIVISION.
Atribui um nome externo de arquivo a cada arquivo usado no programa e
especifica o dispositivo que o arquivo usar.
DATA DIVISION.
Define e descreve os formatos de todas as entradas, sadas e reas de
trabalho usadas pelo processamento
FILE SECTION.
Cada nome de arquivo definido na ENVIRONMENT DIVISION deve
ser descrito em um FD da DATA DIVISION.
Cada formato de registro dentro de cada arquivo definido como
uma entrada 01.
Os campos dentro de cada registro so descritos por meio de um
clusula PICTURE que especifica o tamanho e o tipo dos dados.
WORKING-STORAGE SECTION.
Define as reas de trabalho necessrias ao processamento.
PROCEDURE DIVISION.
subdividida em pargrafos ou mdulos.
Inclui todas as instrues que so executadas sequencialmente, mas um
PERFORM transfere o controle para outro pargrafo; aps um pargrafo
ser executado com um PERFORM, o controle retornar prxima
instruo, na sequncia, aps o PERFORM.
Mdulo principal ou pargrafo
As seguintes entradas so tpicas em um mdulo principal:
Os arquivos so designados como de ENTRADA (INPUT) ou SADA
(OUTPUT) e ativados em um comando OPEN.
Um READ inicial traz o primeiro registro para a memria
Um comando CLOSE desativa todos os arquivos
Um STOP RUN termina o processamento
Pargrafos de clculo ou processamento
Os pargrafos de clculo ou processamento so executados quando
um comando do mdulo principal indica PERFORM nome-dopargrafo
Um pargrafo de clculo ou processamento requerido para
processar cada registro de entrada e ler registros subsequentes.
H-MAIS-REGISTROS
PICTURE
PROCEDURE DIVISION.
100-MODULO-PRINC.
OPEN
INPUT ARQ-VENDAS
OUTPUT ARQ-IMPR.
READ
ARQ-VENDAS
AT END MOVE NAOTO H-MAIS-REGISTROS.
PERFORM 200-ROTINA-COMISSAO
UNTIL H-MAIS-REGISTRO = NAO.
CLOSE
ARQ-VENDAS
ARQ-IMPR.
STOP RUN.
200-ROTINA-COMISSAO.
MOVE SPACES TO REG-IMPR.
MOVE NOME-E TO NOME-S.
IF
ELSE
MULTIPLY .02 BY QTD-VENDAS-E
GIVING QTD-COMISSAO-S
WRITE ARQ-IMPR.
READ ARQ-VENDAS
AT END MOVE NAO TO H-MAIS-REGISTROS.
200-ROTINA-EXIT.
EXIT.
reas A e B
As posies de 8 a 72 de um programa COBOL padro contm
comandos do programa. Observe-se, contudo, que a coluna 8
batizada de A e a coluna 12, de B. Elas so conhecidas com reas.
Certas entradas devem comear na rea A e outras, na rea B.
Se uma entrada tem que ser codificada na rea A, ela pode comear
nas posies 8, 9, 10 ou 11. Geralmente, as entradas da rea A
comeam na posio 8. Se uma entrada tem que ser codificada na
rea B, ela pode comear em qualquer posio aps a 11, isto ,
pode comear na posio 12, 13, 14, etc. Observe-se que as regras
sobre margens especificam o ponto inicial das entradas. Uma palavra
que tem que comear na rea A pode estender-se para a rea B;
Exemplo:
AUTHOR, que nome de pargrafo na IDENTIFICATION DIVISION,
deve comear na rea A. Qualquer entrada que se refira a AUTHOR
deve vir logo aps na rea B, como se segue:
8
12
AUTHOR.
CARLOS JOSE.
Divises, sees e
pargrafos comeam na
rea A
Divises
Exemplos:
IDENTIFICATION DIVISION
ENVIRONMENT DIVISION
DATA DIVISION
PROCEDURE DIVISION
Sees
Exemplos:
FILE SECTION
WORKING-STORAGE
SECTION
Pargrafos
Exemplos:
PROGRAM-ID.
1000-ROT-CALCULO.
Comandos e Sentenas
8-11
12-72
73-80
USO
Nmeros
sequenciais
ou nmeros de pginas
e linhas (opcional)
EXPLICAO
no utilizadas
REGRAS DE CODIFICAO
Nomes de divises e sees
Comeam na rea A
Terminam com um ponto.
Devem aparecer em uma linha sem outras entradas.
Nomes de pargrafos
Comeam na rea A
Terminam com um ponto, que de ser sempre seguido de pelo menos um
espao em branco.
Podem aparecer sozinhos na linha ou com outras entradas.
Sentenas
Comeam na rea B.
Terminam com um ponto, que deve ser sempre seguido de pelo menos um
espao em branco.
Podem aparecer sozinhos na linha ou com outras entradas.
Uma sentena consiste em um comando ou uma srie de comandos.
Linhas em branco, bem como comentrios, so permitidas em qualquer ponto
de um programa COBOL.
REGRAS PARA INTERPRETAR OS FORMATOS DE INSTRUES
As palavras escritas em maisculas so palavras reservadas COBOL, que
tem um significado especial para o compilador.
As palavras em minsculo representam entradas definidas pelo usurio.
As palavras sublinhadas so obrigatrias no pargrafo.
Se for especificado algum ponto no pargrafo ele obrigatrio.
Colchetes [ ] significam que a clusula ou pargrafo opcional.
O uso de reticencias (...) significam que podem ser incluidas mais entradas
do mesmo tipo, se desejado.
Tem de 1 a 30 caracteres
Contm apenas letras, dgitos e hfens.
No contm espaos em branco.
Contm pelo menos um caractere alfabtico.
No usam palavras reservadas do COBOL.
Usam nomes significativos:
NOME-DO-CLIENTE melhor que A1.
1000-ROTINA-DE-ERRO melhor que R1.
DATA DIVISION.
FILE SECTION.
Podem ser usadas vrias clusulas para descrever um arquivo. Elas
vem aps o nome-do-arquivo, e no haver ponto enquanto no for
especificada a ltima clusula. Exemplos:
FD
ARQ-FOLHA
LABEL RECORDS ARE OMITTED
RECORDS CONTAINS 80 CHARACTERS
FD
ARQ-TRANSACOES
LABEL RECORDS ARE STANDARD
RECORD CONTAINS 50 CHARACTERS
BLOCK CONTAINS 20 RECORDS.
Arquivo sequencial
FD
nome-do-arquivo
BLOCK
CONTAINS inteiro-1 TO inteiro-2 RECORDS
RECORD inteiro-3 CHARACTERS
[ LABEL RECORD [ STANDARD | OMITTED ] ]
[ FILE STATUS IS status-arquivo ]
Arquivo relativo
FD
nome-do-arquivo
BLOCK
CONTAINS inteiro-1 TO inteiro-2 RECORDS
RECORD inteiro-3 CHARACTERS
[ LABEL RECORD [ STANDARD | OMITTED ] ]
[ FILE STATUS IS status-arquivo ]
Exemplo:
Registro de funcionrios (entrada)
NOME
01
SALARIO
REG-FUNC-E.
05
NOME-E
05
SALARIO-E
05
CARGO-E
05
DATA-E.
10
ANO-E
10
MS-E
10
DIA-E
CARGO
PIC
PIC
PIC
X(30).
9(07)V99.
X(10).
PIC
PIC
PIC
9999.
99.
99.
ADMISSAO
Contedo do campos
Literal numrica
at 18 digitos
pode utilizar o sinal + ou - no incio do nmero. Ex. +123.
Permite o ponto decimal. Ex. 15.8.
Pode ser usada na PROCEDURE DIVISION.
Literal no numrica
Deve ser escrita entre apstrofos. Exemplo: JANEIRO.
At 160 caracteres de tamanho.
Permite o uso de qualquer caracter EBCDIC. Inclusive espao e aspas.
Constante figurativa
ZEROS, SPACES, LOW-VALUE e HIGH-VALUE.
Exemplo.
01
LINHAPIC
USAGE
DISPLAY
DISPLAY
COMPUTACIONAL (COMP)
ou BINARY
COMPUTACIONAL-3 (COMP-3)
ou PACKED-DECIMAL
CONTUDO
ALFANUMERICO
ZONADO
BINRIO
COMPACTADO
WORKING-STORAGE SECTION.
Regras de codificao:
PROCEDURE DIVISION.
Codificar na rea A terminando com ponto.
dividida em pargrafos. Cada pargrafo um mdulo ou rotina,
independente, que inclui uma srie de intrues destinadas a executar um
conjunto de operaes.
Os nomes dos pargrafos devem ser codificados na rea A, podem ser
formados s por digitos e, devem ser nicos no programa. Devem ser
informativos.
As instrues e comandos na PROCEDURE DIVISION devem comear
na rea B.
COMANDO OPEN
Permite o acesso a arquivos de entrada e sada em um programa e tem o
seguinte formato:
OPEN INPUT ou OUTPUT
nome-arquivo1...
COMANDO READ
Transmite dados do dispositivo de entrada, designado na ENVIRONMENT
DIVISION para uma rea de memria definida na FILE SECTION ou na
WORKING-STORAGE SECTION ( READ INTO)
READ
nome-arquivo1
AT END comando1
[ NOT AT END ] comado 2
[ END-READ ]
nome-do-arquivo especificado no comando READ o mesmo utilizado no
SELECT, na FD e no OPEN.
Ao executar o comando READ aps a leitura do ltimo registro a
sequncia de execuo desviada para o comando seguinte clusula AT
END.
COMANDO PERFORM ... UNTIL (estruturando o programa)
PERFORM nome-procedimento-1
UNTIL condio-1
[ END-PERFORM ]
Transfere o controle para o procedimento ou pargrafo especificado.
Repete a execuo at a condio definida na condio-1 for satisfeita.
Exemplo:
PERFORM 200-ROT-CALC
UNTIL H-MAIS-REGISTROS = NO
Podemos utilizar o PERFORM em linha e o terminador de escopo
END-PERFORM.
Exemplo:
PERFORM UNTIL W-CHAVE = 99
MOVE CAMPO TO REG-SAIDA
WRITE REG-SAIDA
READ ARQ-ENT AT END MOVE 99 TO W-CHAVE
END-PERFORM.
TIMES
condio-1
COMANDO CLOSE
CLOSE nome-do-arquivo-1 ...
Libera os arquivos que foram adquiridos em tempo de OPEN.
COMANDO STOP RUN
Indica o final da execuo do programa para o Sistema Operacional,
encerrando operaes pendentes e liberando todas as reas utilizadas.
Todo programa deve conter um comando STOP RUN.
COMANDO MOVE
MOVE identificador-1 TO identificador-2
Move o conteudo do campo ou constante indicada em identficador-1 para
o campos indicado em identificador-2.
Cuidados a serem tomados com o comando MOVE
1.
2.
3.
4.
5.
6.
7.
8.
nome-registro-1
Exemplo: WRITE
REGISTRO-S.
COMANDOS ARITIMTICOS
ADD identificador-1
literal-1
TO
identificador-2
ADD identificador-1
literal-1
GIVING
identificador-2
ADD identificador-1
TO
identificador-2
literal-1
GIVING identificador-3
SUBTRACT identificador-1
literal-1
FROM identificador-2
SUBTRACT identificador-1
FROM identificador-2
literal-1
GIVING identificador-3
MUTIPLY
identificador-1
literal-1
BY
identificador-2
MUTIPLY
identificador-1
BY
identificador-2
literal-1
GIVING identificador-3
DIVIDE
identificador-1
literal-1
BY
DIVIDE
identificador-1
literal-1
INTO identificador-2
DIVIDE
identificador-1
INTO identificador-2
literal-1
GIVING identificador-3
[ REMAINDER ] identificador-4
[ ROUNDED ]
identificador-2
W-ACUM.
50 FROM SALDO-R-ENTRADA
COMANDO COMPUTE
Usa smbolos aritmticos em vez de verbos, oferecendo um modo mais
compacto para a execuo de operaes aritmticas.
COMPUTE resultado = expresso aritmtica
Smbolos permitidos:
+
*
/
**
adio
subtao
multiplica
o
diviso
exponencia
o
(identificador-2
literal 1
QUADRO RESUMO
PICTURE
campo emissor
CONTUDO
9(6)
9999V99
9(5)V99
S9(6)
S9(6)
S9999V99
S999
9(6)
S99
999
S99V99
123456
0012v99
00001v23
012345
123456 (+)
1234v56 (+)
123
123456
05 (-)
123
12v34 (-)
PICTURE
$ZZZ.ZZZ,99
$Z.ZZZ,99
$**.***,99
+Z(6)
-Z(6)
+Z(4).99
ZZZ99BBBB9999
$ZZ.99DB
999000
$ZZ.99CR
tem de relatrio
RESULTADO
EDITADO
$123.456,00
$ 12,34
$*****1,23
- 12345
123456
+ 1234.56
12312 3456
$ 5,00DB
123000
$12.34CR
WS-DATA.
05 ANO-PROC
05 MES-PROC
05 DIA-PROC
PIC 99.
PIC 99.
PIC 99.
PROCEDURE DIVISION.
1000-INICIO.
ACCEPT WS-DATA FROM DATE.
COMANDO INITIALIZE
INITIALIZE item-de-grupo.
NOME DE CONDIES
Nome de condio uma palavra definida na DATA DIVISION como nvel
88, que indica um possvel valor para o campo.
Exemplo:
05
EST-CIVIL
PIC X.
88
SOLTEIRO VALUE S.
88
CASADO
VALUE C.
PROCEDURE DIVISION.
IF SOLTEIRO
CONTINUE
ELSE
MOVE CASADO TO OBS-LDET
END-IF.
identifcador-1
identificador-2
TALLYING
FOR
ALL
identificador-3
LEADING
literal-1
CHARACTERS
BEFORE
AFTER
INITIAL
identificador-4
literal-2
Formato 2:
INSPECT
identifcador-1
REPLACING
CHARACTERS
ALL
LEADING
FIRST
BY
identificador-2
literal-1
identificador-3
identificador-4
literal-2
BEFORE
INITIAL
AFTER
literal-3
identificador-1 ....
literal-1
DELIMITED BY
identificador-2
literal-2
SIZE
INTO identificador-3
END-STRING
Exemplo:
01
01
ENDERECO3
REG-E.
05
CIDADE
05
ESTADO
05
CEP
PIC
PIC
PIC
PIC
BRASILIA
DF01000
X(30).
X(20).
X(02).
9(05).
ENDERECO3
BRASILIA,DF,01000
COMANDO UNSTRING
Usado para converter os dados digitados em uma forma mais apropriada
para o armazenamento . Por exemplo para retirar separadores de
textos.variveis.
UNSTRING identificador-1
[ DELIMITED BY [ ALL ]
OR | ALL
identificador-2
literal-1
identificador-3
literal-2
Exemplo:
EVALUATE ESTADO-CIVIL
WHEN 1
PERFORM ROT-SOLTEIRO
WHEN 2
PERFORM ROT-CASADO
WHEN 3
PERFORM ROT-DESQUITADO
WHEN OTHER
PERFORM ROT-ERRO
END-EVALUATE
REG-TEMP.
05
TEMPERATURA
OCCURS 24 TIMES
IMPOSTO.
05
GRUPO-X OCCURS
10 CIDADE
PIC
10 ALIQ-IMP
PIC
15 TIMES.
X(06).
V999.
PIC 9(3).
SUBSCRITOS
Acesso as ocorrncias dos campos se d atravs de um subscrito.
Regras de codificao para subscritos: deve vir entre parenteses, sem
espaos dentro dos parenteses.
Exemplo 1:
ADD TEMPERATURA (2, 2) TO TOTAL.
Exemplo 2:
WORKING-STORAGE SECTION
01
AREAS-TRAB.
05
SUB PIC
99
VALUE
01.
PROCEDURE DIVISON.
MOVE TEMPERATURA (SUB) TO TEMP-S.
Subscrito pode ser um nome de dado com valor numrico inteiro, ou uma
literal numrica com um valor inteiro. O subscrito pode tambm ter um
valor relativo, isto um nome de dado ou inteiro. Esse tipo chamado de
subscrito relativo.
TAB-MESES.
05
LISTAMES PIC X(36) VALUE
JANFEVMARABRMAIJUNJULAGOSETOUTNOVDEZ.
05
MS REDEFINES LISTAMES
OCCURS 12 TIMES PIC X(3).
01
SUB
PIC
99 VALUE 0.
PROCEDURE DIVISION.
PERFORM IMPRIME
VARYING SUB FROM 1 BY 1 UNTIL SUB > 12.
IMPRIME.
MOVE MS (SUB) TO MS-S.
WRITE REG-IMPR FROM LINHA-S
AFTER ADVANCING 2 LINES.
Tambm podemos utilizar a clusula OCCURS para:
1. indicar a ocorrncia repetida de campos de entrada ou de sada dentro
da FILE SECTION.
2. Armazenar arrays ou reas de total dentro da WORKING-STORAGE.
COMANDO SEARCH
SEARCH identificador-1
[ ATE END comando-imperativo-1 ]
WHEN condio-1 comando-imperativo-2
NEXT SENTENCE
[ END-SEARCH ]
Exemplo:
SEARCH ITENS-TAB
AT END MOVE 0 TO DT-IMP
WHEN CEP-E = WS-CEP (X1)
COMPUTE ....
MOVE ...
WRITE ...
END-SEARCH.
A opo AT END no SEARCH :
A clusula AT END especifica o que deve ser feito quando a tabela for
pesquisada inteiramente sem que nenhuma correspondncia seja
encontrada.
A clusula INDEXED BY e o comando SEARCH
Quando se usa o comando SEARCH, as entradas das tabelas devem
ser especificadas com um ndice em vez de um subscrito. O ndice
usado exatamente como um subscrito, mas definido juntamente com
as entradas da tabela, como parte da descrio OCCURS.
Exemplo:
01
TAB-IMP.
05
ITENS-TAB OCCURS
1000 TIMES INDEXED BY X1.
10 WS-CEP
PIC 9(5).
10 WS-IMP PIC 9 V999.
COMANDO SET
SET
nome-indice TO inteiro
UP BY
DOWN BY
Exemplos:
SET X1 TO 3.
move 3 em X1.
SET X2 UP BY 1.
soma 1 em X2.
SET X5 DOWN BY 1. subtrai 1 de X5.
OBS.: Embora o SEARCH incremente automaticamente o ndice,
devemos inicializa-lo antes de sua utilizao.
comando-imperativo-2
NEXT SENTENCE
[ END-SEARCH ]
OBSERVAES:
1. s pode testar uma condio de igual.
2. se usarmos uma condio composta: (a) cada parte s pode
testar uma condio de igual e (b) s so permitidos ANDs.
3. s pode ser usada uma clusula WHEN.
Exemplo:
01
CLASSESS.
05 SRIES OCCURS
10
10 ALUNOS OCCURS 5
TIMES.
TIMES
PIC 9(3).
utilizando...
MOVE ALUNOS (3,4) TO CAMPO2.
move o total de alunos da quarta classe da terceira-srie.
OBSERVAES:
OCCURS em mltiplos nveis:
Podem ser usados para um array ou uma tabela
O nome de dado de mais baixo nvel do OCCURS ou um tem
subordinado a ele usado para acessar um entrada no array ou
tabela.
Se usarmos SEARCH para acessar uma tabela de mltiplos nveis,
devemos usar INDEXED BY para todos os nveis.
O identificador usado com o comando SEARCH deve ser o de mais
baixo nvel de OCCURS e, somente este ndice ser incrementado
pelo SEARCH.
COMANDO DISPLAY
Envia as informaes definidas em identificador-1 ou literal-1 para o
dispositivo especificado.
DISPLAY identificador-1[ UPON
literal-1
CONSOLE ]
[ SYSOUT ]
[ nome-1 ]
Exemplo:
DISPLAY MSG-ERRO UPON CONSOLE.
DISPLAY PGM10B - FINAL DE PROCESSAMENTO.
COMANDO ACCEPT
Executa uma operao de entrada de dados. Aplica-se para
entradas pouco volumosas, como um parmetro ou data.
ACCEPT identificador [ FROM nome-dispositivo ]
COMANDO WRITE
WRITE nome-de-registro-1 [ FROM identificador-1 ]
[ INVALID KEY comando-imperativo ]
[ NOT INVALID KEY comando-imperativo ]
[ END-WRITE ]
Utilizar o ACCESS MODE IS SEQUENTIAL no comando SELECT.
COMANDO READ
READ nome-de-arquivo-1
[ INVALID KEY comando-imperativo ]
[ NOT INVALID KEY comando-imperativo ]
[ END-READ ]
Utilizar o ACCESS MODE IS RANDOM no comando SELECT.
COMANDO REWRITE
REWRITE nome-de-registro-1 [ FROM identificador-1 ]
[ INVALID KEY comando-imperativo ]
[ NOT INVALID KEY comando-imperativo ]
[ END-REWRITE ]
No modificar o campo-chave.
COMANDO DELETE
DELETE nome-de-arquivo-1 RECORD
[ INVALID KEY comando-imperativo ]
[ NOT INVALID KEY comando-imperativo ]
[ END-DELETE ]
Antes do processamento de atualizao ou de excluso de um
registro, o mesmo deve ser lido.
que
ocorreu
no