Você está na página 1de 47

PROGRAMAO

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.

Exemplo de programa COBOL


IDENTIFICATION DIVISION.
PROGRAM-ID.
MEUPROG.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL. SELECT ARQ-VENDAS ASSIGN TO ARQ1.
SELECT ARQ-IMPR
ASSIGN TO PRT1.
DATA DIVISION.
FILE SECTION.
FD
ARQ-VENDAS LABEL RECORDS ARE STANDARD.
01
REG-VENDAS.
05
NOME-E
PICTURE
X(15).
05
QTD-VENDAS-E PICTURE
999V99.
FD
ARQ-IMPR LABEL RECORDS ARE OMITTED.
01
ARQ-IMPR.
05
FILLER
PICTURE
X(20).
05
NOME-S
PICTURE
X(15).
05
FILLER
PICTURE
X(20).
05
QTD-COMISSAO-SPICTURE
99.99.
05
FILLER
PICTURE
X(72).
WORKING-STORAGE SECTION.
01

H-MAIS-REGISTROS

PICTURE

XXX VALUE SIM.

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

QTD-VENDAS-E IS GREATER THAN 100.00


MULTIPLY .03 BY QTD-COMISSAO-S
GIVING QTD-COMISSAO-S

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.

Como codificar um programa fonte


Os programas COBOL compem-se de quatro divises. Cada diviso tem
regras especficas de codificao, que discutiremos a seguir. Vamos comear
com as regras bsicas para a codificao de programas.
Coluna 7: para continuao de literais no-numricas, comentrios e incio
de nova pgina.
A coluna 7 da folha de codificao uma posio de continuao.
Tem trs objetivos principais:
1. Pode ser usada para designar uma linha toda como comentrio,
pela colocao de um * na coluna 7.
2. Pode ser usada para forar a impresso das prximas instrues
em nova pgina da listagem fonte;
3. Pode ser usada para a continuao de literais no numricas.
Exemplo:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXEMPLO.
******************************************
* TESTE DE PROGRAM COBOL *
******************************************
Usamos comentrios em nossos programas para deixar clara a lgica
usada. Alm disso, em muitos programas, inserimos uma linha de
comentrios em branco, com um * na coluna 7, apenas para separar
as divises: isso faz com que o programas fique mais legvel. Se a
coluna 7 de qualquer linha contm um *, essa linha no ser
compilada, mas ser impressa na listagem. Apenas para fins de
documentao. Pode-se tambm usar uma linha em branco, em vez
de uma linha de comentrio, para separar as partes de um programa.
Salto de pgina, com uma barra (/) na coluna 7. A coluna 7 pode
tambm ser usada para fazer a impressora saltar para a pgina
seguinte, quando a listagem fonte est sendo impressa. Em
programas longos, por exemplo, podemos querer que cada diviso
fique em uma pgina separada. Para saltar para uma nova pgina
aps cada diviso, crie uma linha que contenha s brancos, exceto por
uma barra na coluna 7.

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.

TIPOS DE ENTRADA DO COBOL


A ordem de codificao das divises em um programa COBOL :
IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION
e PROCEDURE DIVISION. Algumas delas so subdivididas em sees. A
DATA DIVISION, por exemplo, que descreve todas as rea de memria
necessrias para os dados de um programa, dividida em duas sees
principais: a FILE SECTION e a WORKING-STORAGE SECTION
descreve as reas intermedirias de trabalho, necessrias ao
processamento. Cada seo pode ainda ser subdividida em pargrafos.
Todas as outras entradas do programa so consideradas comandos
COBOL. Um comando, ou srie de comandos, que termina com um ponto
chamado sentena.
TIPOS DE ENTRADA DO COBOL

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

Comandos e sentenas comeam Exemplos:


na rea B
MOVE NOME-E TO NOME-S.
ADD QTD-E TO TOTAL.

REGRAS SOBRE MARGENS


Diviso, seo e nomes de pargrafos comeam na rea A
Todos os outros comandos, clusulas e sentenas comeam na rea B
FOLHA DE CODIFICAO COBOL
COLUNAS
1-6

8-11

12-72

73-80

USO
Nmeros
sequenciais
ou nmeros de pginas
e linhas (opcional)

EXPLICAO
no utilizadas

usada para indicar que


