Вы находитесь на странице: 1из 121

COBOL

Participante : ___________________________________
Treinamento: ___________________________________
Perodo

: ___________________________________

S a la

: ____________Horrio: _______________ Instrutores

:____________________________________
____________________________________

____________________________________________________________________________________________
Verso 1

Cobol
1 LEGENDA DOS COMPONENTES ORIENTATIVOS. ........................................................................... 3
2 INTRODUO ....................................................................................................................................... 5
2.1 SISTEMA OPERACIONAL ................................................................................................................. 5
2.2 PROGRAMAS ..................................................................................................................................... 5
2.3 COMPILAO .................................................................................................................................... 6
3 O QUE COBOL? ............................................................................................................................... 6
3.1 COMO EDITAR UM PROGRAMA ...................................................................................................... 7
3.2 COMENTRIOS NUM PROGRAMA .................................................................................................. 7
3.3 PALAVRAS ......................................................................................................................................... 8
3.4 CARACTERES .................................................................................................................................... 9
3.5 ESTRUTURA DA LINGUAGEM ......................................................................................................... 9
4 IDENTIFICATION DIVISION ................................................................................................................ 13
5 ENVIRONMENT DIVISION .................................................................................................................. 15
5.1 CONFIGURATION SECTION ........................................................................................................... 16
5.2 INPUT-OUTPUT SECTION ............................................................................................................... 17
6. DATA DIVISION .................................................................................................................................. 19
6.1 FILE SECTION .................................................................................................................................. 20
6.2 WORKING-STORAGE SECTION ..................................................................................................... 26
6.3 LINKAGE SECTION ......................................................................................................................... 29
7 PROCEDURE DIVISION ...................................................................................................................... 32
7.1 CLUSULA OPEN ............................................................................................................................ 32
7.2 CLUSULA READ ............................................................................................................................ 33
7.3 CLUSULA WRITE .......................................................................................................................... 33
7.4 CLUSULA CLOSE ......................................................................................................................... 36
7.5 CLUSULA STOP RUN ................................................................................................................... 36
7.6 CLUSULA GOBACK ...................................................................................................................... 37
7.7 CLUSULA GO TO .......................................................................................................................... 37
7.8 CLUSULA MOVE ........................................................................................................................... 38
7.8.1 CLUSULA OF NO COMANDO MOVE........................................................................................ 39
7.9 CLUSULA ADD .............................................................................................................................. 41
7.9.1 OPO ROUNDED ....................................................................................................................... 43
7.9.2 OPO ON SIZE ERROR ............................................................................................................. 43
7.10 CLUSULA SUBTRACT ................................................................................................................ 44
7.11 CLUSULA MULTIPLY (MULTIPLICAO) ................................................................................ 46
7.12 CLUSULA DIVIDE (DIVISO) ..................................................................................................... 47
7.13 CLUSULA COMPUTE .................................................................................................................. 49
7.14 CLUSULA DISPLAY .................................................................................................................... 50
7.15 CLUSULA ACCEPT ..................................................................................................................... 51
7.16 CLUSULA IF ................................................................................................................................. 52
7.17 CLUSULA PERFORM .................................................................................................................. 57
7.18 CLUSULA EXIT ............................................................................................................................ 64
____________________________________________________________________________________________
Verso 1

Cobol
7.19 CLUSULA (BLANK WHEN ZERO) .............................................................................................. 64
7.20 CLUSULA (SYNCHRONIZED SYNC) ...................................................................................... 65
7.21 OPERADORES LGICOS ............................................................................................................. 66
7.22 DATA E HORA DO SISTEMA ........................................................................................................ 68
8 ARQUIVOS DE ACESSO DIRETO ..................................................................................................... 71
8.1 UTILIZANDO ACESSO DIRETO LEITURA SEQUENCIAL ......................................................... 72
9 TABELAS ............................................................................................................................................. 78
9.1 CLUSULA OCCURS ...................................................................................................................... 78
9.2 TABELA SUBSCRITA ...................................................................................................................... 79
9.3 CLUSULA SET ............................................................................................................................... 82
9.4 CLUSULA SEARCH ....................................................................................................................... 83
9.5 TABELA INDEXADA ........................................................................................................................ 84
10 CLASSIFICAO DE DADOS .......................................................................................................... 88
10.1 CLUSULA SELECT (SORT) ........................................................................................................ 89
10.2 CLUSULA RELEASE ................................................................................................................... 90
10.3 CLUSULA RETURN ..................................................................................................................... 91
10.4 CLUSULA SORT .......................................................................................................................... 91
11 OUTRAS CLUSULAS ................................................................................................................... 101
11.1CLUSULA EXAMINE / INSPECT - REPLACING ....................................................................... 102
11.2 CLUSULA TRANSFORM ........................................................................................................... 105
11.3 CLUSULA EXHIBIT.................................................................................................................... 106
11.4 CLUSULA READY/RESET (TRACE) ........................................................................................ 107
11.5 CLUSULA STRING .................................................................................................................... 109
11.6 CLUSULA UNSTRING ............................................................................................................... 111
11.7 RETURN-CODE ............................................................................................................................ 112
11.8 ABENDAR PROGRAMA .............................................................................................................. 113
11.9 FILE STATUS ............................................................................................................................... 114
12 EXERCCIOS ................................................................................................................................... 119
12.1 PROGRAMA 1 .............................................................................................................................. 119

1. Legenda dos Componentes Orientativos.


____________________________________________________________________________________________
Verso 1

Cobol

DICA

LEIA

TOME NOTA

ATENO

CURIOSIDADE

____________________________________________________________________________________________
Verso 1

Cobol

2. Introduo

Este manual de Cobol oferece informaes e conceitos


essenciais para o desenvolvimento de programas na linguagem
Cobol.

2.1 Sistema Operacional


-

programas de controle;

superviso de sistema;

superviso dos arquivos;

superviso dos jobs.

2.2 Programas
-

tradutores de linguagem (metaprogramas);

programas de servio (utilitrios);

programas de aplicao.

____________________________________________________________________________________________
Verso 1

Cobol

2.3 COMPILAO

-> programa fonte feito pelo programador

-> rotina do sistema operacional (tradutor)

-> mdulo objeto

-> rotina do sistema operacional (LINKAGE-EDITOR)

-> mdulo de carga

-> execuo do programa

3. O que Cobol?
____________________________________________________________________________________________
Verso 1

Cobol
COBOL significa Common Business Oriented Language, isto , Linguagem
Comum Orientada para o Comrcio.
O Cobol um subconjunto de palavras da lngua inglesa, isto , um
nmero limitado de palavras inglesas sujeitas a uma sintaxe prpria. uma
linguagem que lida com problemas comerciais, envolvendo os arquivos de
dados de apreciveis propores.

3.1 Como editar um programa


necessrio usar uma estrutura definida da maneira de escrever.
O compilador Cobol possui caractersticas posicionais, isto ,
necessitamos da ordenao de palavras, divises e sees, usando a seguinte
estrutura:
Coluna de 1 a 6
Essas colunas so usadas para numerar as linhas de um programa. A
numerao uma ordem crescente. Opcionalmente podem deixar de serem
preenchidas ou incluir outros caracteres.
Coluna 7
usada para um hfen (-), que significa a continuao de no numricos,
asterisco (*), usado para a incluso de comentrios e a barra (/) para o salto de
pgina.
Coluna de 8 a 72
So usadas para as entradas (palavras ou literais) do programa. Estas
colunas esto agrupadas em duas margens A (coluna 8 a 11) e margem B
(coluna 12 a 72).
As entradas da margem A so:
ttulos das divises, sees e dos pargrafos;
descrio dos arquivos;
ttulos especiais na Procedure Division;
os nmeros de nvel, como o 77.

As entradas da margem B so:


espaos entre as margens (com o objetivo de comunicao visual);
continuao das entradas.

3.2 Comentrios num programa


O comentrio no considerado pelo compilador, servindo somente para
documentao.
____________________________________________________________________________________________
Verso 1

Cobol
O asterisco (*) na coluna 7, determinar que toda a linha ficar como
comentrio.
A barra (/) na coluna 7, saltar uma pgina e gravar o comentrio logo em
seguida.

Um programa deve sempre ter o mximo de informaes


que auxiliem a compreenso do mesmo, portanto, aconselhvel
utilizar os recursos de comentrios.

Para auxiliar na esttica da listagem do programa, podemos usar a instruo


SKIP e EJECT para pular linhas e folhas.

Digita-se na coluna 12:


EJECT pula 1 folha
SKIP1 pula 1 linha
SKIP2 pula 2 linhas
SKIP3 pula 3 linhas

3.3 Palavras
Em comprimento, uma palavra no deve exceder a 30 caracteres. O
espao em branco no um caracter permitido para a formao de palavras.
Uma palavra no pode comear nem terminar com hfen (-).
Exemplo: IMPOSTO-DE-RENDA.
H palavras que so reservadas do Cobol, com propsitos prprios.

3.3.1 Constante figurativa


uma palavra associada a um valor particular.
Exemplos:
ZEROS, ZERO, ZEROES

valor zero

____________________________________________________________________________________________
Verso 1

Cobol
SPACE, SPACES

valor brancos

QUOTE, QUOTES

apstrofe

ALL LITERAL

um ou mais ocorrncias de literal

HIGH-VALUE, HIGH-VALUES maior valor (hexa FF)


LOW-VALUE, LOW-VALUES menor valor (hexa 00)

3.3.2 Palavras opcionais


Seu uso opcional:
Exemplo:
IF

CPO-A

IS

GREATER

igual a

IF

CPO-A

logo

IS e THAN so opcionais.

THAN

GREATER

10
10

3.3.3 Palavras-chave
Determinar a funo da clusula ou comando
Exemplo: ADD, READ, WRITE, IF
Verbos : seu uso est contido na Procedure Division, comparado aos verbos
de gramtica, j que levam a algum tipo de ao (exceto IF).

3.4 Caracteres
H um conjunto de caracteres vlidos no Cobol, como:
-

De 0 a 9;

De A a Z;

Espaos, parnteses, menor que, maior que, ponto, sinal de mais, sinal de
menos, dlar, E comercial, arroba, igual, vrgula, barra, asterisco, apstrofes.

3.5 Estrutura da linguagem


A linguagem Cobol estruturada em:
-

Divises;

Sees;

Pargrafos;

____________________________________________________________________________________________
Verso 1

Cobol
-

Sentenas;

Clusulas (nas trs primeiras divises);

Comandos (na Procedure Division).

3.5.1 Divises
As divises do Cobol para a estruturao do programa e suas funes so
quatro:
-

Diviso de identificao (IDENTIFICATION DIVISION);

Diviso de equipamento (ENVIRONMENT DIVISION);

Diviso de dados (DATA DIVISION);

Diviso de procedimentos (PROCEDURE DIVISION).

3.5.2 Sees
Podemos identificar dois tipos de sees:
definidos na ENVIRONMENT DIVISION e DATA DIVISION conforme
requeridos.

Exemplo:
CONFIGURATION SECTION.
WORKING-STORAGE SECTION.
na PROCEDURE DIVISION para especificar a segmentao do programa.

3.5.3 Pargrafos
Na PROCEDURE DIVISION utilizada para agrupar sentenas, permitindo a
alterao do fluxo lgico.

3.5.4 Sentenas
As sentenas so formadas por uma ou mais clusulas ou comandos, e
terminado por um ponto.

3.5.5 Programa Cobol


divises
sees
____________________________________________________________________________________________
Verso 1

10

Cobol
pargrafos
sentenas
comandos

clusulas

____________________________________________________________________________________________
Verso 1

11

Cobol

____________________________________________________________________________________________
Verso 1

12

Cobol

4. IDENTIFICATION DIVISION

Identifica o programa fonte (informao obrigatria), e


outras informaes como autor, instalao, etc.

____________________________________________________________________________________________
Verso 1

13

Cobol
a primeira das 4 divises.
utilizada para identificar o programa.
Os dados introduzidos pela IDENTIFICATION DIVISION so tratados pelo
compilador Cobol como comentrios, no sendo traduzidos em linguagem de
mquina. Formato opcional:
IDENTIFICATION DIVISION.
PROGRAM-ID. (nome do programa)
AIUTHOR. (nome do programador)
INSTALLATION. (local de uso ou gerao do programa)
DATE-WRITTEN. (data em que foi escrito o programa)
DATE-COMPILED. (data em que foi compilado o programa)
REMARKS. (comentrios sobre o programa. Utilizado o REMARKS em
programas desenvolvidos em Cobol ANS, isto , Cobol I).
Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010

IDENTIFICATION DIVISION.
PROGRAM-ID.
DEMPB012.
AUTHOR.
ANA PAULA NUNES.
INSTALLATION. SAO-CENTRO.
DATE-WRITTEN. 03/08/1997.
DATE-COMPILED.
SECURITY. ESTE PROGRAMA UTILIZA ARQUIVOS DE BACK-UP COMO
SEGURANCA.
REMARKS. O PROGRAMA EMITE RELATORIO A PARTIR DO ARQUIVO P-112.

Obs: a opo DATE-COMPILED no deve ser preenchida, pois o sistema


operacional que far isso.

____________________________________________________________________________________________
Verso 1

14

Cobol

5. ENVIRONMENT DIVISION

a definio do ambiente fsico.


Especifica o equipamento usado para compilao e
execuo do programa, alm de associar os arquivos do programa
aos diversos perifricos, tcnicos especiais de entrada/sada.

____________________________________________________________________________________________
Verso 1

15

Cobol
a segunda diviso do Cobol.
Identifica a mquina que est sendo usada. Contm a descrio do
computador e a designao dos arquivos para as respectivas unidades de
configurao do computador.
dividida em duas sees:

CONFIGURATION SECTION;

INPUT-OUTPUT SECTION.

5.1 CONFIGURATION SECTION


Esta seo utilizada para fornecer informaes sobre o computador.
dividida em 3 pargrafos:

SOURCE-COMPUTER. (nome-do-computador).

OBJECT-COMPUTER. (nome-do-computador).

SPECIAL-NAMES. (nome-da-funo IS nome-simblico).

5.1.1 SPECIAL-NAMES
Este pargrafo relaciona funes existentes no compilador Cobol com nomes
simblicos dados pelo programador.

Exemplo:
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA
C01

IS

CANAL-1.

O DECIMAL-POINT IS COMMA define que o ponto decimal dever ser a vrgula.


O canal de controle da impresso (CANAL-1) est no intervalo C01 a C12.

____________________________________________________________________________________________
Verso 1

16

Cobol

5.2 INPUT-OUTPUT SECTION


Define arquivos utilizados pelo programa efetuando ligaes com o
equipamento da mquina.

Est dividida em 2 pargrafos:


-

FILE-CONTROL.

I-O-CONTROL.

5.2.1 FILE-CONTROL
o controle de arquivos.
Cada arquivo descrito na DATA DIVISION dever ter seu nome simblico de
arquivo descrito aps o select.

5.2.1.1 SELECT
O Select tem a funo de designar um arquivo para um dispositivo de
entrada/sada. necessrio um Select para cada arquivo.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT (nome-arquivo) ASSIGN TO(classe-organizao-nome).