Comentrio,
uma linha comentrio
continuao ou incio de ( * na coluna 7 ), para
nova pgina
fazer a impressora
saltar para uma nova
pgina ou imprimir a
listagem fonte ( / na
coluna 7 ), ou para
continuar literais nonumricas
Algumas entradas como
rea A
diviso seo e nome
de pargrafos devem
comear na rea A
A maioria das entradas
rea B
COBOL, inclusive
sentenas da
PROCEDURE
DIVISION so
codificadas na rea B
idenficao
do no utilizadas
programa

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.

REGRAS PARA A FORMAO DE NOMES DE DADOS DEFINIDOS PELO


USURIO

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.

Use prefixos ou sufixos sempre que apropriados: NOME-E, NOME-S,


NOME-CAB, etc...

CODIFICANDO A IDENTIFICATION DIVISION


Formato:
IDENTIFICATION DIVISION.
PROGRAM-ID. Nome-do-programa.
[AUTHOR. [comentario]...]
[INSTALLATION. [comentario]...]
[DATE-WRITTEN. [comentario]...]
[DATE-COMPILED. [comentario]...]
[SECURITY. [comentario]...]

CODIFICANDO A ENVIRONMENT DIVISION


ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER.
OBJECT-COMPUTER.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT nome-do-arquivo
ASSIGN TO nome-externo
Deve ser especificado um comando SELECT para dispositivo de I/O no
programa.
REGRAS PARA USO DO COMANDO SELECT.
nome-do-arquivo:
Deve ser especificado um comando SELECT para dispositivo de I/O no
programa.
nome-externo:
Seguir as regras definidas pela JCL do MVS/ESA.

CODIFICANDO A DATA DIVISION


Possui duas sees principais:
FILE-SECTION
Define todos os arquivos de entrada e sada usados no programa.
Cada arquivo j foi definido na ENVIRONMENT DIVISION, em um
comando SELECT, onde o nome-do-arquivo designado e um
dispositivo de entrada ou sada atribudo a ele. Assim, para todo
comando SELECT teremos um arquivo a ser descrito na FILE
SECTION da DATA DIVISION.
Cada arquivo descrito na FILE SECTION com uma sentena FD, que
pode consistir em uma srie de clusulas. Depois de serem
especificadas as clusulas, a sentena FD termina com um ponto. FD
abreviao de File Description. Cada entrada FD descreve um
arquivo definido em um comando SELECT da ENVIRONMENT
DIVISION.
WORKING-STORAGE SECTION
Reserva memria para campos que, embora no sendo parte de
registros de entrada ou sada, so necessrios ao processamento.
Esses campos incluem constantes e reas de trabalho.
OBS.: as sees devem aparecer na ordem descrita.
Existem mais duas sees que sero discutidas oportunamente: LINKAGE
SECTION e REPORT SECTION.

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 ]

Interpretando os principais parmetros:


LABEL RECORDS ARE STANDARD: indica que o primeiro registro
a ser processado um header label padro de 80 posies
contendo identificao do arquivo e, o ltimo registro ser um trailer
label, (leitura e gravao).
LABEL RECORDS ARE OMITTED: no haver o processamento
dos registros header e trailer.
RECORD CONTAINS inteiro-1 CHARACTERS: indica o tamanho de
cada registro lgico para arquivos com registros de tamanho fixo.
Esta clusula opcional. Contudo, importante inclui-la, uma vez
que ela proporciona um meio de verificao do tamanho do registro.
BLOCK CONTAINS inteiro-1 RECORDS: indica o numero de
registros lgicos por registro fsico. Se omitida assumir conforme
definido no JCL.
Nmero de nveis:
No COBOL os dados so agrupados usando-se o conceito de nvel.
Os registro so considerados o nvel de dados mais alto em um
arquivo, e por isso so codificados no nvel 01. Um campo de dados
dentro do registro codificado em um nvel subordinado ao 01, isto
, 02, 03 etc. Pode-se usar qualquer nmero de nvel entre 02 e 49
para descrever campos de dados em um registro.
Portanto, depois que um arquivo descrito por uma FD, seguem-se
as entradas de descrio de registro para cada formato de registro
no arquivo. A descrio de registro especifica o formato de um
registro. As descries de registros indicam os itens ou campos que
vo aparecer no registro, a ordem em que os campos aparecem e
como esses campos esto relacionados entre si.
Assim como especificado um nome de arquivo no nvel de FD,
um nome de registro codificado no nvel 01 e, todos os campos
dentro do registro so codificados em qualquer nvel entre 02 e 49,
em qualquer posio dentro da rea B.

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

Embora o COBOL permita o uso da rea A para nmeros de nvel,


recomendamos que os campos dentro de um registro sejam
codificados com um recuo, isto , que se use a rea B para todos
os nveis exceto o 01.
A clusula PICTURE (PIC)
Especifica o tipo de dados contidos em um tem elementar
indica o tamanho do campo.
Tipo de campos de dados:
Alfabtico (A)
Alfanumrico (X)
Numrico (9)
Tamanho indicado pelo numero de As, Xs ou 9s usados.
Exemplo: PIC 9999.
Podemos tambm indicar o nmero de bytes do campo entre
parenteses.
Exemplo:
PIC X(10).
O ponto decimal representado pela letra V na PICTURE.
Exemplo:
PIC 9(5)V99.

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

X(40) VALUE ESPACES.

MOVE ZEROS TO W-ACLIN.


UTILIZANDO A CLUSULA USAGE
Especifica forma em que os dados so armazenados.
Pode ter os seguintes valores
FORMATO
PIC X ou PIC A
PIC 9
PIC 9
PIC 9

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:

Definir aps a FILE SECTION.


Codificar a partir da Area A e terminar com ponto.
tem de grupo e tens elementares podem ser definidos.
tem elementar deve conter a clusula PICTURE e pode conter valor
inicial.
Utilizar a clusula VALUE para inicializar uma rea.
Regras de continuao de uma literal no numrica:

Comece a literal na clusula VALUE com aspas.


Escreva at a coluna 72.
Coloque um hifen na coluna 7 da linha seguinte.
Continue a partir da rea B, comeando com aspas.
Termine a literal com aspas e ponto.

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...

Indica quais os arquivos sero de entreda e quais de sada.


Torna os arquivos disponveis para processamento.

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.

COMANDO PERFORM ... THROUGH


PERFORM nome-pargrafo-1
[ THROUGH ]
nome-parrgrafo-2
[ THRU
]
[ END-PERFORM ]
PERFORM THRU realiza todos os comandos a partir do nome-pargrafo1 at o comando imediatamente anterior ao nome-pargrafo-2, quando
retorna para a instruo seguinte ao comando PERFORM.
Podemos misturar os dois tipos de PERFORM (UNTIL e THROUGH) bem
como o PERFORM em linha em um mesmo comando.
PERFORM nome-pargrafo-1
[ THROUGH ]
[ THRU
]
nome-parrgrafo-2
inteiro-1
identificador-1

TIMES

Repetir o desvio ao nome-pargrafo-1 por N vezes.


COMANDO PERFORM VARYING
PERFORM nome-pargrafo-1
[ THROUGH ]
[ THRU
] nome-parrgrafo-2
VARYING identificador-1 FROM identificador-2
inteiro-1
BY identificador-3
inteiro-2
UNTIL condio-1
inteiro-1

OPO PERFORM WITH TEST AFTER | BEFORE


PERFORM nome-procedimento-1
WITH TEST BEFORE | UNTIL
AFTER

condio-1

As opes BEFORE e AFTER permitem que controlemos se condio-1


para ser verificada antes ou depois de executar a rotina especificada em
nome-procedimento-1.
COMANDO GO TO
GO TO nome-pargrafo
Executa um desvio incondicional para o nome-pargrafo, alterando
definitivamente o fluxo do processamento.
COMANDO EXIT
nome-pargrafo.
EXIT.
Indica para o PERFORM, o fim de execuo de uma rotina.

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.

Quando os campos emissores e recpectores tem PICs diferentes.


Movendo a parte inteira de campos numricos
Movendo a parte decimal de campos numricos
Truncamentos
Movendo literais numricas para campos numricos
Movendo no-numericos ou alfanumricos
Movendo itens de grupo e elementar
Movendo constantes figurativas ou literais.

MOVE CORRESPONDING item-grupo-1 TO item-grupo-2


CORR
COMANDO WRITE
Pega os dados na rea de sada da DATA-DIVISION e os transfere para o
dispositivo especificado na ENVIRONMENT DIVISION e, aberto como
OUTPUT.
WRITE

nome-registro-1

Exemplo: WRITE

REGISTRO-S.

OBS.: Lemos arquivos e gravamos registros.

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

COMANDO ARITMTICO seguido por ON SIZE ERROR comando-1


Exemplos:
ADD 1 TO
SUBTRACT

W-ACUM.
50 FROM SALDO-R-ENTRADA

MULTIPLY .067 BY SALARIO.


OBS.:
cuidado com o tamanho dos campos que recebero os
resultados das operaes.
Operao envolvendo campos no numricos causam data
exception.

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

Permite o uso de ROUNDED e ON SIZE ERROR