Nome-do-arquivo -> dado pelo programador. o nome


pelo qual o arquivo ser reconhecido na DATA DIVISION

PROCEDURE DIVISION.
Classe -> especifica o tipo de dispositivo:
DA = acesso direto (discos magnticos)
UT = utility (fitas e discos magnticos)

____________________________________________________________________________________________
Verso 1

17

Cobol
UR = registros unitrios (leitoras, impressoras)
UP = registro unitrio (perfuradoras).
Organizao -> indica a organizao do arquivo:
S = arquivos sequenciais
D = arquivos de acesso direto
W = arquivos de acesso direto quando o comando
REWRITE usado no programa
I = arquivos de organizao indexada
Nome -> o nome pelo qual o arquivo ser reconhecido pelo
carto DD do JCL. No deve ter mais que 8 caracteres, e nem
comear com caracter numrico.

5.2.2 I-O-CONTROL.
O I-O-CONTROL tem a finalidade de auxiliar na gravao de arquivos
variveis.
H operao de CHECK-POINT, ou seja, para trabalhos com arquivos de
grandes quantidades de registros, garantindo a execuo do servio j executado
caso ocorra algum erro de I-O. Ele salva o que j foi feito at o instante numa rea
estipulada pelo programador.
Pode ser utilizado para a mesma definio de uma FD para vrios arquivos
que possuam o mesmo lay-out.

____________________________________________________________________________________________
Verso 1

18

Cobol

6. DATA DIVISION

Define a estrutura lgica dos arquivos e das reas de


trabalho. Descreve os dados que o programa aceitar como
entrada e os que sero produzidos como sada.

A DATA DIVISION tem a funo de descrever os arquivos e seus registros.


Assim como qualquer rea de traballho necessria ao programa.

Essa diviso possui 5 sees que devem aparecer na ordem especificada.


____________________________________________________________________________________________
Verso 1

19

Cobol
Caso alguma no seja necessria, deve ser omitida:
1 FILE SECTION.
2 WORKING-STORAGE SECTION.
3 LINKAGE SECTION.
4 COMMUNICATION SECTION (estabelece ligaes entre o programa cobol e
programa de controle de teleprocessamento).
5 REPORT SECTION (descreve relatrio que o programa deve emitir).

6.1 FILE SECTION


Descreve o contedo e a organizao dos arquivos.
O primeiro nvel na FILE SECTION por intermdio de uma entrada (FD
FILE DESCRIPTION).
Cada FD descreve o arquivo do Select.
O segundo nvel descrito por uma entrada 01.

Indicador

Uso

FD

descrio de arquivos

SD

descrio de sort-files

RD

descrio de relatrios

CD

descrio de comunicao

O formato dos nmeros e nveis servem para estruturar logicamente o registro.


As subdivises de um registro so itens elementares (no possuem
subdivises) e itens de grupo.

Os nmeros de nveis comeam em 01 ou 1 e vo at 49. Exemplo:


<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
FD CARTOES
XXXXXXXXXXXXXXXXX.
01 RECIBO.
02 IDENTIFICACAO.
03 PREFIXO
03 RESTO
02 NUMERO
02 FILLER

PIC
PIC
PIC
PIC

X(02).
X(05).
9(03).
X(50).

____________________________________________________________________________________________
Verso 1

20

Cobol
(FD) indicador
(01), (02), (03) nmeros de nvel
(IDENTIFICACAO), (RECIBO) itens de grupo
(PREFIXO), (RESTO), (NUMERO), (FILLER) itens elementares

6.1.1 Nveis especias (2 tipos)


Nveis:
(77) designa itens da WORKING-STORAGE SECTION que no so
subdivisores de outros e por sua vez no so subdivididos. Quando aparecerem
devem ser descritos obrigatoriamente dentro da WORKING-STORAGE SECTION.
O item (77) serve para definir acumuladores e reas auxiliares.
Exemplo:
WORKING-STORAGE SECTION.
77

ACU-LIDOS

PIC 9(05) VALUE 0.

77

AUX-NOME

PIC X(20).

(88) -> especifica condies que devem ser associadas a valores particulares.

Exemplos:
01 WRK-REG.
02

77

WRK-SEXO

PIC X(01).

88 FEMI

VALUE F.

88 MASC

VALUE M.

WRK-REG

PIC 9(05)

VALUE

ZEROS

COMP-3.

88

MASC

VALUE

THRU

10.

88

FEMI

VALUE

15

THRU

30

35

THRU

40.

88

FEMI

VALUE

50.

Os valores definidos no nvel 88 devem estar em ordem crescente.

____________________________________________________________________________________________
Verso 1

21

Cobol

6.1.2 FILE DESCRIPTION (FD)


a descrio do arquivo.
Formato:

FD NOME-DO-ARQUIVO
BLOCK CONTAINS (quantidade de blocos)
RECORD CONTAINS (tamanho do registro lgico)
RECORDING MODE (formato do arquivo)
LABEL RECORD (formato do label)
DATA RECORD (nome do registro).
6.1.2.1 BLOCK CONTAINS
(BLOCK CONTAINS 9999 RECORDS)
Especifica o tamanho do registro fsico.
Se for colocado zero (0), assume informaes do carto DD.
Se no for colocado RECORDS, assume CHARACTERS.
6.1.2.2 RECORD CONTAINS
(RECORD CONTAINS 9999 CHARACTERS)
Especifica o tamanho do registro lgico.
Se esta clusula for colocada, feita uma conferncia pelo compilador,
somando a quantidade de bytes da definio do registro.
6.1.2.3 RECORDING MODE
(RECORDING MODE IS X)
Designa o formato do arquivo:
-

(F) -> comprimento fixo

(V) -> comprimento varivel

(U) -> indefinido

(S) -> estendido (spanned)


Se no for colocada a clusula RECORDING MODE, o compilador

determinar pelo carto DD ou catlogo.

____________________________________________________________________________________________
Verso 1

22

Cobol

Para arquivos sequenciais usar : F, V ou S;


Para arquivos de acesso direto usar: F, U ou S.

6.1.2.4 LABEL RECORD


(LABEL RECORD IS XXXXXXXX)
Especifica o formato do label.
Quando omitido assume LABEL STANDARD.
-

STANDARD -> padro

OMITTED -> omitido


Para impressora, leitora de cartes, perfuradoras, usar OMITTED, pois no

possuem LABELS. Os demais casos usar STANDARD.


6.1.2.5 DATA RECORD
(DATA RECORD IS NOME-DO-DADO-1)
(DATA RECORD ARE NOME-DADO-1, NOME-DADO-2, ...)
Serve apenas como documentao, identificando os registros do arquivo pelo
nome.
Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
DATA DIVISION.
FILE SECTION.
FD FITA
RECORDING MODE IS F
LABEL RECORD IS STANDARD
RECORD CONTAINS 80 CHARACTERS
BLOCK CONTAINS 20 RECORDS
DATA RECORD IS RECIBO.
01 RECIBO.
02 NOME
02 VALOR
02 FILLER

PIC X(30).
PIC 9(03)V9(02).
PIC X(05).

6.1.3 CLUSULA PICTURE (PIC)


usada para descrio de informaes sobre itens, tais como: tamanho, sinal,
tipo (numrico, alfanumrico ou alfabtico).
____________________________________________________________________________________________
Verso 1

23

Cobol
Picture possveis:
-

ALFABTICO -> representado por letras mais o espao, e o carcter


usado a letra A.
Exemplos:

77

DADO1

PICTURE

IS

AAA

VALUE

ABC.

77

DADO2

PIC

IS

AAA

VALUE

ABC.

77

DADO3

PIC

VALUE

BCD.

A(3)

ALFANUMRICO -> representado por letras, nmeros e caracteres do


Cobol. O caracter usado a letra X. A representao de dados no pode
exceder a 120 caracteres.
Exemplos:

01

DADO1

PIC XXX

01

DADO2

PIC X(04) VALUE

VALUE

ANO.
KKKK.

NUMRICO -> usa-se para representao exclusiva de itens numricos. Os


caracteres usados so: 9, V, P, S.

9 = utilizado para indicar a posio do campo que contm


um dgito de 0 a 9.
V = usado para mostrar a posio da vrgula decimal. O
ponto decimal, se colocado, no faz parte do item.
P = representa um dgito numrico zero (0).
S = indica a presena de sinal, deve ser colocado antes do
9.

EDIO -> utiliza-se para itens que devem ser impressos ou enviados para
tela de programas on-line. So definidos na WORKING-STORAGE
SECTION.
O formato representado por qualquer combinao dos seguintes

caracteres:
(9), (V), (P), (.), (Z), (*), (CR), (DB), (,), (0), (B), ($), (+), (-)
____________________________________________________________________________________________
Verso 1

24

Cobol

(9), (V), (P) -> so usados de maneira semelhante ao uso dos itens numricos;
(.) -> o ponto decimal, quando usado, inserido na posio indicada;
(Z) -> indica a supresso de zeros no significativos;
(*) -> usado como proteo de um nmero impresso;
(CR), (DB) -> significam CR (crdito) e DB (dbito). Usa-se somente quando o
nmero for negativo. Caso o nmero seja positivo, no aparecer nada;
(,), (0), (B) -> so smbolos de edio que so inseridos na impresso;
($), (+), (-) -> so impressos na posio indicada.

OBS: O smbolo (-) no dever ser o prximo sinal aps o ponto. Caso isso
ocorrer, definir mais um (-). Exemplo:

01

CAMPO

PIC --.---.---,99.

Definio

Picture

Valor Real

Na memria

9(04)
9V9(2)
9(03)
S9(02)
9(05)
9(04)V99
9(03)
9(03)
9(03)
S9(03)V99
9(04)
9(06)
9(03)
S9(02)
S9(02)
S9(02)
S9(02)
S9(02)
S9(04)

9999
9V99
999PP
S99
99.999
Z.ZZZ,99
ZZZ
**9
***
999,99CR
990099
99B99B99
$999
-99
-99
+99
+99
99-.--9

502
1,25
43700
-21
10.987
25,50

502
125
437
2110987
002550
000
422
000
80000(-)
1125
121315
371
15(-)
16
15(-)
16(+)
15(-)
0012(-)

422
***
800,00CR
110025
12 13 15
$371
-15
16
15
+16
15-12

____________________________________________________________________________________________
Verso 1

25

Cobol

OBS: caso tenha que utilizar o caracter , para se fazer


entendido ao Cobol, define-se dentro das aspas duplas.
Exemplo:
77 ASPA PIC X(01) VALUE .

6.1.4 CLUSULA FILLER


usada para um item elementar ou um item de grupo, e nunca ser
refenciado. Pode ser usada na DATA DIVISION e suas SECTIONS.
Exemplo:
01

REGISTRO.
02

FILLER

PIC X(100).

6.1.5 CLUSULA VALUE


usada para definir um valor inicial para um item da WORKING-STORAGE
SECTION. No pode ser usada na FILE SECTION.
Exemplo:
01 CABEC.
02

FILLER

PIC X(10)

VALUE

SPACES.

02

FILLER

PIC X(06)

VALUE

FOLHAS.

02

DATA

PIC X(10)

VALUE

SPACES.

6.2 WORKING-STORAGE SECTION

Esta seo descreve informaes sobre as reas de


trabalho, descrio de tabelas, rea para DB2, lay-out, etc.

____________________________________________________________________________________________
Verso 1

26

Cobol

6.2.1 OPO COMPUTATIONAL (COMP)


S podem ser usados para itens numricos (COMP, COMP-1, COMP-2,
COMP-3, COMP-4).
6.2.1.1 COMP ou COMP-4 (binrio):
Bytes = 2 se tamanho do campo com COMP for de 1 a 4;
Bytes = 4 se tamanho do campo com COMP for de 5 a 9;
Bytes = 8 se tamanho do campo com COMP for de 10 a 18;
Se quiser valorizar um campo binrio este deve estar em formato decimal.
Exemplo:
01 VALOR1

PIC 9(03) COMP.

01 VALOR3

PIC 9(04) COMP VALUE 1234.

(Memria = 04D2)

01 VALOR5 PIC 9(07) COMP VALUE 499701. (Memria = 00079FF5).

6.2.1.2 COMP-1 e COMP-2 (ponto-flutuante):


Usados para ponto flutuante interno.
usado nos registradores = 0,2,4,6.
COMP-1 = 4 bytes de preciso simples.
COMP-4 = 8 bytes de preciso dupla.
6.2.1.3 COMP-3 (compactado)
decimal interno (compactado). Campos at 18 dgitos ou 10 bytes. 1 byte usa
2 dgitos ou 1 dgito mais o sinal.
Exemplos:
01

VALORA

PIC 9(05) COMP-3 VALUE 4321. (Memria = 04 32 1F)

01

VALORB

PIC S9(05) COMP-3 VALUE +486. (Memria = 00 48 6C).

6.2.2 CLUSULA JUSTIFIED


Posiciona itens alfabticos ou alfanumricos a direita no campo receptor.

Quando item emissor maior ser truncado a esquerda e quando menor


preenchidos com brancos.
Exemplos:
____________________________________________________________________________________________
Verso 1

27

Cobol
01

DADOS

PIC X(10)

JUSTIFIED RIGHT.

01

DADOS

PIC X(10)

JUST

MOVE CAMPOX

TO

CAMPOX = JOAO

RIGHT.

DADOS

DADOS =40 40 40 40 40 40 D1 D6 C1 D6

6.2.3 CLUSULA REDEFINES


usada para redescrever uma rea.
A redefinio dever conter a mesma quantidade de bytes do campo ou rea
anterior e estar no mesmo nvel.

01 REGISTRO.
03
03

03

03

ALPINO

PIC X(06).

BETA.
05

LETRA

PIC X(04).

05

NUM

PIC 9(02).

ALFA

REDEFINES

05

AUT

PIC 9(01).

05

LIVRE

PIC X(05).

ZUM

BETA.

PIC X(08).

6.2.4 CONSTANTES FIGURATIVAS


So constantes definidas pelo compilador.

Constantes figurativas

Picture aplicveis

ZERO

ALFANUMRICAS

ZEROS

OU

ZEROES

NUMRICAS

SPACE

ALFABTICAS

SPACES

OU ALFANUMRICAS

____________________________________________________________________________________________
Verso 1

28

Cobol
HIGH-VALUE (MAIOR VALOR)

ALFANUMRICAS

HIGH-VALUES
QUOTE (APSTROFE)

ALFANUMRICAS

QUOTES
ALL CARACTER ALFANUMRICO

ALFANUMRICAS

LOW-VALUE (MENOR VALOR)

ALFANUMRICAS

LOW-VALUES

6.3 LINKAGE SECTION


utilizada para pegar dados pelo PARM.GO ou ligar o programa a outros
programas.
-

so vlidas as regras referentes as apresentadas na WORKING-STORAGE


SECTION;

a clusula VALUE somente pode ser especificada para itens de nvel 88;

assume-se que para cada item passado tem que ser de nvel 01 ou nvel
77 (limite de full-word);

pelo PARM pode ser passado at 100 caracteres (bytes).