COMANDO IF
Verifica se a condio especificada verdadeira e, se for executa a
prxima instruo, seno executa o comando especificado na clusula
ELSE ou aps o primeiro ponto.
IF condio
[ THEN ]
comando-1
[ NEXT SENTENCE ]
[ CONTINUE ]
[ ELSE ]
[ NEXT SENTENCE ]
[ CONTINUE ]
comando-2
[ END-IF ]
As condies simples que podem ser testadas so as seguintes:
(identificador-1)

= (ou IS EQUAL TO)


< (ou IS LESS THAN)
> (ou IS GREATER THAN)

(identificador-2
literal 1

A clusula ELSE opcional. Vrios comandos podem ser escritos aps


cada clusula IF ou ELSE. Podemos tambm utilizar um terminador de
escopo END-IF.
permitido o uso de condicionais OR ou AND em comando IF
Outros teste possveis:
POSITIVE, NOT NEGATIVE, NEGATIVE ou ZERO
NUMERIC, ALPHABETIC

COMO UTILIZAR A IMPRESSO


A funo de edio de dados permite
impresso de pontos decimais
99.99.
supresso de zeros esquerda
ZZ99.
impresso de cifres e vrgulas
$Z.ZZ9,99
impresso de asteriscos
$***.99
impresso de sinais de mais e de menos
-999 ou 999+
impresso de smbolos de dbito e crdito
999CR ou 999DB
impresso de zeros ou espaos.
999BB99BB9999
XBXBX(8)

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

COMANDO WRITE PARA IMPRESSAO DE RELATRIOS


WRITE nome-registro-1 FROM identificador-1
AFTER [ ADVANCING ] inteiro-1 [ LINES/LINES ]
BEFORE identificador-2
[ PAGE ]
O tamanho do registro deve ser definido com uma posio a mais,
para conter o caractere de controle de impresso.
COMO OBTER A DATA DO DIA
Utilizar o comando DATE
01

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.

TCNICAS DE VALIDAO DE DADOS


COMANDO INSPECT
necessrio validar informaes recebidas por entradas sobre as quais
no temos controle da qualidade dos dados.
Podemos utilizar as opes NUMERIC ou ALPHABETIC do comando IF,
ou ainda o comando INSPECT
Formato 1:
INSPECT

identifcador-1

identificador-2

TALLYING

FOR
ALL
identificador-3
LEADING
literal-1
CHARACTERS

BEFORE
AFTER

INITIAL

identificador-4
literal-2

Conta o nmero de ocorrncias de um determinado caractere emum


campo.
Substitui ocorrncias especficas de um determinado caractere por um
outro caractere.
ALL - toda ocorrncia do caractere especificado no campo ser
contada.
LEADING - sero contadoas todas as ocorrncias do caractere
especificado que precedem qualquer outro.
CHARACTERS - todos os caracteres detro do campo sero contados.
Esta opo pode ser usada para determinar o tamanho do campo.

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

Substitui as ocorrncias de um determinado caractere por outro caractere.


Ele no conta o nmero de ocorrncias de qualquer caractere.
ALL, LEADING e CHARACTERS tem significado anlogos aos do Formato
1. Se FIRST for especificado no Formato 2, ento a primeira ocorrncia da
literal-1 ser substituda pela literal-2. Ou seja, se a literal-1 estiver
presente no campo, ocorrer uma nica substituio de um caractere.

COMANDOS STRING E UNSTRING


STRING permite que realizemos a concatenao de campos.
STRING

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).

STRING CIDADE DELIMITED BY


,
DELIMITED BY SIZE
ESTADO DELIMITED BY SIZE
,
DELIMITED BY SIZE
CEP
DELIMITED BY SIZE
INTO ENDERECO3
DISPLAY

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

INTO identificador-4 ...


[ END-UNSTRING ]
Exemplo:
UNSTRING ENDERECO3
DELIMITED BY ,
INTO CIDADE
ESTADO
CEP
COMANDO EVALUATE
Permite utilizar a estrutura de casos que uma estrutura lgica de
controle, testando uma srie de condies.
Permite que a sequncia de casos e a identificao da rotina que ser
ativada sejam codificadas mais claramente.
A clusula WHEN OTHER ser executada quando as condies no forem
satisfeitas.
EVALUATE identificador-1
expressao-1
WHEN condio-1 comando-imperativo-1
WHEN OTHER comando-imperativo-2
[ END-EVALUATE ]

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

DEFININDO E UTILIZANDO TABELAS