para definio da LINKAGE SECTION, quando for pego algum dado pelo
PARM, os dois primeiros bytes devem ser definidos como binrio, pois
estes bytes contero o tamanho do PARM.

Exemplo:
LINKAGE SECTION.
01 PARAMETROS.
03
03

TAMANHO
DATA-PARM

PIC 9(04) COMP.


PIC 9(08).

quando se faz ligao entre programas, o programa chamado, deve conter a


clusula LINKAGE SECTION, e seus referidos campos de definio.
Quanto ao programa chamador, este deve conter os mesmos campos da

____________________________________________________________________________________________
Verso 1

29

Cobol
LINKAGE na WORKING-STORAGE, sendo obrigatrio os campos a
serem passados, estarem na mesma ordem do programa chamado.
-

No

exemplo

acima,

PARAMETROS

aps

os
a

dados
clusula

sero

jogados

PROCEDURE

do

PARM

DIVISION

para

USING

PARAMETROS.

____________________________________________________________________________________________
Verso 1

30

Cobol

____________________________________________________________________________________________
Verso 1

31

Cobol

7. PROCEDURE DIVISION

Contm comandos executveis do programa, isto , os


procedimentos a serem executados.

7.1 CLUSULA OPEN


Abre arquivo de entrada e sada. Formato:
OPEN

INPUT (NOME-ARQUIVO-1) (NOME-ARQUIVO-2)


OUTPUT (NOME-ARQUIVO-3)
I-O

(NOME-ARQUIVO-4)

INPUT -> arquivos de leitura


OUTPUT -> arquivos de gravao e impresso
I-O -> arquivos de acesso-direto (leitura e gravao)

____________________________________________________________________________________________
Verso 1

32

Cobol

7.2 CLUSULA READ


Ler um registro do arquivo de entrada.
Formato:
READ (NOME-ARQUIVO).
ou
READ (NOME-ARQUIVO) INTO (AREA-LAYOUT).
ou
READ (NOME-ARQUIVO) INTO (AREA-LAYOUT)
AT END
GO TO 100-99-FIM.

NOME-DO-ARQUIVO -> definido por uma descrio na FD

INTO -> faz com que o registro seja lido e movido para rea definida dentro
da WORKING-STORAGE ou LINKAGE SECTION.
AT END -> uma das opes para o controle de fim de arquivo.

7.3 CLUSULA WRITE


Transfere um registro do programa para um arquivo de sada ou impressora de
relatrios.
Formato:

WRITE (NOME-REGISTRO) FROM (AREA-1)


AFTER/BEFORE ADVANCING (INTEIRO) LINES
- FROM -> faz com que uma rea seja movida da WORKING-STORAGE
SECTION para o registro, e seja gravado ou impresso.
- ADVANCING -> refere-se ao controle do posicionamento vertical de cada
linha, se no for usado o salto automtico de linhas no programa. No podem ser
usados os dois controles no mesmo programa.
- AFTER ou BEFORE -> o controle de salto. O AFTER indica que primeiro
pula a quantidade de linhas especificadas ou (salta de pgina) para depois imprimir.
O BEFORE primeiro imprime para depois saltar de linhas ou (pular de pgina).
____________________________________________________________________________________________
Verso 1

33

Cobol
Exemplos:
WRITE RELATORIO FROM CABEC1 AFTER ADVANCING 2 LINES.
WRITE AREA-ATUAL.
WRITE CADASTRO FROM REG-CAD.
O WRITE s deve ser dado em cima do nvel 01.
WRITE

SAIDA

FROM

AREA-1.

FILE SECTION.
01 SAIDA.
XXXXXXX
WORKING-STORAGE SECTION.
01 AREA-1.
XXXXXXXXXXXX

7.3.1 OPO ADVANCING


C01 at C09

Salto do canal 1 at 9

C10 at C12

Salto do canal 10, 11 e 12

Se um nmero inteiro for usado (1 a 100) sero saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
WRITE RELATORIO FROM

CABEC1

AFTER ADVANCING CANAL-1.

WRITE RELATORIO FROM

LIN-DET1

AFTER ADVANCING 2 LINES.

____________________________________________________________________________________________
Verso 1

34

Cobol

7.3.2 OPO AFTER POSITIONING


Deve ser declarada como caracter alfanumrico (PICTURE X).

Por exemplo, na impresso do cabealho de um relatrio:


FD IMPRESSAO
LABEL OMITTED
RECORDING F
BLOCK 0.

01 RELATORIO.
02 CARRO

PIC

X(01).

02 FILLER

PIC

X(132).

WORKING-STORAGE SECTION.
01 CABEC1.
02 FILLER

PIC X(01)

VALUE 1.

02 DATA

PIC X(10)

VALUE SPACES.

02 FILLER

PIC X(40)

VALUE SPACES.

02 FILLER

PIC X(30)

VALUE

PROGRAMA DE INCLUSAO DE TITULOS.


02 FILLER

PIC X(44)

VALUE SPACES.

02 HORA

PIC X(08)

VALUE SPACES.

.............
PROCEDURE DIVISION
.........
WRITE RELATORIO FROM CABEC1 AFTER POSITIONING CARRO.
WRITE RELATORIO FROM CABEC1 AFTER POSITIONING 2 LINES.
WRITE RELATORIO FROM CABEC1.
Branco

Espacejamento simples

____________________________________________________________________________________________
Verso 1

35

Cobol
Zero

Espacejamento duplo

Menos

Espacejamento triplo

Mais

Supresso do espacejamento

1 a 9

Salto do canal 1 a 9

A, B, C

Salto do canal 10, 11 e 12

No POSITIONING, o mximo de linhas que se pode pular so 3 (trs);

No deve-se utilizar AFTER e BEFORE no mesmo programa.

AFTER = salta primeiro, depois imprime;

BEFORE = imprime primeiro, depois salta a linha.

7.4 CLUSULA CLOSE


O CLOSE utilizado para fechar os arquivos que foram abertos. Quando este
comando no for utilizado, o prprio sistema se encarregar de fech-los. Formatos:
CLOSE normal p/ disco e fita:

CLOSE CARTAO

7.5 CLUSULA STOP RUN


Termina o processamento de um programa.
Formato:
STOP RUN.

Este comando obrigatrio, podendo existir mais de um comando dentro do


mesmo programa.
____________________________________________________________________________________________
Verso 1

36

Cobol

7.6 CLUSULA GOBACK


Termina o processamento de uma ligao entre programas, ou pode ser
utilizado como o STOP RUN.
Muito utilizado em programas on-line e mdulos.
Formato:
GOBACK.

Exemplo:
IDENTIFICATION DIVISION.
...............
LINKAGE SECTION.
...............
PROCEDURE DIVISION.
..............
GOBACK.

7.7 CLUSULA GO TO
Permite a transferncia da parte do programa que est sendo executada para
uma outra.
Formato:
LEITURA.
......... AT END
GO

TO

FIM-LEITURA.

.............................
FIM-LEITURA.

____________________________________________________________________________________________
Verso 1

37

Cobol

Indica-se para uma melhor estruturao da lgica e do


programa, no executar o comando GO TO para desviar para fora
da rotina em que foi colocado.

7.8 CLUSULA MOVE


Este comando faz a movimentao de dados dentro do programa.

Formato 1:
MOVE (CAMPO-1)

TO

(CAMPO-2)

(CAMPO-3)

Exemplo:
WORKING-STORAGE SECTION.
01

DADO-A

PIC

X(05)

01

DADO-2

PIC

X(05).

01

DADO-3

PIC

X(05)

01

DADO-4

PIC

X(05).

VALUE ABC.
VALUE

SPACES.

...........................
PROCEDURE DIVISION.
MOVE DADO-A

TO

DADO-2.

MOVE DADO-A

TO

DADO-3

DADO-4.

Formato 2:
MOVE CORRESPONDING (CAMPO-1)

TO

(CAMPO2)

MOVE CORR

TO

(CAMPO2)

(CAMPO-1)

O MOVE CORRESPONDING ou MOVE CORR movimenta dados entre itens


elementares de mesmo nome, bastando para tanto, citar os itens de grupo
correspondentes.

Exemplo:
WORKING-STORAGE SECTION.
01

CAMPO-1.

____________________________________________________________________________________________
Verso 1

38

Cobol

01

03

NOME

PIC X(05).

03

ENDER

PIC X(10).

CAMPO-2.
03

ENDER

PIC X(10).

03

NOME

PIC X(05).

....................
PROCEDURE DIVISION.
MOVE

CORR

CAMPO-1

TO

CAMPO-2.

Exemplo com literais figurativas:


MOVE

SPACES

TO

WS-AREA-LIVRE

MOVE

ZEROS

TO

DATA-8

MOVE

120

TO

NUMERO-FIXO

MOVE

CREDITO TO

WS-CONTABIL

MOVE

FAVOR

WS-CABEC1

TO

CABEC2.

7.8.1 CLUSULA OF no COMANDO MOVE


Usa-se esta clusula para campos com nomes iguais, definidos em itens de
grupo com nomes diferentes.
Formato:
MOVE

WS-MES

TO

MES

OF

REGISTRO-1.

Exemplo:
WORKING-STORAGE SECTION.
01 TABELA-1.
03

NOME

PIC X(05).

03

ENDER

PIC X(10).

01 TABELA-2.
03

ENDER

PIC X(10).

____________________________________________________________________________________________
Verso 1

39

Cobol
03
01

NOME

PIC X(05).

SELECIONADO

PIC

X(10).

....................
PROCEDURE DIVISION.
MOVE

ENDER

OF TABELA-2

MOVE

SELECIONADO

TO

SELECIONADO

TO

ENDER OF

TABELA-1.

....................

Na movimentao de itens no-elementares, tratado no


Cobol como item alfanumrico, isto , todo item de grupo um
item alfanumrico.

Se o item receptor for alfanumrico, alfanumrico de


edio ou item alfabtico:
-

as posies no preenchidas pelo contedo do campo


emissor,

so

preenchidas

automaticamente

com

espaos;
-

Se o tamanho do campo emissor for maior que o campo


receptor, os caracteres em excesso sero truncados;

Se o item emissor possuir sinal, o valor absoluto ser


adotado pelo item receptor.

Se o item receptor for numrico ou numrico de edio:


-

O caracter ponto decimal (.) ser alinhado;

Os caracteres so preenchidos pelo item emissor com


zeros, exceto quando os zeros forem substitudos por
caracteres de edio;

O valor absoluto do item emissor ser aceito da maneira


que o item receptor estiver formatado, a direita ou a
esquerda do ponto decimal. Os dgitos em excesso sero
truncados;

Se o item emissor for no-numrico, os resultados sero


imprevisveis.

____________________________________________________________________________________________
Verso 1

40

Cobol
Quando

um

comando

MOVE

executado,

qualquer

converso da representao de dados, quanto possvel, feita.

7.9 CLUSULA ADD


Esta clusula vlida somente para itens elementares numricos.
Por ela, so somados dois ou mais operandos e o resultado guardado numa
varivel definida pelo programa.

Formato 1:
ADD (IDENT-1)

TO

(IDENT-2).

Nesta forma, soma-se o contedo do IDENT-1 e do IDENT-2. O resultado da


soma ficar no IDENT-2.

Formato 2:
ADD (IDENT-1) (IDENT-2) TO (IDENT-N)
ADD

(NUM-1)

(NUM-2)

ROUNDED

(IDENT-N)

ON

SIZE

ERROR

(sentena imperativa).
Os campos IDENT-1 e IDENT-2 sero somados e o resultado ainda ser
somado em IDENT-N.

Formato 3:
ADD (IDENT-1) (IDENT-2) (IDENT-3) GIVING (IDENT-N).

Os contedos dos campos IDENT-1, IDENT-2 e IDENT-3 sero somados


(IDENT-1 + IDENT-2 + IDENT-3) e o resultado ficar em IDENT-N.

Formato 4:
ADD CORRESPONDING
ADD CORR

(IDENT-1)

(IDENT-1)

TO (IDENT-2)

TO (IDENT-2).

Neste caso, IDENT-1 e IDENT-2 so itens de grupo. Os itens elementares


contidos nestes itens de grupo sero somados e o resultado ficar em IDENT-2.
____________________________________________________________________________________________
Verso 1

41

Cobol
Nesta opo, os itens elementares dentro dos nveis de grupo s podem ser
somados, caso haja correspondncia de nomes.

Exemplo:
01

CAMPO-1.

01

03

PIC

9(03)V(02).

03

PIC

9(04).

CAMPO-2.
03

PIC

9(03)V9(02).

03

PIC

9(04).

ADD

CORR

CAMPO-1

TO

CAMPO-2.

Efetuar as seguintes operaes:


(A do CAMPO-1 + A do CAMPO-2 )= S1
(B do CAMPO-1 + B do CAMPO-2 )= S2
No CAMPO-2 sero armazenados os resultados:
A do CAMPO-2 = S1
B do CAMPO-2 = S2

Outros exemplos:

Suponhamos A = 1, B=2, C=3 e D=4.


ADD A B

TO

C D.

(Clculo 1 = A + B + C = S1
C = S1 = 6

Clculo 2 = A + B + D = S2

/ D = S2 = 7)

ADD A TO B.
(A + B = S1
ADD A

(A + C = S1

/ B = S1 = 3)
GIVING

/ D = S1 = 4)

____________________________________________________________________________________________
Verso 1

42

Cobol

Nos casos acima os identificadores que sucedem a TO


ou GIVING podem ser itens elementares numricos de
edio.

O tamanho mximo de cada operando num campo


numrico de 18 dgitos.

7.9.1 OPO ROUNDED


Quando a opo ROUNDED for colocada, haver uma aproximao para dgito
menos significativo do operando. Ser somado um (1) a este dgito, se o dgito, mais
significativo a ser truncado for maior ou igual a cinco (5). Esta opo s vlida para
casa decimal.
Exemplos:
CAMPO-1 = 1,99
CAMPO-2 = 0,3
Dividindo o CAMPO-1 pelo CAMPO-2, teremos: 6,6333... o campo receptor
ficar = 6,63.

CAMPO-3 = 1,25
CAMPO-4 = 0,3
Dividindo o CAMPO-3 pelo CAMPO-4, resultaria em 4,2666...., ficando o
campo receptor = 4,27.

Formato:
ADD CAMPO-3

TO

CAMPO-4

ROUNDED.

A opo ROUNDED dever preceder o campo receptor.

7.9.2 OPO ON SIZE ERROR


Se antes do ponto decimal, o valor do resultado exceder o nmero de dgitos
disponveis do operando definido para conter o resultado, ser desviado para
sentena imperativa e os valores permanecero inalterados.
Exemplo:
____________________________________________________________________________________________
Verso 1

43

Cobol
ADD

TO

GIVING

ROUNDED

ON SIZE ERROR GO TO ERRO.


A opo ON SIZE ERROR deve sempre preceder o campo receptor.

7.10 CLUSULA SUBTRACT

Esta clusula utilizada para subtrair um ou somar dois ou


mais itens numricos para subtrair o resultado de outro ou mais
itens numricos.

Formato 1:
SUBTRACT

FROM

No clculo acima, faz-se = (B A) e o resultado fica em B.

Formato 2:
SUBTRACT

(IDENT-1)
FROM

(IDENT-2) ....

(IDENT-M)

ROUNDED

(IDENT-N)

ON SIZE ERROR (SENTENA IMPERATIVA).

Formato 3:
SUBTRACT

(IDENT-1)
GIVING

(IDENT-2) FROM

(IDENT-M)

(IDENT-N).

Fomato 4:
SUBTRACT CORR

(IDENT-1)

FROM

(IDENT-2)

____________________________________________________________________________________________
Verso 1

44

Cobol
CORRESPONDING

No formato 2, todos os identificadores (IDENT-X) antes da palavra FROM so


somados, e o total subtrado dos identificadores M e N. O resultado fica em M e
N.

Exemplo:
SUBTRACT A B

FROM D C.

So feitas as seguintes operaes para o comando acima:


1) D (A + B), o resultado colocado em D.
2) C (B + A), o resultado colocado em C.

No formato 3, todos os identificadores (IDENT-X) que precedem a palavra


FROM so somados, o resultado subtrado do operando aps a palavra FROM. O
resultado colocado no operando aps a palavra GIVING.
Exemplo:
SUBTRACT H

J FROM L

GIVING

N.

Operaes efetuadas acima:


L (H + I + J), o resultando colocado em N.

No formato 4, temos como exemplo:


01

01

A.
02

PIC 9(04).

02

PIC 99.

02

PIC 9(04).

02

PIC 99.

D.

SUBTRACT

CORR

FROM

D.

Operaes que sero efetuadas:


____________________________________________________________________________________________
Verso 1

45

Cobol
1) B(D) - B(A), e o resultado colocado em B(D)
2) C(D) - C(A), e o resultado colocado em C(D).

7.11 CLUSULA MULTIPLY (multiplicao)

Esta clusula usada para multiplicar um item numrico


por outro numrico.

Formato 1:
MULTIPLY

BY

B.

A multiplicao feita A por B, e o resultado colocado em B.

Formato 2:
MULTIPLY

BY

GIVING

C.

A multiplicao feita A por B e o resultado colocado em C.


O campo C pode ser uma picture numrica de edio.

Formato 3:
MULTIPLY (IDENT-1)

BY

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENA IMPERATIVA).

Formato 4:
MULTIPLY (IDENT-1)

BY

(IDENT-2)

GIVING

(IDENT-3)

ROUNDED ON SIZE ERROR (SENTENA IMPERATIVA).

____________________________________________________________________________________________
Verso 1

46

Cobol

7.12 CLUSULA DIVIDE (diviso)

Esta clusula utilizada para efetuar o comando de


diviso entre campos de itens numricos.

Exemplo/formato 1:
DIVIDE

BY

B.

Dividendo = A
Divisor = B
Quociente = B

Operaes que sero efetuadas acima = (A / B) = R1


B = R1

Exemplo/formato 2:
DIVIDE

INTO

B.

Dividendo = B
Divisor = A
Quociente = B

Operaes que sero efetuadas acima = (B / A) = R1


B = R1

Exemplo/formato 3:

____________________________________________________________________________________________
Verso 1

47

Cobol
DIVIDE

BY

GIVING

C.

Operaes que sero efetuadas acima = (A / B) = R1


C = R1
DIVIDE

INTO

GIVING

C.

Operaes que sero efetuadas acima = (B / A) = R1


C = R1

Formato 4:
DIVIDE

(IDENT-1)

BY

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENA IMPERATIVA).


DIVIDE

(IDENT-1)

INTO

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENA IMPERATIVA).

Formato 5:
DIVIDE

(IDENT-1)

BY(ou INTO)

(IDENT-3)

ROUNDED

(IDENT-2)
REMAINDER

GIVING

(IDENT-4).

7.12.1 OPO REMAINDER

utilizada para colocar o resto da diviso.

Exemplos:
DIVIDE

INTO

REMAINDER

C.

DIVIDE

INTO

GIVING

REMAINDER

D.

____________________________________________________________________________________________
Verso 1

48

Cobol
DIVIDE

BY

REMAINDER

C.

DIVIDE

BY

GIVING

REMAINDER

D.

7.13 CLUSULA COMPUTE

Operandos que a clusula compute pode executar:


-

Adio (+);

Subtrao (-);

Multiplicao (*);

Diviso (/);

Exponenciao (**).

Suponhamos que desejamos calcular uma taxa cujo valor de 5 percentuais


do capital:
COMPUTE TAXA = 0.05 * CAPITAL

Outros exemplos:
COMPUTE VALOR-A = TAXA * 0.15 + NUM / DIV.
COMPUTE RESULTADO = B * B * A.
COMPUTE EXPON = B ** 2.
COMPUTE CAMPO = CMP ** 3.1

COS / SEN * B.

COMPUTE Z = (A / B) * C.
COMPUTE RESULT1 RESULT2 RESULT3 = BRUTO * 3 / (15 CALC).

Formato 1:
COMPUTE (N) ROUNDED (M) ROUNDED...= (EXPRESSO ARITMETICA)
ON SIZE ERROR (SENTENA IMPERATIVA).
____________________________________________________________________________________________
Verso 1

49

Cobol

No compute, as operaes obedecem a hierarquia das


operaes. Caso se queira efetuar uma operao de nvel mais
inferior antes de uma superior, deve-se colocar a de nvel de
interesse primeiro entre parnteses.

Exemplo:
IF (CAMPO / 4 * 6)
MOVE

CAMPO

EQUAL (CAMPO2 * 2) / 4
TO

SAI-CAMPO.

As operaes aritmticas seguem a sua hierarquia, exceto quando estiverem


entre parnteses.

7.14 CLUSULA DISPLAY

Esta clusula serve para escrever dados em um dispositivo


de sada.

Formato 1:
DISPLAY TOTAL DE REGISTROS LIDOS = TOTAL-LIDOS.

Formato 2:
DISPLAY ACUM-GRAVADOS REGISTROS GRAVADOS UPON CONSOLE.
SYSPUNCH.
Quando for omitido UPON assume-se SYSOUT e dever ser colocado o
carto //SYSOUT no JCL.
____________________________________________________________________________________________
Verso 1

50

Cobol

Quantidade de caracteres (bytes) para cada tipo:


-

Console = 100 bytes;

Syspunch = 72 bytes;

Sysout = 120 bytes.

7.15 CLUSULA ACCEPT

Esta clusula executa uma operao de entrada.

Formato:
ACCEPT (IDENT)

FROM

SYSIN.
CONSOLE.
(NOME-MNEMONICO).

(NOME-MNEMONICO) = executa uma operao de entrada do computador


para um campo definido na WORKING-STORAGE SECTION.

Exemplos:
ACCEPT WS-DATA

FROM

DATE.

ACCEPT DADOS

FROM

SYSIN.

ACCEPT DATA-R

FROM

CONSOLE.

Exemplos para pedir data pelo CONSOLE:


DISPLAY DIGITE A DATA DO DIA: UPON CONSOLE.
DISPLAY NO FORMATO DD/MM/AAAA UPON CONSOLE.
ACCEPT DATA-DO-DIA

FROM

CONSOLE.

01 DATA-DO-DIA.

____________________________________________________________________________________________
Verso 1

51

Cobol
03

DIA

PIC 9(02).

03

FILLER

PIC X(01).

03

MES

PIC 9(02).

03

FILLER

PIC X(01).

03

ANO

PIC 9(04).

Ou
01 DATA-DO-DIA PIC X(10).

Exemplo:
01 REG-CAD.
03 CAD-NOME PIC X(40).
03 CAD-DATA PIC 9(08).
..........
ACCEPT REG-CAD

FROM

SYSIN.

............
O SYSIN utilizado para pegar dados de um arquivo SYSIN DD.
//........
//SYSIN DD *
ARQUIVODT4573
Ou
//SYSIN DD DSN=V.POOL.ARQDATA(0),DISP=SHR

7.16 CLUSULA IF

Esta clusula indica a deciso de um programa.

Formato:
IF

(CONDIO)

(SENTENA-1)

ELSE

(SENTENA-2)

____________________________________________________________________________________________
Verso 1

52

Cobol

Exemplo:

Um programa Cobol poderia testar o rendimento mensal da seguinte forma:


IF

RENDIMENTO
GO

EQUAL

1000,00 OR GREATER 1000,00

TO

DESCONTO-MAX

TO

DESCONTO-MIN.

ELSE
GO

Neste exemplo, o programa indica a existncia de uma deciso escrevendo a


palavra IF, seguida de palavras que contenham um teste e o que fazer conforme o
resultado do teste significando uma frase condicional.
Outros exemplos:
IF

VALOR
GO

IS

NEGATIVE

TO

FIM-ROTINA

TO

INICIO-ROTINA

ELSE
GO
END-IF
IF

NOME NOT EQUAL PEDRO


NEXT SENTENCE

ELSE
ADD 1

TO

CONT-NOME-IGUAL.

MOVE CONT-NOME-IGUAL

TO

RELATORIO-NOME-IGUAL.

____________________________________________________________________________________________
Verso 1

53

Cobol

O NEXT SENTENCE determina que nada ser feito e


deve-se continuar o processo aps o primeiro ponto final ou ENDIF encontrado.

Toda sentena condicional possui 4 elementos:

IF TESTE
AO

VERDADEIRA

ELSE
AO

FALSA.

Tipos de testes:
-

teste de condio de classe;

teste de nome-de-condio;

teste de condio de relao;

teste de sinal.

7.16.1 TESTE DE CONDIO DE CLASSE


Testa o contedo de um campo, se alfabtico ou numrico.

Formato:
IF

(IDENT)

IS

NUMERIC

IS NOT ALPHABETIC

Exemplo:
IF

CONTA
COMPUTE

IS

NUMERIC

SALDO = SALDO-TOTAL TAXAS

ELSE
DISPLAY CONTA NO NUMRICA, DIGITAR NOVAMENTE.

____________________________________________________________________________________________
Verso 1

54

Cobol

Quando testar se um campo numrico, e este for


compactado, tomar cuidado com o sinal (C). Nestes casos, colocar
o indicador de sinal (S) na frente dos 9s.

Exemplo:
01 CAMPO

9(08).

01 CAMPO

9(05)

01 CAMPO

S9(07) COMP-3.

COMP-3.

7.16.2 TESTE DE NOME-DE-CONDIO


Efetua comparao usando palavras significativas, associadas a um nvel 88.
Definio:
01 WS-AREA.
03

NOME

PIC X(30).

03

CODIGO

PIC 9(06).

03

STATUS

PIC 9(01).

88

HOMEM

VALUE

1.

88

MULHER

VALUE

2.

88

ERRO

VALUE

3 THRU 9.

.................
PROCEDURE DIVISION.
IF HOMEM
GO

TO

PROCED-HOMEM.

IF MULHER
GO

TO

PROCED-MULHER.

IF ERRO
GO

TO

PROCED-ERRO.

7.16.3 TESTE DE CONDIO DE RELAO


Efetua comparao entre dois (2) operandos.
____________________________________________________________________________________________
Verso 1

55

Cobol

Formato:
IF (IDENT-1) ou (LITERAL-1) ou (EXPRESSO ARITMTICA-1)
OPERADOR DE RELAO
(IDENT-2) ou (LITERAL-2) ou (EXPRESSO ARITMTICA-2)
OPERAO DE RELAO

SIGNIFICADO

IS (NOT) GREATER (THAN)

MAIOR QUE

OU

NO MAIOR QUE

MENOR QUE

OU

NO MENOR QUE

IS (NOT) >
IS (NOT) LESS (THAN)
IS (NOT) <
IS (NOT) EQUAL TO

IGUAL

OU

NO IGUAL

IS (NOT) =

Exemplos:
IF

IF

IF

AC-LINHA

GREATER 50

GO

ROTINA-CABECALHO.

TO

CODIGO

MOVE

CODIGO

VALOR

NOT

TO

LESS

REG-CODIGO.
SALDO

PERFORM ROT-GRAVA.

7.16.4 TESTE DE CONDIO DE SINAL


Sua funo determinar o valor algbrico de um operando aritmtico.
Formato:
IF (IDENT-1)

IS

POSITIVE

IF (EXPRESSO ARITMTICA) IS

NOT NEGATIVE
ZERO (ZEROS)

Exemplo:
IF VALOR

IS POSITIVE

____________________________________________________________________________________________
Verso 1

56

Cobol
MOVE VALOR

TO

SAI-VALOR

ADD

TO

AC-VALOR.

VALOR

Exemplo 1 clusula IF:


IF

NUMERO

GREATER THAN

B ** 2 1

NEXT SENTENCE
ELSE
GO
IF

IF

TO

ROT-MOVIMENTA.

NUM-2

IS

NEGATIVE

GO

TO

ERRO.

VALOR 3
MOVE

EQUAL

SALDO

TO

SALDO
SALDO-SAIDA.

Exemplo 2 clusula IF:


IF

VALOR
IF

IS NUMERIC

VALOR
IF

IS

ZEROS

DADO

IS NEGATIVE

MOVE

CAMPO VALIDO

TO

MENSAGEM

ELSE
GO

TO

ROT-LEITURA

ELSE
NEXT SENTENCE
ELSE
GO

TO

INICIO.

7.17 CLUSULA PERFORM

____________________________________________________________________________________________
Verso 1

57

Cobol

Esta clusula ocasiona a execuo de um ou mais


procedimentos.

Aps a execuo dos procedimentos (pargrafos), o controle volta para a


instruo seguinte a do PERFORM.

Formato (simples):
PERFORM

(PARAGRAFO-1)

THRU

(FIM-PARAGRAFO-1).

PERFORM

(PARAGRAFO-1)

THRU

(PARAGRAFO-2).

PERFORM

(PARAGRAFO-1).

Exemplo:
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
PERFORM

ROT-ABC THRU

MOVE

TO

FIM-ROT-ABC.

STOP RUN.
.....
ROT-ABC.
MOVE CAMPO-1

TO

SAI-CAMPO

COMPUTE SAI-VALOR = (B * 2)
FIM-ROT-ABC.
ROT-DEF.
COMPUTE .....
FIM-ROT-DEF.
Podemos ter um PERFORM dentro de outro PERFORM:
INICIO.
____________________________________________________________________________________________
Verso 1

58

Cobol
PERFORM ROT-A

THRU

ROT-C.

TRHU

ROT-E.

..........
ROT-A.
.............
.............
ROT-B.
PERFORM ROT-D
ROT-C.
..........
..........
ROT-D.
.........
.........
ROT-E.
...........
Quando dividimos os pargrafos em SECTION, o CONDITION-CODE de
retorno estar na prxima SECTION ou no final da PROCEDURE.

Neste caso, voc s poder usar o GO TO para desvios dentro da mesma


SECTION, pois assim, no haver o risco de destruir o CONDITION-CODE de
retorno.

Exemplo:
00-INICIO SECTION.
00-00-A.
MOVE

TO

AC-VALOR.

PERFORM 10-LEITURA-CARTAO.
IF

CHAVE-FIM

EQUAL

GO

00-00-A.

TO

NAO

.............
00-99-FIM.
EXIT.