A CLUSULA OCCURS
Usamos para indicar a ocorrncia repetida de campos que tm o mesmo
formato. Tem os seguintes usos:
Para uma srie de campos de entrada ou sada, tendo todos o mesmo
formato.
Uma srie de totais na WORKING-STORAGE, onde so acumuladas
quantidades; aps serem acumulados todos os dados, os totais podem
ser impressos.
Para uma tabela na WORKING-STORAGE, a ser acessada por cada
registro de entrada; com uma tabela, usamos o contudo de algum
campo de entrada para procurar os dados desejados na tabela.
Pode ser usada somente nos nveis de 02 a 49.
Exemplos:
01
01

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.

CLUSULAS REDEFINES E VALUE


Quando usamos a clusula OCCURS no podemos redefinir uma entrada.
Portanto precisamos primeiro redefini-la para depois usar OCCURS.
Exemplo:
WORKING-STORAGE SECTION.
01

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.

OBS.: o contudo de um ndice incrementado automaticamente pelo


comando SEARCH, mas quando o utilizamos no PERFORM ... VARYING,
devemos utilizar o comando SET para incrementa-lo.

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 SEARCH ALL


Com o formato semelhante ao SEARCH o comando SEARCH ALL usado
para efetuar busca binria.
SEARCH ALL identificador-1
[ AT END comando-imperativo-1 ]
WHEN nome-de-dado1 IS EQUAL TO identificador-2
IS = literal-1
nome-de-condio-1
expr.-numrica-1
AND

nome-de-dado2 IS EQUAL TO identificador-3


IS = literal-2
nome-de-condio-2
expr.-numrica-2

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.

UTILIZANDO TABELAS COM MAIS DE UM NVEL


Podemos utilizar at sete nveis na composio de uma tabela.
Para cada nvel utilizamos um subscrito (ndice).
O primeiro subscrito refere-se clusual OCCURS de nvel principal; o
segundo de nvel secundrio, etc...

Os subscritos podem ser inteiros positivos ou uma varivel com


contudo inteiro positivo.

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 ]

ACESSANDO ARQUIVOS EM DISCO


Arquivos em disco podem ter seus dados lidos e atualizados
diretamente ou atravs de campos ndices (arquivos indexados).
LEITURA SEQUENCIAL SEM ATUALIZAO:
procedimento igual ao realizado para arquivos sequenciais.
LEITURA SEQUENCIAL COM ATUALIZAO:
abrir o arquivo como I-O, ler os registros sequencialmente e,
quando um registro for sofrer atualizaes, modifica-lo e regravar
com REWRITE
REWRITE nome-registro

CRIAO DE ARQUIVO INDEXADO:


Os registros devem estar em ordem ascendente pelo CAMPOCHAVE.
O procedimento de criao semelhante ao utilizado para criao
de arquivos sequenciais.

O QUE MUDA NO PROCESSAMENTO DE ARQUIVOS INDEXADOS


COMANDO SELECT
SELECT nome-de-arquivo-1 ASSIGN TO nome-externo-1
[ ORGANIZATION IS ] INDEXED
[ ACCESS MODE IS SEQUENTIAL | RANDOM ]
RECORD KEY IS nome-de-dados-1

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.

A CLUSULA FILE STATUS


Permite determinar qual o tipo de erro
processamento do arquivo indexado ou VSAM.

que

ocorreu

no

Deve ser includa como a ltima clusula do SELECT.


SELECT ...
[ FILE STATUS IS nome-de-dados ]
Nome-de-dados: definir na WORKING-STORAGE SECTION com
alfanumrico de 2 posies.
Exemplo:
SELECT ARQ-INDEX
FILE STATUS IS WS-STATUS.
WORKING-STORAGE SECTION.
01
WS-STATUS PIC XX.
PROCEDURE DIVISION.
READ ARQ-INDEX
INVALID-KEY PERFORM 900-ERRO
END-READ.
IF WS-STATUS = 00
PERFORM 150-PROCESSA
ELSE
DISPLAY ARQ-INDEX - FILE STATUS
WS-STATUS.
PRINCIPAIS FILE STATUS
00 NORMAL
02 ALTERNATE KEY
04 ERRO DE TAMANHO NO READ
10 FIM DE ARQUIVO (READ SEQUENCIAL)
21 CHAVES FORA DE SEQUENCIA (CRIAO)
22 CHAVE DUPLICADA (WRITE)
23 REGISTRO NO ENCONTRADO (READ RANDOM OU
DYNAMIC)
30 ERRO DE I/O

Você também pode gostar