____________________________________________________________________________________________
Verso 1

59

Cobol
10-LEITURA-CARTAO SECTION.
READ

REGCAD

AT

END

MOVE

FIM

GO
ADD 1
IF

TIPO

TO
EQUAL

TO

CHAVE-FIM

TO

10-99-FIM.

AC-LIDOS.

PERFORM 15-TIPO-4.
10-99-FIM.
EXIT.
15-TIPO-4 SECTION.
.............
15-99-FIM.
EXIT.

7.17.1 PERFORM - TIMES


um complemento da clusula PERFORM.

Como o PERFORM, esta clusula desvia-se da sequncia normal de execuo


para realizar um ou vrios procedimentos.

Formato:
PERFORM

(NOME-PROCEDIMENTO-1) THRU (NOME-PROCEDIMENTO-2)


(NUM-INTEIRO)
(NOME-DADO)

TIMES.

Com a opo TIMES , os procedimentos so realizados no nmero de vezes


especificados por NOME-DADO ou NUM-INTEIRO.
Em seguida, passa-se ao comando seguinte ao comando PERFORM.

____________________________________________________________________________________________
Verso 1

60

Cobol
Se

NOME-DADO ou NUM-INTEIRO for de valor negativo ou zero, o

comando PERFORM que conter a opo TIMES, no ser executado e o


processamento continuar aps o PERFORM.

Exemplo:
PERFORM CALCULAR

THRU

CALCULAR-FIM

5 TIMES.

.......................

ou
PERFORM CALCULAR

THRU

CALCULAR-FIM
VALOR-NUM

TIMES.

..........................
CALCULAR.
.............
..............
CALCULAR-FIM.

O pargrafo CALCULAR, ser executado 5 vezes ou dependendo do valor


contido em VALOR-NUM.

7.17.2 PERFORM UNTIL

____________________________________________________________________________________________
Verso 1

61

Cobol

Com a opo UNTIL, os procedimentos sero executados


at que a condio aps o UNTIL seja verdadeira.
No programa, ao encontrar a clusula UNTIL, primeiro
verficado se a condio do UNTIL j est satisfeita e depois
executa o PERFORM.

Formato:
PERFORM

(NOME-ROTINA-1)
UNTIL

THRU

(NOME-ROTINA-2)

(CONDIO)

ou
PERFORM

(NOME-ROTINA-1)

UNTIL

(CONDIO)

Em seguida ao PERFORM UNTIL, executado o comando seguinte ao


PERFORM, se a condio j estiver satisfeita.

Quando a condio j estiver satisfeita, no momento em que encontrado o


comando PERFORM referente a condio, os procedimentos chamados pelo
PERFORM no sero executados.

Exemplo:
PERFORM

ROT-A

THRU

FIM-ROT-A

UNTIL

WS-NUM

IS

NEGATIVE.

ROT-A.
.................
SUBTRACT 1 FROM WS-NUM.
FIM-ROT-A.
EXIT.

7.17.3 PERFORM VARYING


Formato:

____________________________________________________________________________________________
Verso 1

62

Cobol
PERFORM

(NOME-PROC-1)

THRU

(NOME-PROC-2)

VARYING (NOME-DADO-1)
FROM

(LITERAL-NUMERICO-1)/(NOME-DADO-2)

BY

(LITERAL-NUMERICO-2)/(NOME-DADO-3)

UNTIL

(CONDIO-1)

So executadas as seguintes etapas de operao:


1- NOME-DADO-1 colocado no valor inicial (FROM) pelo LITERAL-NUMERICO1 ou NOME-DADO-2;
2- A CONDICAO-1 testada para determinar se ela foi satisfeita. No caso de ter
sido cumprida, o comando seguinte ao comando PERFORM ser executado;
3- No caso da condio no ter sido satisfeita, os procedimentos do PERFORM so
realizados;
4- Em seguida, NOME-DADO-1 modificado por LITERAL-NUMERICO-2 ou
NOME-DADO-3;
5- As etapas 2, 3 e 4 so repetidas at a condio ser satisfeita.

Exemplo:
....................
WORKING-STORAGE SECTION.
....................
01

INDICE

01

TABELA.
02 VENDAS-PROD
03 VALOR

PIC 9(02)

VALUE ZEROS.

OCCURS

TIMES.

PIC 9(05).

.............
.............
PROCEDURE DIVISION.
.................
PERFORM ZERA-TAB
VARYING INDICE
FROM
UNTIL

BY

INDICE

GREATER 4.

____________________________________________________________________________________________
Verso 1

63

Cobol
ZERA-TAB.
MOVE ZEROS

TO

VALOR(INDICE).

ZERA-FIM.
EXIT.

7.18 CLUSULA EXIT


um ponto comum de finalizao para uma srie de procedimento(s).
NOME-PARAGRAFO.

EXIT.

A clusula EXIT deve ser precedida por um nome de pargrafo e deve ser
nica clusula do pargrafo.
O programa poder ter vrios EXITs associados com PERFORMs.

Exemplo:
INICIO.
PERFORM A-1 THRU

A-99.

FIM-INICIO.
EXIT.
A-1.
.........
A-99.
EXIT.

7.19 CLUSULA (BLANK WHEN ZERO)


Indica que o item descrito deve ser preenchido com espaos, sempre que um
valor for zero.

Esta clusula deve ser apenas para itens elementares numricos ou numricos
de edio.

Exemplo:
____________________________________________________________________________________________
Verso 1

64

Cobol
01 LINHA.
02 VALOR
MOVE

PIC 9(05)

CAMPO-NUM

TO

BLANK WHEN ZERO.

VALOR.

Quando o campo for movido para VALOR e todo o contedo dele for zero,
ento ser substitudos os caracteres iguais a zero, por espaos.

7.20 CLUSULA (SYNCHRONIZED SYNC)


Utilizada para obter alinhamento de um item elementar em uma das limitaes
prprias da memria (HALF-WORD) (FULL-WORD).

Formato:
(SYNCHRONIZED) (LEFT)
(SYNC)

(RIGHT)

Esta clusula assegura a eficincia das operaes aritmticas das clusulas


COMP, COMP-1, COMP-2. Para as demais clusulas, interpretada como
comentrio.
A necessidade da SYNC, pelo fato de no existir alinhamento em tempo de
compilao para descrio de itens binrios para nvel superior 01. No exemplo
abaixo, os campos A e B necessitam ser alinhados:
01 REGISTRO.
02 NOME

PIC X(20).

02 FILLER

PIC X(01).

02 A

PIC S9(07) COMP.

02 CODIGO

PIC 9(02).

02 B

PIC S9(04) COMP.

Se usarmos a SYNCHRONIZED (SYNC), no precisamos nos preocupar com o


problema do alinhamento.
____________________________________________________________________________________________
Verso 1

65

Cobol
Exemplo:
01 REGISTRO.
02 NOME

PIC X(20).

02 FILLER

PIC X(01).

02 A

PIC S9(07) COMP SYNC.

02 CODIGO

PIC 9(02).

02 B

PIC S9(04) COMP SYNC.

....................
ADD

10

TO

SUBTRACT 5 FROM

B.

7.21 OPERADORES LGICOS


Existem no Cobol 3 (trs) operadores lgicos:

OPERADOR LGICO
OR

SIGNIFICADO
Se ao menos um for
verdadeiro, o resultado
ser verdadeiro.

AND

Se todos forem

____________________________________________________________________________________________
Verso 1

66

Cobol
verdadeiros, o resultado
ser verdadeiro.

NOT

Negao lgica.

Pode ser utilizado parnteses tanto para esclarecer o sentido das


comparaes, quanto para obter outros efeitos.
IF VALOR
GO

= 100,00

TO

OR

200,00

OR

400,00

OK.

7.21.1 TESTES COMPOSTOS


Ocorre o teste composto, quando aparece os conectores lgicos no IF, como:
AND, OR ou NOT.

Exemplo:
IF NOME
GO

TO

SPACES

AND

ENDERECO

= SPACES

CAMPOS-BRANCO

ELSE
IF CODIGO

LESS

MOVE 1
IF (A LESS
(B / 2
NOT

GO

TO

OR

TO

INDICE.

GREATER

EQUAL

(F

D)

E)

EQUAL

GREATER

AND
OR

ZEROS)

MOVER-DADOS.

IF CAMPO IS NUMERIC
CAMPO

CODIGO-2

AND

LESS 500,00

NEXT SENTENCE
ELSE
____________________________________________________________________________________________
Verso 1

67

Cobol
MOVE CAMPO
IF (TAXA

TO SAI-CAMPO.

GREATER

(CODMAT = P
(FIRMACOD

70
OR

LESS

AND

LESS

100)

B)

OR
AND

40)

NEXT SENTENCE
ELSE
GO

TO

CONFIRMA.

7.22 DATA E HORA DO SISTEMA


Do sistema, pode-se obter:

DATE = AAMMDD

(6 bytes)

DAY

(5 bytes) -> data juliana

TIME = HHMMSSDD (8 bytes)

= AADDD

Exemplos:
ACCEPT

CAMPO-DATA

FROM

DATE.

ACCEPT

CAMPO-DIA

FROM

DAY.

ACCEPT

CAMPO-HORA

FROM

TIME.

Definindo os campos acima na WORKING-STORAGE SECTION:


01

CAMPO-DATA

PIC 9(06).

01

CAMPO-DIA

PIC 9(05).

01

CAMPO-HORA

PIC 9(08).

ou
01

CAMPO-DATA.
02

ANO

PIC 9(02).

02

MS

PIC 9(02).

02

DIA

PIC 9(02).

.................
____________________________________________________________________________________________
Verso 1

68

Cobol

____________________________________________________________________________________________
Verso 1

69

Cobol

____________________________________________________________________________________________
Verso 1

70

Cobol

8. ARQUIVOS DE ACESSO DIRETO


Na ENVIRONMENT DIVISION, definindo o arquivo:
FILE-CONTROL.
SELECT CADASTRO ASSIGN

TO

DA-I-DDCADAST

ACCESS

MODE

IS

RANDOM

RECORD

KEY

IS

CAD-CHAVE

NOMINAL KEY

IS

W-CHAVE.

ACCESS MODE IS RANDOM > deve ser utilizado para


arquivos cuja organizao direta (D) ou indexada (I).

____________________________________________________________________________________________
Verso 1

71

Cobol

NOMINAL KEY IS (NOME-DA-WORKING) -> campo


definido na WORKING-STORAGE SECTION no qual deve
ser movido a chave de pesquisa do arquivo.

RECORD KEY IS (NOME-DO-REGISTRO) -> campo


definido no registro, na qual contm a chave de pesquisa.

FD

CADASTRO
LABEL STANDARD
RECORDING F
RECORD 130
BLOCK 10 RECORDS.

01

REG-CADASTRO.
03

CAD-CHAVE

PIC 9(06).

03

CAD-NOME

PIC X(40).

................
WORKING-STORAGE SECTION.
01

W-CHAVE

PIC 9(06) VALUE 2456.

8.1 UTILIZANDO ACESSO DIRETO LEITURA SEQUENCIAL


FILE-CONTROL.
SELECT

CADASTRO

ASSIGN

TO

DA-I-DDCADAST

ACCESS

MODE

IS

SEQUENTIAL

RECORD

KEY

IS

CAD-CHAVE.

........
..............
FD

CADASTRO
LABEL STANDARD
RECORDING

RECORD

130

____________________________________________________________________________________________
Verso 1

72

Cobol
BLOCK
01

10

RECORDS.

REG-CADASTRO.
03

CAD-CHAVE

PIC 9(06).

03

CAD-NOME

PIC X(40).

..................
..............

READ

CADASTRO
AT

END
GO

TO

FIM-PROCESSAMENTO.

.....................
..................

Obrigatoriamente deve-se usar na leitura sequencial:

ACCESS MODE IS SEQUENTIAL = usado para arquivos cuja organizao

DA-I-XXXXXXXX e leitura sequencial;


RECORD KEY IS (NOME-CAMPO) = define a chave do arquivo. Campo da

FD;
BLOCK CONTAINS 10 RECORDS = define o fator de BLOCK do arquivo.

8.1.1 I-O
Formato no OPEN:
OPEN

I-O (NOME-DO-ARQUIVO)

No OPEN, a opo I-O (input-output) deve ser declarada para arquivos que
possuem organizao DIRETA, e quanto utilizada a clusula REWRITE. Caso
contrrio, abrir somente com a opo INPUT para leitura ou OUTPUT para
gravao.

Formato no READ:
READ

(NOME-DO-ARQUIVO)

INTO

(AREA-IDENTIF)

____________________________________________________________________________________________
Verso 1

73

Cobol
INVALID KEY (SENTENA IMPERATIVA)
A opo INVALID KEY aciona os dispositivos de programao no sentido de
verificao do contedo das chaves, o que normalmente substtudo pelo teste de
FILE STATUS.

Exemplo:
MOVE

150190

READ

CADASTRO.

IF

TO

WS-FS-CADASTRO

WS-CHAVE. (->nominal-key)

EQUAL 23

DISPLAY REGISTRO NO ENCONTRADO


STOP RUN.

Formato no WRITE:
WRITE

(NOME-DO-DADO, REGISTRO)

FROM

(AREA-IDENTIF)

INVALID KEY (SENTENA IMPERATIVA)

8.1.2 CLUSULA REWRITE


Sua funo substituir o registro cdigo de um arquivo de acesso direto, se o
contedo da NOMINAL KEY associada for vlido.

A clusula READ deve ser dada antes da clusula


REWRITE.

Formato:
REWRITE

(NOME-DO-DADO, REGISTRO)

FROM

(AREA-IDENTIF)

____________________________________________________________________________________________
Verso 1

74

Cobol
INVALID KEY (SENTENA IMPERATIVA)

Exemplo:
MOVE

CAR-CHAVE

REWRITE

TO

WS-CHAVE (-> nominal-key)

REG-CADASTRO.

IF WS-FS-CADASTRO NOT EQUAL ZEROS


DISPLAY FILE STATUS = WS-FS-CADASTRO
DISPLAY

ERRO NO REWRITE

STOP RUN.
DISPLAY OK, REGISTRO REGRAVADO.

8.1.3 CLUSULA START


A clusula START utilizada, quando se quer agilizar a leitura de um arquivo
de acesso direto e mtodo de acesso sequencial.
Posiciona-se em algum registro cuja chave de acesso seja satisfeita e da para
frente, l-se o arquivo sequencialmente.

Formato:
START (NOME-DO-ARQUIVO) KEY IS (EQUAL TO)
(GREATER THAN)
(NOT LESS THAN)
(NOME-DO-CAMPO)
INVALID KEY (SENTENA IMPERATIVA)

OU
____________________________________________________________________________________________
Verso 1

75

Cobol
START (NOME-DO-ARQUIVO)
INVALID KEY (SENTENA IMPERATIVA)

Nota-se que o START, s posiciona e no traz para a rea de leitura o registro.


Somente no primeiro READ que acontecer de trazer o registro.

Exemplo:
FILE-CONTROL.
SELECT

CADSEQUE

ASSIGN

TO

DA-I-DDCADSEQ

ACCESS

SEQUENTIAL

RECORD

KEY

CAD-KEY

NOMINAL KEY

WS-KEY.

.........................
FD

CADSEQUE
LABEL STANDARD

01

RECORDING

BLOCK

20

RECORDS.

CAD-REGISTRO.
03

CAD-KEY.
05

CAD-CODIGO

PIC X(02).

05

CAD-NUMERO

PIC 9(04)

03

CAD-NOME

PIC X(40).

03

CAD-ENDER

PIC X(45).

03

CAD-IDADE

PIC 9(02).

..................
WORKING-STORAGE SECTION.
77

WS-KEY

PIC X(06) VALUE AB1437.

....................
PROCEDURE DIVISION.
..............
START

CADSEQUE
INVALID KEY
PERFORM ROTINA-NO-ACHADO.

____________________________________________________________________________________________
Verso 1

76

Cobol
LEITURA.
READ

CADSEQUE
AT

END
GO TO FIM-PROCESSA.

......
GO

TO

LEITURA.

FIM-PROCESSA.

Toda vez que se passar pelo START, o registro cuja


chave foi satisfeita ser retornado e posicionado para leitura.

____________________________________________________________________________________________
Verso 1

77

Cobol

9. TABELAS
As tabelas devem ser construdas na DATA DIVISION.

9.1 CLUSULA OCCURS


Os itens 01 e 77 no podem conter a clusula OCCURS.
Formato:
OCCURS X

TIMES

OCCURS X

TO

XX

DEPENDING ON (CAMPO).

Existem 2 tipos de tabelas:

TABELA SUBSCRITA;

TABELA INDEXADA.

As tabelas tambm podem ser:

____________________________________________________________________________________________
Verso 1

78

Cobol
-

DIRECIONAL;

BIDIMENSIONAL;

TRIDIMENSIONAL.

O tamanho de uma tabela no pode exceder a 131.071


bytes (128K);

O tamanho de uma tabela que tiver DEPENDING ON


no pode exceder a 32.767 bytes (32K);

Cada 1K tem em mdia 1.024 bytes;

O indexador de uma tabela indexada, pode ser somado


ou subtrado. Ex.: TAB (INDEX + 1) TO X.

9.2 TABELA SUBSCRITA


Pode ser considerada, tabela subscrita, a tabela que voc utiliza um ndice fora
dela.
Exemplo 1, definio da tabela na WORKING-STORAGE SECTION:
01 TABELA-DE-MESES.
02 TAB-MESES.
03 FILLER

PIC X(09)

VALUE

JANEIRO.

03 FILLER

PIC X(09)

VALUE

FEVEREIRO.

03 FILLER

PIC X(09)

VALUE

MARCO.

03 FILLER

PIC X(09)

VALUE

ABRIL.

03 FILLER

PIC X(09)

VALUE

MAIO.

03 FILLER

PIC X(09)

VALUE

JUNHO.

03 FILLER

PIC X(09)

VALUE

JULHO.

03 FILLER

PIC X(09)

VALUE

AGOSTO.

03 FILLER

PIC X(09)

VALUE

SETEMBRO.

03 FILLER

PIC X(09)

VALUE

OUTUBRO.

03 FILLER

PIC X(09)

VALUE

NOVEMBRO.

03 FILLER

PIC X(09)

VALUE

DEZEMBRO.

02 TAB-MESES-R

REDEFINES TAB-MESES OCCURS 12 TIMES.

____________________________________________________________________________________________
Verso 1

79

Cobol
03 MESES
01

01

PIC X(09).

DATA-DIA.
02

DIA

PIC 9(02).

02

FILLER

PIC X(01).

02

MES

PIC 9(02).

02

FILLER

PIC X(01).

02

ANO

PIC 9(04).

CABEC.
03

FILLER

PIC X(28) VALUE


RELATORIO EMITIDO EM: .

03

NOME-MS

PIC X(09).

..................
PROCEDURE DIVISION.
....................
DISPLAY TECLE DATA FORMATO DD/MM/AAAA UPON CONSOLE.
ACCEPT
MOVE

DATA-DIA FROM CONSOLE.


MESES (MS)

TO

NOME-MS.

Exemplo 2:
WORKING-STORAGE SECTION.
.............
77 IND

PIC 9(02) COMP VALUE 0 SYNC.

.............
01 LINHA-DETALHE.
02 FILLER

PIC X(20)
VALUE

02 ESTADO

TOTAL DO ESTADO DE .
PIC X(15).

.............
.............
01 TABELA-ESTADO.
02 TAB.
03 FILLER

PIC X(17) VALUE SPSAO PAULO.

____________________________________________________________________________________________
Verso 1

80

Cobol
03 FILLER

PIC X(17) VALUE BABAHIA.

..........
..........
03 FILLER

PIC X(17) VALUE PRPARANA.

03 FILLER

PIC X(17) VALUE AMAMAZONAS.

02 TAB-R

REDEFINES

TAB OCCURS 23 TIMES.

03

SIGLA

PIC X(02).

03

DESCRICAO

PIC X(15).

...................
PROCEDURE DIVISION.
...................

LER-FITA.
READ

ENTRADA AT END
GO

TO FIM-LER.

FIM-LER.
EXIT.
..............
PESQUISA-ESTADO.
MOVE

TO

IND.

LOOP-INICIO.
IF

SIGLA(IND) EQUAL

ESTADO-FITA

GO

TO

MOVE-ESTADO

ADD 1

TO

IND

IF

IND

24

GO

TO

ROT-ERRO

TO

LOOP-INICIO.

ELSE

ELSE
GO
MOVE-ESTADO.
MOVE

DESCRICAO(IND)

TO

ESTADO.

..........

____________________________________________________________________________________________
Verso 1

81

Cobol

9.3 CLUSULA SET


Esta clusula estabelece pontos de referncia na pesquisa de tabelas,
colocando determinados valores nos indexadores associados com os elementos das
tabelas.

A clusula SET deve ser utilizada quando quisermos


inicializar um indexador antes da execuo de uma clusula
SEARCH. Pode tambm ser utilizada na transferncia dos
contedos

dos

indexadores

para

outros

itens

de

dados

elementares ou somar ou subtrair contedo do indexador.

Formato 1:
SET

(INDEX NAME)

TO

(IDENTIFICADOR)

(NUM-INTEIRO)
(IDENTIFICADOR)
(INDEX NAME)

Funo: seta o INDEX NAME ou IDENTIFICADOR com um valor inicial.

Formato 2:
SET

(INDEXADOR-A)

(INDEXADOR-B)
UP

BY

(IDENT-1)

ou
DOWN BY (LIT-2)

Neste formato 2, quando o comando SET executado, o contedo do


INDEXADOR-A acrescido (UP BY) ou decrescido (DOWN BY) do valor que
corresponde ao nmero de ocorrncias representadas pelo LIT-2 ou IDENT-1.

Exemplos:
SET

INDEX-7

TO

SET

INDEX-C INDEX-D TO

INDEX-7.

SET

INDEX-1

1.

UP

BY

25.

____________________________________________________________________________________________
Verso 1

82

Cobol
SET

INDEX-8

DOWN

BY

1.

9.4 CLUSULA SEARCH


Esta clusula utilizada para pesquisar uma tabela. Ela procura um elemento
que satisfaa certas condies e determina o valor do nome indexado associado ao
ndice correspondente do elemento da tabela.

Somente um nico identificador da tabela pode ser referenciado por uma


clusula SEARCH.

Formato 1:
SEARCH

IDENT-1
AT

VARYING (IDENT-2) / (INDEX-1)

END

WHEN

(SENTENCA IMPERATIVA 1)
CONDICAO-1

(SENTENCA IMPERATIVA 2)
(NEXT SENTENCE)

WHEN

CONDICAO-2

(SENTENCA IMPERATIVA 3)
(NEXT SENTENCE)

Formato 2:
SEARCH ALL

IDENT-1
AT
WHEN

END

(SENTENCA IMPERATIVA 1)
(CONDICAO-RELACIONAL-1)
(NOME-CONDICAO-1)

AND

(CONDICAO-RELACIONAL-2)....
(NOME-CONDICAO-2)
(SENTENCA IMPERATIVA 2)
(NEXT SENTENCE)

Nos formatos acima, o IDENT-1 no deve ser subscrito ou indexado.


Sua descrio na DATA DIVISION deve conter a clusula OCCURS associada a
opo INDEXED BY. No poderemos usar nmeros de vrgula flutuante no IDENT-1.
____________________________________________________________________________________________
Verso 1

83

Cobol

Quando pesquisamos uma tabela atravs da clusula SEARCH, somente o


indexador associado ao nome dado ao IDENT-1 pela opo INDEXED BY que
varia.

Ento, para pesquisas de tabela de mais de uma dimenso, necessrio


executar a clusula SEARCH repetidamente.

Aps cada execuo, necessrio que a clusula SET ajuste os indexadores


associados aos outros nveis da tabela.

Se nas opes AT END e WHEN no existir nas sentenas imperativas nenhum


desvio (GO TO ou PERFORM), o controle de execuo passar para a prxima
sentena aps a execuo so SEARCH.

9.5 TABELA INDEXADA

Tabela indexada aquela cujo ndice est embutido na tabela


atravs da clusula INDEXED BY.

Exemplo 1:
WORKING-STORAGE SECTION.
01 TABELA1.
03

TABELA-NOMES.
05

FILLER

PIC X(11) VALUE JOAO.

05

FILLER

PIC X(11) VALUE JOSE.

05

FILLER

PIC X(11) VALUE JULIANA.

05

FILLER

PIC X(11) VALUE MARIA.

05

FILLER

PIC X(11) VALUE ANA.

05

FILLER

PIC X(11) VALUE AILTON.

05

FILLER

PIC X(11) VALUE BENEDITA.

05

FILLER

PIC X(11) VALUE SERGIO.

____________________________________________________________________________________________
Verso 1

84

Cobol
05

FILLER

PIC X(11) VALUE CAMILA.

05

FILLER

PIC X(11) VALUE EVELYN.

05

FILLER

PIC X(11) VALUE SERAFIM.

05

FILLER

PIC X(11) VALUE PEDRO.

05

FILLER

PIC X(11) VALUE LUCAS.

05

FILLER

PIC X(11) VALUE IRACEMA.

TAB-NOM

REDEFINES

03

TABELA-NOMES

OCCURS 14 INDEXED BY IND.


05
01

NOME

AUX-NOME

PIC X(11).

PIC X(11) VALUE SPACES.

..................
PROCEDURE DIVISION.
DAR-DISPL.
DISPLAY TECLE O NOME A SER PESQUISADO UPON CONSOLE.
ACCEPT

AUX-NOME

SET IND
SEARCH

TO

FROM CONSOLE.

1.

TAB-NOM
AT

END
GO

TO

DAR-DISPL

WHEN
NOME (IND)

EQUAL

AUX-NOME

PERFORM ROT-ACHOU-NOME.
ROT-ACHOU-NOME.
.....................
Exemplo 2, utilizando SEARCH ALL:
DATA DIVISION.
.........
FD

CADENTRA

____________________________________________________________________________________________
Verso 1

85

Cobol
..........
03

CHAVE-COD

PIC 9(01).

........
WORKING-STORAGE SECTION.
.........
01 LINHA-IMPRESSAO.
03 FILLER

PIC X(20) VALUE SPACES.

03 LIN-MSG

PIC X(20).

......
01 TABELA2.
03

03

TAB-MSG.
05 FILLER

PIC X(11) VALUE 1DESPREZADO.

05 FILLER

PIC X(11) VALUE 2DUPLICADO.

05 FILLER

PIC X(11) VALUE 3EXCLUIDO.

05 FILLER

PIC X(11) VALUE 4INCLUIDO.

05 FILLER

PIC X(11) VALUE 5ALTERADO.

FILLER
05

REDEFINES

TAB-2

OCCURS

TAB-MSG.
5

TIMES

ASCENDING KEY IS TAB-CODIGO


INDEXED BY IND.
07

TAB-CODIGO

PIC 9(01).

07

TAB-MENSAG

PIC X(10).

.........
PROCEDURE DIVISION.
.............
SEARCH ALL TAB-2
AT END
MOVE ALL * TO LIN-MSG
GO

TO SAIDA

WHEN
TAB-CODIGO (IND) EQUAL CHAVE-COD
MOVE TAB-MENSAG(IND) TO LIN-MSG.
OBS: No necessrio setar o indexador quando utilizar SEARCH ALL.

____________________________________________________________________________________________
Verso 1

86

Cobol

A ordem de sequncia das opes do SEARCH ALL devem ser


respeitadas.
1 OCCURS
2 ASCENDING KEY IS ou DESCENDING KEY IS
3 INDEXED BY.

____________________________________________________________________________________________
Verso 1

87

Cobol

10. CLASSIFICAO DE DADOS


So quatro (4) os elementos para classificao interna no programa Cobol.

Podemos classificar os arquivos em ordem ascendente ou descendente.

1 - Descrio de dados:
Para cada arquivo a ser classificado, deve existir uma descrio do arquivo
de classificao na FILE SECTION.

Exemplo:
SD

TRABALHO
DATA

01

RECORD

IS

TRAB.

TRAB.
02

NOME

PIC X(40).

02

VALOR

PIC 9(06)V(02) COMP-3.

02

ENDERECO

PIC X(30).

2 - Comando de Sort:
O comando de sort um item necessrio na PROCEDURE DIVISION.

Determina os campos de controle para classificao e indica se


processamentos de entrada e sada devem ser usados.

Exemplo:

____________________________________________________________________________________________
Verso 1

88

Cobol
SORT TRABALHO

DESCENDING

NOME

VALOR

ASCENDING

ENDERECO

INPUT PROCEDURE 100-SELECIONA-SORT


OUTPUT PROCEDURE 500-PEGA-CLASSIFICADO.

3 - Procedimento de entrada:
usado para tratamento dos registros a serem classificados.
Por exemplo: selecionar, gerar, intercalar registros de um ou mais arquivos
de entrada.

Exemplo:
100-SELECIONA-SORT SECTION.
..........
........
RELEASE TRAB.
.........

4 - Procedimentos de sada:
usado para tratamento dos registros classificados. Serve para coloc-los
em vrios de arquivos de sada.

Exemplo:
500- PEGA-CLASSIFICADO SECTION.
LER-SORT.
RETURN

TRABALHO

AT END
MOVE * TO CHAVE-FIM-SORT
GO

TO FIM-SORT.

10.1 CLUSULA SELECT (SORT)


Esta clusula fica na ENVIRONMENT DIVISION e DATA DIVISION, na
descrio dos arquivos.

____________________________________________________________________________________________
Verso 1

89

Cobol
Formato:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT (NOME-ARQ-CLASSIF) ASSIGN

TO

UT-S-SORTWK01.

.....................
.....................
DATA DIVISION.
SD (NOME-ARQ-CLASSIF)
DATA RECORD IS (NOME-REGISTRO-1 ...).
RECORDS ARE

ou
SD (NOME-ARQ-CLASSIF).

SD (SORT DESCRIPTION) obrigatrio;

(NOME-ARQ-CLASSIF):
- no pode dar OPEN, CLOSE, READ e WRITE;
- deve ter um SELECT;

- Clusula DATA RECORDS obrigatria em alguns


sistemas. Atualmente, opcional.

10.2 CLUSULA RELEASE


Release um verbo de liberao.

____________________________________________________________________________________________
Verso 1

90

Cobol
Esta clusula usada no SORT, em um procedimento de entrada para
transferir um registro de cada vez para ser classificado.

Formato:
RELEASE

(NOME-DO-REGISTRO)

ou
RELEASE

(NOME-DO-REGISTRO)

FROM

(NOME-DA-AREA).

10.3 CLUSULA RETURN


Return um verbo de retorno.

O comando RETURN usado em procedimentos de sada para receber, um


de cada vez, os registros j classificados.

Formato:
RETURN (NOME-DO-ARQ-CLASSIF)
AT

INTO

(AREA)

END
(COMANDO IMPERATIVO).

10.4 CLUSULA SORT


A funo do comando SORT determinar o arquivo a ser classificado, os
campos de classificao, sua ordem (ascendente e/ou descendente) e se devem ser
executados procedimentos de entrada e/ou sada.

Formato:
SORT

(NOME-ARQ-CLASSIF)

ASCENDING KEY / DESCENDING KEY

(NOME-CAMPO-1...)
USING

(NOME-ARQUIVO-1)

____________________________________________________________________________________________
Verso 1

91

Cobol
INPUT PROCEDURE (NOME-SECAO-1)
GIVING (NOME-ARQUIVO-2)
OUTPUT PROCEDURE (NOME-SECAO-2)
1- (NOME-ARQ-CLASSIF) -> parmetro obrigatrio e deve ser definido na SD;
2 - obrigatrio ao menos uma das opes ASCENDING ou DESCENDING;

3 - (NOME-CAMPO-1) -> so os nomes dos campos para classificao. Pode-se ter


at doze (12) campos e pode figurar em qualquer parte do registro. O tamanho total
de todos os campos de classificao no pode exceder 256 bytes;

4 - A opo USING necessria quando no existe processamento de entrada e o


(NOME-ARQUIVO-1) deve ser definido na FD;

5 - A opo GIVING necessria quando no existir processamento de sada. O


(NOME-ARQUIVO-2) deve ser definido na FD;

6 - A opo INPUT PROCEDURE necessria quando usar o processamento de


entrada:
-

uma parte separada dentro da PROCEDURE DIVISION;

s pode ser referenciada pelo comando SORT;

deve conter pelo menos um comando RELEASE.

7 - A opo OUTPUT PROCEDURE como a INPUT PROCEDURE:


-

uma parte separada dentro da PROCEDURE DIVISION;

s pode ser referenciada pelo comando SORT;

deve conter pelo menos um comando RETURN.

10.4.1 INPUT PROCEDURE e OUTPUT PROCEDURE


IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
____________________________________________________________________________________________
Verso 1

92

Cobol
SELECT ARQENT

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSORT

ASSIGN

TO

UT-S-ARQSORT.

........
DATA DIVISION.
SD ARQSORT.
01

FD

SRT-REGISTRO.
03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

01

ENT-REGISTRO.
03

FILLER

PIC X(20).

03

ENT-TIPO

PIC X(02).

03

FILLER

PIC X(01).

03

ENT-CODIGO

PIC 9(07) COMP-3.

03

FILLER

PIC X(10).

03

ENT-NOME

PIC X(30).

..........
PROCEDURE DIVISION.
..........
PRINCIPAL SECTION.
OPEN INPUT ARQENT.
SORT ARQSORT

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

INPUT PROCEDURE CLASSIFICA


OUTPUT PROCEDURE CLASSIFICADO.
STOP RUN.

____________________________________________________________________________________________
Verso 1

93

Cobol
CLASSIFICA SECTION.
READ

ARQENT

AT END
CLOSE ARQENT
GO

TO

FIM-CLASSIFICA.

MOVE

ENT-TIPO

TO

SRT-TIPO

MOVE

ENT-CODIGO

TO

SRT-CODIGO

MOVE

ENT-NOME

TO

SRT-NOME

RELEASE SRT-REGISTRO
GO

TO

CLASSIFICA.

FIM-CLASSIFICA.
EXIT.
CLASSIFICADO SECTION.
RETURN ARQSORT

AT END
GO TO FIM-CLASSIFICADO.

..........
FIM-CLASSIFICADO.
EXIT.

10.4.2 USING e OUTPUT PROCEDURE


IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
SELECT ARQENT

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSORT

ASSIGN

TO

UT-S-ARQSORT.

........
DATA DIVISION.
SD ARQSORT.

____________________________________________________________________________________________
Verso 1

94

Cobol
01 SRT-REGISTRO.

FD

03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

01 ENT-REGISTRO.
03

ENT-TIPO

PIC X(02).

03

ENT-CODIGO

PIC 9(07) COMP-3.

03

ENT-NOME

PIC X(30).

..........
PROCEDURE DIVISION.
.....
PRINCIPAL SECTION.
SORT ARQSORT
USING

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

ARQENT

OUTPUT PROCEDURE CLASSIFICADO.


STOP RUN.
..............
CLASSIFICADO SECTION.
RETURN ARQSORT

AT END
GO TO FIM-CLASSIFICADO.

..........
.........
FIM-CLASSIFICADO.
EXIT.

____________________________________________________________________________________________
Verso 1

95

Cobol

O arquivo a ser utilizado na opo USING, deve ser


definido na FD;

obrigatrio o arquivo utilizado na opo USING ter o


mesmo tamanho do arquivo do SORT;

Arquivos

de

tamanhos

variveis

no

devem

ser

sorteados com a opo USING, mas sim pela INPUT


PROCEDURE.

10.4.3 INPUT PROCEDURE e GIVING


IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
........
SELECT ARQENT

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSAI

ASSIGN

TO

UT-S-ARQSAI.

SELECT ARQSORT

ASSIGN

TO

UT-S-SORTWK01.

........
DATA DIVISION.
SD ARQSORT.
01 SRT-REGISTRO.

FD

03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

01 ENT-REGISTRO.
03

FILLER

PIC X(20).

____________________________________________________________________________________________
Verso 1

96

Cobol

FD

03

ENT-TIPO

PIC X(02).

03

FILLER

PIC X(01).

03

ENT-CODIGO

PIC 9(07) COMP-3.

03

FILLER

PIC X(10).

03

ENT-NOME

PIC X(30).

ARQSAI
LABEL STANDARD
RECORDING F
BLOCK 0.

01 SAI-REGISTRO.
03 FILLER

PIC X(36).

..........
PROCEDURE DIVISION.
PRINCIPAL SECTION.
OPEN INPUT

ARQENT

SORT ARQSORT

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

INPUT PROCEDURE CLASSIFICA


GIVING ARQSAI.
STOP RUN.
..............
CLASSIFICA SECTION.
READ

ARQENT

AT END
CLOSE ARQENT
GO

TO

FIM-CLASSIFICA.

MOVE

ENT-TIPO

TO

SRT-TIPO

MOVE

ENT-CODIGO

TO

SRT-CODIGO

MOVE

ENT-NOME

TO

SRT-NOME

RELEASE SRT-REGISTRO
GO

TO

CLASSIFICA.

FIM-CLASSIFICA.
EXIT.

____________________________________________________________________________________________
Verso 1

97

Cobol

O arquivo a ser utilizado na opo GIVING, deve ser


definido na FD;

obrigatrio o arquivo utilizado na opo GIVING ter o


mesmo tamanho do arquivo do SORT;

Arquivos

de

tamanhos

variveis

no

devem

ser

sorteados com a opo GIVING, mas sim pela OUTPUT


PROCEDURE.

10.4.4 USING e GIVING


IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
........
SELECT ARQENT

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSAI

ASSIGN

TO

UT-S-ARQSAI.

SELECT ARQSORT

ASSIGN

TO

UT-S-SORTWK01.

........
DATA DIVISION.
SD ARQSORT.
01 SRT-REGISTRO.

FD

03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

01 ENT-REGISTRO.
03
FD

ENT-REG

PIC X(36).

ARQSAI

____________________________________________________________________________________________
Verso 1

98

Cobol
LABEL STANDARD
RECORDING F
BLOCK 0.
01 SAI-REGISTRO.
03 FILLER

PIC X(36).

..........
PROCEDURE DIVISION.
.....................
PRINCIPAL SECTION.
SORT ARQSORT

ASCENDING

KEY TIPO

DESCENDING

KEY CODIGO

USING ARQENT
GIVING ARQSAI.
STOP RUN.

No se pode dar os comandos OPEN e CLOSE nos


arquivos que se utilizam da opo USING ou GIVING.

*****************************

OBS: Exemplo de JCL para SORT com no mximo 6 SORTWK.


O SPACE pode ser um TRK ou CYL:
//SORTLIB

DD

DSN=SYS1.SORTILIB,DISP=SHR

//SORTWK01

DD

UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)

____________________________________________________________________________________________
Verso 1

99

Cobol
//SORTWK02

DD

UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)

//03
//04
//05
//06

____________________________________________________________________________________________
Verso 1

100

Cobol

11. OUTRAS CLUSULAS

____________________________________________________________________________________________
Verso 1

101

Cobol

11.1 CLUSULA EXAMINE / INSPECT - REPLACING


A funo desta clusula substituir um determinado caracter num item, por
outro determinado caracter. Semelhante a essa funo, temos outra clusula no
Cobol II, a clusula INSPECT.

Formato:
EXAMINE (NOME-CAMPO) REPLACING ALL (LITERAL-1) BY (LITERAL-2)
- LEADING - UNTIL FIRST - FIRST EXAMINE (NOME-CPO) TALLYING ALL (LIT-3) REPLACING BY (LIT-4)
- LEADING - UNTIL FIRST - FIRST INSPECT (NOME-CAMPO) REPLACING ALL (LITERAL-1) BY (LITERAL-2)
- LEADING -

REPLACING -> substitui um determinado caracter num item por outro determinado
caracter.

TALLYING -> conta o nmero de vezes que um determinado caracter figura num item
(sendo possvel substituir este caracter por um outro determinado caracter).

Os campos para o EXAMINE e INSPECT s podem estar /


ser zonados.

11.1.1 Regras para EXAMINE


1- Serve somente para campos numricos zonados, alfabticos e alfanumricos;

____________________________________________________________________________________________
Verso 1

102

Cobol
2- A opo TALLYING gera um nmero inteiro cujo valor armazenado num item
binrio denominado TALLY. Este nmero representa o seguinte:
-

quantas vezes ocorre a LITERAL-3 com o uso da opo ALL;

quantas vezes ocorre a LITERAL-3, antes de encontrar um campo diferente


da LITERAL-3, com o uso da opo LEADING;

nmero de caracteres diferentes da LITERAL-3 at o primeiro caracter igual


a LITERAL-3 ser encontrado, com o uso da opo UNTIL FIRST.

3- No caso de ser usada a opo REPLACING (alterando):


-

com a opo ALL, cada LITERAL-1 (ou LITERAL-3) substitudo pela


LITERAL-2 (ou LITERAL-4);

com a opo LEADING a substituio pela LITERAL-2 (ou LITERAL-4)


termina no momento em que encontrado um LITERAL-1(ou LITERAL-3);

com a opo UNTIL FIRST a substituio pelo LITERAL-2 (ou LITERAL-4)


termina no momento em que encontrado um LITERAL-1 (ou LITERAL-3);

com a opo FIRST, a primeira LITERAL-1 (ou LITERAL-3) que aparecer,


substitudo pelo LITERAL-2 (ou LITERAL-4).

11.1.2 Exemplos de EXAMINE


- 1)
EXAMINE/INSPECT CAMPO-A REPLACING ALL 7 BY 0.

CAMPO-A antes = 44 75 72
CAMPO-A depois = 44 05 02

- 2)
EXAMINE/INSPECT IMPORTANCIA REPLACING LEADING ZEROS BY 2.

IMPORTANCIA antes = 00 08 40
IMPORTANCIA antes = 22 28 40

- 3)
EXAMINE CAMPO-B RELACING UNTIL FIRST 5 BY ZERO.

CAMPO-B antes = 44 75 72
____________________________________________________________________________________________
Verso 1

103

Cobol
CAMPO-B depois = 00 05 72

- 4)
EXAMINE CAMPO-A REPLACING FIRST 7 BY ZERO.

CAMPO-A antes = 44 75 72
CAMPO-A depois = 44 05 72

- 5)
EXAMINE IMPORTANCIA TALLYING ALL ,.

IMPORTANCIA antes = $3 ,4 11 ,2 2. 15
TALLY antes = 00 32
TALLY depois = 00 02

- 6)
EXAMINE INDICACAO TALLYING ALL A REPLACING B.

INDICACAO antes = A8 66 AC
TALLY antes = 00 13

INDICACAO depois = B8 66 BC
TALLY depois = 00 02

- 7)
EXAMINE CONTROLE TALLYING LEADING ZEROS.

CONTROLE antes = 00 08 44
TALLY antes = 00 32
TALLY depois = 00 03
- 8)
EXAMINE NOME TALLYING UNTIL FIRST X.

NOME antes = ID AX XX BX
TALLY antes = 00 13
____________________________________________________________________________________________
Verso 1

104

Cobol
TALLY depois = 00 03

11.2 CLUSULA TRANSFORM

O comando TRANSFORM usado para transformao de


caracteres conforme uma regra de transformao. Por exemplo: os
caracteres de um campo podem ser transformados em uma outra
sequncia.

Formato:
TRANSFORM (NOME-DADO-3) CHARACTERS
FROM (CONSTANTE FIGURATIVA-1) TO (CONSTANTE FIGURATIVA-2)
(LITERAL NO NUMERICO-1)

(LITERAL NO NUMERICO-2)

(NOME-DADO-1)

(NOME-DADO-2)

11.2.1 Regras para o TRANSFORM


1- NOME-DADO-3 -> tem que ser um item elementar alfabtico, alfanumrico ou um
item de grupo com um comprimento fixo com menos de 257 bytes;
2- A regra de transformao estabelecida por combinao da opo FROM e
TO;

3- Para os operandos da opo FROM e TO valem as seguintes regras:


-

literais no numricas devem estar sempre entre apstrofes;

na LITERAL-NO-NUMERICA ou NOME-DADO-1, o mesmo caracter no


pode figurar mais de uma vez, se for repetido o resultado no previsvel;

so permitidos como constantes figurativas: zeros, spaces, quotes, highvalues, low-values.

____________________________________________________________________________________________
Verso 1

105

Cobol

11.2.2 Exempos de TRANSFORM


- 1)
TRANSFORM CAMPO-A CHARACTERS FROM ZEROS TO QUOTE.

CAMPO-A antes = 10 70 0A BC
CAMPO-A depois = 1 7 A BC

- 2)
TRANSFORM CAMPO-B CHARACTERS FROM 17CB TO QRXT.

CAMPO-B antes = 1X 7X XA BC
CAMPO-B depois = QX RX XA TX

- 3)
TRANSFORM CAMPO-C

CHARACTERS

FROM CAMPO-X TO CAMPO-Y.

CAMPO-X = X1 7A BC
CAMPO-Y = CB A7 1X

CAMPO-C antes = 1X 7X XA BC
CAMPO-C depois = BC AC C7 1X

11.3 CLUSULA EXHIBIT

O EXHIBIT tem a finalidade de mostrar o contedo dos


campos.

Formato:
____________________________________________________________________________________________
Verso 1

106

Cobol
EXHIBIT NAMED

(IDENTIFICADOR-1) (IDENTIFICADOR-2)...

CHANGED NAMED (LITERAL NO NUMERICA)


CHANGED

- NAMED -> imprime / mostra o contedo do campo todas as vezes que passar pelo
EXHIBIT;

- CHANGED NAMED -> imprime / mostra o contedo do campo somente na troca de


valores;

- CHANGED -> imprime / mostra o contedo dos campos somente na troca de


valores em forma de colunas.

O EXHIBIT no pode ser utilizado para contadores


especiais;

O EXHIBIT mostra o nome do campo e em seguida o seu


contedo.

Exemplos:

EXHIBIT NAMED

CAMPO-A.

EXHIBIT CHANGED NAMED

CAMPO-A.

EXHIBIT CHANGED

CAMPO-A.

EXHIBIT CHANGED CAMPO-1 CAMPO-A CAMPO-G.

11.4 CLUSULA READY/RESET (TRACE)

____________________________________________________________________________________________
Verso 1

107

Cobol

O READY tem a finalidade de mostrar os passos do


programa assinalando os pargrafos pelo qual j passou.

Formato:
READY

TRACE.

RESET

TRACE.

READY TRACE
Imprime / mostra a sequncia de pargrafos ou SECTIONs, pelo qual o
programa est passando.

RESET TRACE
Encerra a operao do READY TRACE.

Exemplo:
PROCEDURE DIVISION.
A0.
READY TRACE.
.........
A1.
.........
...........
A5.
...........
A99.
EXIT.

Caso ocorra um ABEND, os ltimos pargrafos que antecederam o ABEND,


podem no aparecerem.

____________________________________________________________________________________________
Verso 1

108

Cobol

11.5 CLUSULA STRING


Formato:
STRING
INTO

IDENT-1

IDENT-2...

DELIMITED BY SIZE

IDENT-7

COMANDO-IMPERATIVO

ON OVERFLOW

Na clusula STRING, os caracteres so transferidos dos campos emissores


(IDENT-1, IDENT-2, ETC) para o campo receptor (IDENT-7) da esquerda para a
direita.
O campo emissor completo, ao qual se deu o primeiro nome (IDENT-1),
movido para as posies mais a esquerda do campo receptor (IDENT-7). Depois o
campo emissor completo ao qual foi dado o prximo nome (IDENT-2) movido,
imediatamente, para a direita das posies preenchidas do campo receptor.
Este processo continua at que todos os campos emissores tenham sido
transferidos ou que os campos estejam cheios.

Os campos emissores podem ser colocados em qualquer


lugar e em qualquer ordem na DATA DIVISION. A ordem na qual
eles so nomeados governa a ordem da transferncia de dados.
Se ON OVERFLOW no estiver especificado, o prximo
comando seguinte ao comando STRING executado.
Quando o(s) campo(s) emissor(es) for menor que os
campos receptores, estes no so completados com brancos
como comum no comando MOVE.

11.5.1 Regras para STRING


1- Todos os identificadores devem ser descritos como USAGE IS DISPLAY;

2- O identificador receptor (IDENT-7) deve ser um item de dados elementar sem


nenhum smbolo de edio;

3- A frase DELIMITED BY SIZE exigida e significa que a transferncia de dados


para quando o campo receptor est cheio, isto , quando encontra o campo
delimitador.

____________________________________________________________________________________________
Verso 1

109

Cobol

11.5.2 Exemplos de STRING


FD ARQENTRA
.........
.........
01 REG-ENTRA.
03

DATA-HOJE.
05

DIA-HOJE

PIC 99.

05

MES-HOJE

PIC 99.

05

ANO-HOJE

PIC 99.

...............................
WORKING-STORAGE SECTION.
................
01 LIN-IMPRIME.
03

FILLER

03

LIN-DATA.

PIC X(20) VALUE SPACES.

05

LIN-DIA

PIC 9(02)B.

05

LIN-DATA-EXT PIC X(40).

.............

01 TABELA-MESEXT.
03

FILLER

PIC X(20) VALUE DE JANEIRO DE 19*.

03

FILLER

PIC X(20) VALUE DE FEVEREIRO DE 19*.

03

FILLER

PIC X(20) VALUE DE MARCO DE 19*.

03

FILLER

PIC X(20) VALUE DE ABRIL DE 19*.

03

FILLER

PIC X(20) VALUE DE MAIO DE 19*.

03

FILLER

PIC X(20) VALUE DE JUNHO DE 19*.

03

FILLER

PIC X(20) VALUE DE JULHO DE 19*.

03

FILLER

PIC X(20) VALUE DE AGOSTO DE 19*.

03

FILLER

PIC X(20) VALUE DE SETEMBRO DE 19*.

03

FILLER

PIC X(20) VALUE DE OUTUBRO DE 19*.

____________________________________________________________________________________________
Verso 1

110

Cobol
03

FILLER

PIC X(20) VALUE DE NOVEMBRO DE 19*.

03

FILLER

PIC X(20) VALUE DE DEZEMBRO DE 19*.

01 FILLER
03

REDEFINES

MS-EXT

TABELA-MESEXT.

PIC X(20) OCCURS 12 TIMES.

PROCEDURE DIVISION.
.............
MOVE DIA-HOJE
STRING

TO

LIN-DIA

MS-EXT (MS-HOJE) ANO-HOJE DELIMITED BY *


INTO

LIN-DATA-EXT.

O resultado acima ser:

DATA-HOJE

LIN-DATA-EXT =

150897
15 DE AGOSTO DE 1997

ou

DATA-HOJE

LIN-DATA-EXT =

010497
01 DE ABRIL DE 1997

11.6 CLUSULA UNSTRING


Formato:
UNSTRING

IDENT-1

INTO

COMANDO IMPERATIVO

IDENT-2

IDENT-3...

ON OVERFLOW

Na clusula UNSTRING, os caracteres so transferidos dos campos


receptores (IDENT-2, IDENT-3, ETC) para o campo emissor (IDENT-1) da esquerda
para a direita.
O campo receptor ao qual foi dado o nome primeiro (IDENT-2)
completamente preenchido com os caracteres mais a esquerda do campo emissor.
Ento, o prximo campo emissor, este processo continua at que todos os campos
estejam cheios ou o campo emissor inteiro tenha sido transferido.
____________________________________________________________________________________________
Verso 1

111

Cobol

Os campos receptores podem ser colocados em qualquer


lugar e em qualquer ordem na DATA DIVISION.
A ordem na qual eles esto nomeados governa a ordem da
transferncia de dados.

11.6.1 Regras para UNSTRING


1- O campo emissor (IDENT-1) deve ser alfanumrico;

2- Os campos receptores (IDENT-2, IDENT-3, etc) devem ser descritos como


USAGE IS DISPLAY;

3- Os campos receptores podem ser alfabticos, numricos ou alfanumricos.

11.7 RETURN-CODE
uma rea que contm um cdigo de retorno qualquer para que este seja
checado pelo STEP posterior ao executado, atravs do cond do JCL.

Exemplo:
IDENTIFICATION DIVISION.
..........
ENVIRONMENT DIVISION.
.........
DATA DIVISION.
.........
PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.

____________________________________________________________________________________________
Verso 1

112

Cobol
READ ARQTESTE

AT END
MOVE +020 TO RETURN-CODE
CLOSE ARQTESTE
STOP RUN.

IF

TIPO EQUAL 1
MOVE +010

TO RETURN-CODE

CLOSE ARQTESTE
STOP RUN.

Deve-se procurar enviar o RETURN-CODE valorizado


sempre ao final do processamento, isto , antes do STOP RUN ou
GOBACK.

11.8 ABENDAR PROGRAMA


Para abendar um programa da maneira que vamos definir neste subcaptulo,
deve-se definir um campo na WORKING-STORAGE SECTION com 4 bytes binrios
com qualquer valor, que no ultrapasse a 4095.

Exemplo:
WORKING-STORAGE SECTION.
77 WRK-ABEND

PIC S9(04) VALUE +1234 COMP.

PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.
READ ARQTESTE

AT END
CLOSE ARQTESTE
STOP RUN.

____________________________________________________________________________________________
Verso 1

113

Cobol
IF

TIPO-TESTE

EQUAL

DISPLAY ERRO REGISTRO DE ENTRADA ARQTESTE


DISPLAY 0 PROGRAMA AFGT0904 SER CANCELADO
CALL ILBOABN0

USING

WRK-ABEND.

11.9 FILE STATUS


O FILE STATUS permite ao usurio monitorar a execuo de operaes de
entrada e sada (I/O) requisitadas para os arquivos de um programa.

Aps cada operao de I/O, o sistema move um valor para a STATUS KEY
(campo alfanumrico, com 2 caracteres definidos na WORKING-STORAGE
SECTION e especificado na ENVIRONMENT DIVISION, atravs do SELECT) que
acusa o sucesso ou o insucesso da operao.

Qualquer valor movido para a STATUS KEY diferente de zeros, revela que a
execuo no foi bem sucedida.

Alguns exemplos de operaes de I/O que podem ser


testadas o FILE STATUS:
-

OPEN

START

WRITE

READ

REWRITE

CLOSE

Exemplo:
IDENTIFICATION DIVISION.
.............
ENVIRONMENT DIVISION.
____________________________________________________________________________________________
Verso 1

114

Cobol
............
SELECT

SELECT

ARQ-IN

ASSING

TO

UT-S-ENTRADA

FILE STATUS

IS

WS-ARQ-IN.

ARQ-OUT ASSING

TO

UT-S-SAIDA

FILE STATUS

IS

WS-ARQ-OUT.

..........
WORKING-STORAGE SECTION.
......
77

WS-ARQ-IN

PIC X(02).

77

WS-ARQ-OUT

PIC X(02).

77

WS-OPERACAO

PIC X(05).

77

WS-FILE-STATUS

PIC X(02).

77

WS-ARQUIVO

PIC X(07).

77

WS-FIM

PIC X(01) VALUE N.

........

PROCEDURE DIVISION.
PERFORM INICIO
PERFORM PROCESSA UNTIL WS-FIM EQUAL S
PERFORM FINAL.
INICIO SECTION.
OPEN INPUT

ARQ-IN

OUTPUT ARQ-OUT.
IF WS-ARQ-IN

NOT EQUAL

00

MOVE OPEN

TO

WS-OPERACAO

MOVE WS-ARQ-IN

TO

WS-FILE-STATUS

MOVE ARQ-IN

TO

WS-ARQUIVO

GO TO DISPLAY-ERROS.
IF WS-ARQ-OUT

NOT EQUAL

00

MOVE OPEN

TO

WS-OPERACAO

MOVE WS-ARQ-OUT

TO

WS-FILE-STATUS

____________________________________________________________________________________________
Verso 1

115

Cobol
MOVE ARQ-OUT

TO

WS-ARQUIVO

GO TO DISPLAY-ERROS.
FIM-INICIO.
EXIT.
PROCESSA SECTION.
READ ARQ-IN.
IF

WS-ARQ-IN EQUAL 10
MOVE S

TO

WS-FIM

GO

TO

FIM-PROCESSA

ELSE
IF

WS-ARQ-IN NOT EQUAL 00


MOVE READ

TO

WS-OPERACAO

MOVE WS-ARQ-INT

TO

WS-FILE-STATUS

MOVE ARQ-IN

TO

WS-ARQUIVO

GO TO DISPLAY-ERROS.
.............
WRITE REG-OUT.
IF WS-ARQ-OUT

NOT EQUAL

MOVE WRITE

TO

00
WS-OPERACAO

MOVE WS-ARQ-OUT

TO

WS-FILE-STATUS

MOVE ARQ-OUT

TO

WS-ARQUIVO

GO TO DISPLAY-ERROS.
FIM-PROCESSA.
EXIT.
DISPLAY-ERROS SECTION.
DISPLAY * ERRO WS-OPERACAO WS-ARQUIVO
DISPLAY * FILE STATUS = WS-FILE-STATUS
STOP RUN.
FIM-DISPLAYS-ERROS.
EXIT.

____________________________________________________________________________________________
Verso 1

116

Cobol

aconselhvel que se teste a STATUS KEY aps cada


operao de I/O.
Se um valor diferente de zero for encontrado, o correto ser
terminar o programa e corrigir o erro. Se outra medida for tomada,
provvel que ocorra um abend em uma outra instruo.

11.9.1 Alguns insucessos em operaes de I/O


1) FILE STATUS = 90
DD STATEMENT MISSING (PARA ARQUIVO)

2) FILE STATUS = 92
READ APOS AT END
READ ANTES DO OPEN FILE STATUS 92 NA LEITURA
WRITE ANTES DO OPEN
OPEN COM INPUT PARA ARQUIVO DE OUTPUT
OPEN COM OUTPUT PARA ARQUIVO DE INPUT FILE STATUS 92 NA
LEITURA.

____________________________________________________________________________________________
Verso 1

117

Cobol

____________________________________________________________________________________________
Verso 1

118

Cobol

12. Exerccios
12.1 Programa 1

12.1.1 Nome do programa


EXERC001

12.1.2 Arquivos utilizados neste programa:


Entrada = CADASTRO e MOVIMENTO
Sada = CADATU e RELINCL

CADAS

MOVI

TRO

MENTO

PARM
____________________________________________________________________________________________
EXERC001
DD/MM/AAAA
Verso
1

119

Cobol

CAD
RELINCL

ATU

12.1.3 Layout dos arquivos


Arquivo CADASTRO, MOVIMENTO e CADATU tamanho de 60 bytes:

AGENCIA

CONTA

DGITO

NOME

VALOR

Numrico

Numrico

Alfanum. Alfanumrico

Num. Compactado

Tam. 04

Tam. 06

Tam. 01

Tam. 15 inteiros,

Tam. 40

2 decimais, com sinal

Relatrio RELINCL:

12.1.4 Procedimentos:
1) Ler os arquivos de entrada CADASTRO e MOVIMENTO.

2) Processar at o final dos arquivos de entrada


2.1) Efetuar comparao das chaves (AGENCIA, CONTA e DGITO)
Se existir registro correspondente no CADASTRO e no MOVIMENTO
Mover o VALOR do MOVIMENTO no CADASTRO
____________________________________________________________________________________________
Verso 1

120

Cobol
Gravar CADATU com base no CADASTRO
Seno
Se existir apenas o registro no CADASTRO
Gravar CADATU com base no CADASTRO
Seno
Se existir apenas o registro no MOVIMENTO
Gravar CADATU com base no MOVIMENTO
Imprimir registro MOVIMENTO no relatrio de includos (RELINCL).

3) A data do relatrio a data recebida no parm, no formato DD/MM/AAAA.

____________________________________________________________________________________________
Verso 1

121

Вам также может понравиться