Participante : ___________________________________
Treinamento: ___________________________________
Perodo
: ___________________________________
S a la
:____________________________________
____________________________________
____________________________________________________________________________________________
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
Cobol
DICA
LEIA
TOME NOTA
ATENO
CURIOSIDADE
____________________________________________________________________________________________
Verso 1
Cobol
2. Introduo
programas de controle;
superviso de sistema;
2.2 Programas
-
programas de aplicao.
____________________________________________________________________________________________
Verso 1
Cobol
2.3 COMPILAO
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.
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.
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.
valor zero
____________________________________________________________________________________________
Verso 1
Cobol
SPACE, SPACES
valor brancos
QUOTE, QUOTES
apstrofe
ALL LITERAL
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.
Divises;
Sees;
Pargrafos;
____________________________________________________________________________________________
Verso 1
Cobol
-
Sentenas;
3.5.1 Divises
As divises do Cobol para a estruturao do programa e suas funes so
quatro:
-
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.
10
Cobol
pargrafos
sentenas
comandos
clusulas
____________________________________________________________________________________________
Verso 1
11
Cobol
____________________________________________________________________________________________
Verso 1
12
Cobol
4. IDENTIFICATION DIVISION
____________________________________________________________________________________________
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.
____________________________________________________________________________________________
Verso 1
14
Cobol
5. ENVIRONMENT DIVISION
____________________________________________________________________________________________
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.
SOURCE-COMPUTER. (nome-do-computador).
OBJECT-COMPUTER. (nome-do-computador).
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.
____________________________________________________________________________________________
Verso 1
16
Cobol
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).
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
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).
Indicador
Uso
FD
descrio de arquivos
SD
descrio de sort-files
RD
descrio de relatrios
CD
descrio de comunicao
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
ACU-LIDOS
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.
____________________________________________________________________________________________
Verso 1
21
Cobol
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:
-
____________________________________________________________________________________________
Verso 1
22
Cobol
PIC X(30).
PIC 9(03)V9(02).
PIC X(05).
23
Cobol
Picture possveis:
-
77
DADO1
PICTURE
IS
AAA
VALUE
ABC.
77
DADO2
PIC
IS
AAA
VALUE
ABC.
77
DADO3
PIC
VALUE
BCD.
A(3)
01
DADO1
PIC XXX
01
DADO2
VALUE
ANO.
KKKK.
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
REGISTRO.
02
FILLER
PIC X(100).
FILLER
PIC X(10)
VALUE
SPACES.
02
FILLER
PIC X(06)
VALUE
FOLHAS.
02
DATA
PIC X(10)
VALUE
SPACES.
____________________________________________________________________________________________
Verso 1
26
Cobol
01 VALOR3
(Memria = 04D2)
VALORA
01
VALORB
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
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).
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
ALFANUMRICAS
LOW-VALUES
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);
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
____________________________________________________________________________________________
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
(NOME-ARQUIVO-4)
____________________________________________________________________________________________
Verso 1
32
Cobol
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.
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
Salto do canal 1 at 9
C10 at C12
Se um nmero inteiro for usado (1 a 100) sero saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
WRITE RELATORIO FROM
CABEC1
LIN-DET1
____________________________________________________________________________________________
Verso 1
34
Cobol
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
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
CLOSE CARTAO
36
Cobol
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
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)
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.
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.
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.
....................
so
preenchidas
automaticamente
com
espaos;
-
____________________________________________________________________________________________
Verso 1
40
Cobol
Quando
um
comando
MOVE
executado,
qualquer
Formato 1:
ADD (IDENT-1)
TO
(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).
Formato 4:
ADD CORRESPONDING
ADD CORR
(IDENT-1)
(IDENT-1)
TO (IDENT-2)
TO (IDENT-2).
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.
Outros exemplos:
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
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.
43
Cobol
ADD
TO
GIVING
ROUNDED
Formato 1:
SUBTRACT
FROM
Formato 2:
SUBTRACT
(IDENT-1)
FROM
(IDENT-2) ....
(IDENT-M)
ROUNDED
(IDENT-N)
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
Exemplo:
SUBTRACT A B
FROM D C.
J FROM L
GIVING
N.
01
A.
02
PIC 9(04).
02
PIC 99.
02
PIC 9(04).
02
PIC 99.
D.
SUBTRACT
CORR
FROM
D.
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).
Formato 1:
MULTIPLY
BY
B.
Formato 2:
MULTIPLY
BY
GIVING
C.
Formato 3:
MULTIPLY (IDENT-1)
BY
(IDENT-2)
Formato 4:
MULTIPLY (IDENT-1)
BY
(IDENT-2)
GIVING
(IDENT-3)
____________________________________________________________________________________________
Verso 1
46
Cobol
Exemplo/formato 1:
DIVIDE
BY
B.
Dividendo = A
Divisor = B
Quociente = B
Exemplo/formato 2:
DIVIDE
INTO
B.
Dividendo = B
Divisor = A
Quociente = B
Exemplo/formato 3:
____________________________________________________________________________________________
Verso 1
47
Cobol
DIVIDE
BY
GIVING
C.
INTO
GIVING
C.
Formato 4:
DIVIDE
(IDENT-1)
BY
(IDENT-2)
(IDENT-1)
INTO
(IDENT-2)
Formato 5:
DIVIDE
(IDENT-1)
BY(ou INTO)
(IDENT-3)
ROUNDED
(IDENT-2)
REMAINDER
GIVING
(IDENT-4).
Exemplos:
DIVIDE
INTO
REMAINDER
C.
DIVIDE
INTO
GIVING
REMAINDER
D.
____________________________________________________________________________________________
Verso 1
48
Cobol
DIVIDE
BY
REMAINDER
C.
DIVIDE
BY
GIVING
REMAINDER
D.
Adio (+);
Subtrao (-);
Multiplicao (*);
Diviso (/);
Exponenciao (**).
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
Exemplo:
IF (CAMPO / 4 * 6)
MOVE
CAMPO
EQUAL (CAMPO2 * 2) / 4
TO
SAI-CAMPO.
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
Syspunch = 72 bytes;
Formato:
ACCEPT (IDENT)
FROM
SYSIN.
CONSOLE.
(NOME-MNEMONICO).
Exemplos:
ACCEPT WS-DATA
FROM
DATE.
ACCEPT DADOS
FROM
SYSIN.
ACCEPT DATA-R
FROM
CONSOLE.
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
Formato:
IF
(CONDIO)
(SENTENA-1)
ELSE
(SENTENA-2)
____________________________________________________________________________________________
Verso 1
52
Cobol
Exemplo:
RENDIMENTO
GO
EQUAL
TO
DESCONTO-MAX
TO
DESCONTO-MIN.
ELSE
GO
VALOR
GO
IS
NEGATIVE
TO
FIM-ROTINA
TO
INICIO-ROTINA
ELSE
GO
END-IF
IF
ELSE
ADD 1
TO
CONT-NOME-IGUAL.
MOVE CONT-NOME-IGUAL
TO
RELATORIO-NOME-IGUAL.
____________________________________________________________________________________________
Verso 1
53
Cobol
IF TESTE
AO
VERDADEIRA
ELSE
AO
FALSA.
Tipos de testes:
-
teste de nome-de-condio;
teste de sinal.
Formato:
IF
(IDENT)
IS
NUMERIC
IS NOT ALPHABETIC
Exemplo:
IF
CONTA
COMPUTE
IS
NUMERIC
ELSE
DISPLAY CONTA NO NUMRICA, DIGITAR NOVAMENTE.
____________________________________________________________________________________________
Verso 1
54
Cobol
Exemplo:
01 CAMPO
9(08).
01 CAMPO
9(05)
01 CAMPO
S9(07) COMP-3.
COMP-3.
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.
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
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.
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
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.
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.
____________________________________________________________________________________________
Verso 1
57
Cobol
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.
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.
Formato:
PERFORM
TIMES.
____________________________________________________________________________________________
Verso 1
60
Cobol
Se
Exemplo:
PERFORM CALCULAR
THRU
CALCULAR-FIM
5 TIMES.
.......................
ou
PERFORM CALCULAR
THRU
CALCULAR-FIM
VALOR-NUM
TIMES.
..........................
CALCULAR.
.............
..............
CALCULAR-FIM.
____________________________________________________________________________________________
Verso 1
61
Cobol
Formato:
PERFORM
(NOME-ROTINA-1)
UNTIL
THRU
(NOME-ROTINA-2)
(CONDIO)
ou
PERFORM
(NOME-ROTINA-1)
UNTIL
(CONDIO)
Exemplo:
PERFORM
ROT-A
THRU
FIM-ROT-A
UNTIL
WS-NUM
IS
NEGATIVE.
ROT-A.
.................
SUBTRACT 1 FROM WS-NUM.
FIM-ROT-A.
EXIT.
____________________________________________________________________________________________
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)
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.
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.
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
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.
Formato:
(SYNCHRONIZED) (LEFT)
(SYNC)
(RIGHT)
PIC X(20).
02 FILLER
PIC X(01).
02 A
02 CODIGO
PIC 9(02).
02 B
65
Cobol
Exemplo:
01 REGISTRO.
02 NOME
PIC X(20).
02 FILLER
PIC X(01).
02 A
02 CODIGO
PIC 9(02).
02 B
....................
ADD
10
TO
SUBTRACT 5 FROM
B.
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.
= 100,00
TO
OR
200,00
OR
400,00
OK.
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.
DATE = AAMMDD
(6 bytes)
DAY
= AADDD
Exemplos:
ACCEPT
CAMPO-DATA
FROM
DATE.
ACCEPT
CAMPO-DIA
FROM
DAY.
ACCEPT
CAMPO-HORA
FROM
TIME.
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
TO
DA-I-DDCADAST
ACCESS
MODE
IS
RANDOM
RECORD
KEY
IS
CAD-CHAVE
NOMINAL KEY
IS
W-CHAVE.
____________________________________________________________________________________________
Verso 1
71
Cobol
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
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.
.....................
..................
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
Formato no WRITE:
WRITE
(NOME-DO-DADO, REGISTRO)
FROM
(AREA-IDENTIF)
Formato:
REWRITE
(NOME-DO-DADO, REGISTRO)
FROM
(AREA-IDENTIF)
____________________________________________________________________________________________
Verso 1
74
Cobol
INVALID KEY (SENTENA IMPERATIVA)
Exemplo:
MOVE
CAR-CHAVE
REWRITE
TO
REG-CADASTRO.
ERRO NO REWRITE
STOP RUN.
DISPLAY OK, REGISTRO REGRAVADO.
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)
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
....................
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.
____________________________________________________________________________________________
Verso 1
77
Cobol
9. TABELAS
As tabelas devem ser construdas na DATA DIVISION.
TIMES
OCCURS X
TO
XX
DEPENDING ON (CAMPO).
TABELA SUBSCRITA;
TABELA INDEXADA.
____________________________________________________________________________________________
Verso 1
78
Cobol
-
DIRECIONAL;
BIDIMENSIONAL;
TRIDIMENSIONAL.
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
____________________________________________________________________________________________
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
03
NOME-MS
PIC X(09).
..................
PROCEDURE DIVISION.
....................
DISPLAY TECLE DATA FORMATO DD/MM/AAAA UPON CONSOLE.
ACCEPT
MOVE
TO
NOME-MS.
Exemplo 2:
WORKING-STORAGE SECTION.
.............
77 IND
.............
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
____________________________________________________________________________________________
Verso 1
80
Cobol
03 FILLER
..........
..........
03 FILLER
03 FILLER
02 TAB-R
REDEFINES
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
dos
indexadores
para
outros
itens
de
dados
Formato 1:
SET
(INDEX NAME)
TO
(IDENTIFICADOR)
(NUM-INTEIRO)
(IDENTIFICADOR)
(INDEX NAME)
Formato 2:
SET
(INDEXADOR-A)
(INDEXADOR-B)
UP
BY
(IDENT-1)
ou
DOWN BY (LIT-2)
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.
Formato 1:
SEARCH
IDENT-1
AT
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)
83
Cobol
Exemplo 1:
WORKING-STORAGE SECTION.
01 TABELA1.
03
TABELA-NOMES.
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
____________________________________________________________________________________________
Verso 1
84
Cobol
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
05
FILLER
TAB-NOM
REDEFINES
03
TABELA-NOMES
NOME
AUX-NOME
PIC X(11).
..................
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
03 LIN-MSG
PIC X(20).
......
01 TABELA2.
03
03
TAB-MSG.
05 FILLER
05 FILLER
05 FILLER
05 FILLER
05 FILLER
FILLER
05
REDEFINES
TAB-2
OCCURS
TAB-MSG.
5
TIMES
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
____________________________________________________________________________________________
Verso 1
87
Cobol
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
02
ENDERECO
PIC X(30).
2 - Comando de Sort:
O comando de sort um item necessrio na PROCEDURE DIVISION.
Exemplo:
____________________________________________________________________________________________
Verso 1
88
Cobol
SORT TRABALHO
DESCENDING
NOME
VALOR
ASCENDING
ENDERECO
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.
____________________________________________________________________________________________
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).
(NOME-ARQ-CLASSIF):
- no pode dar OPEN, CLOSE, READ e WRITE;
- deve ter um SELECT;
____________________________________________________________________________________________
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).
Formato:
RETURN (NOME-DO-ARQ-CLASSIF)
AT
INTO
(AREA)
END
(COMANDO IMPERATIVO).
Formato:
SORT
(NOME-ARQ-CLASSIF)
(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;
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
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
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
____________________________________________________________________________________________
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.
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
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
03
ENT-NOME
PIC X(30).
..........
PROCEDURE DIVISION.
.....
PRINCIPAL SECTION.
SORT ARQSORT
USING
ASCENDING
KEY SRT-TIPO
DESCENDING
KEY SRT-CODIGO
ARQENT
AT END
GO TO FIM-CLASSIFICADO.
..........
.........
FIM-CLASSIFICADO.
EXIT.
____________________________________________________________________________________________
Verso 1
95
Cobol
Arquivos
de
tamanhos
variveis
no
devem
ser
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
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
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
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
Arquivos
de
tamanhos
variveis
no
devem
ser
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
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.
*****************************
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
____________________________________________________________________________________________
Verso 1
101
Cobol
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).
____________________________________________________________________________________________
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:
-
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
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)
____________________________________________________________________________________________
Verso 1
105
Cobol
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
CAMPO-X = X1 7A BC
CAMPO-Y = CB A7 1X
CAMPO-C antes = 1X 7X XA BC
CAMPO-C depois = BC AC C7 1X
Formato:
____________________________________________________________________________________________
Verso 1
106
Cobol
EXHIBIT NAMED
(IDENTIFICADOR-1) (IDENTIFICADOR-2)...
- NAMED -> imprime / mostra o contedo do campo todas as vezes que passar pelo
EXHIBIT;
Exemplos:
EXHIBIT NAMED
CAMPO-A.
CAMPO-A.
EXHIBIT CHANGED
CAMPO-A.
____________________________________________________________________________________________
Verso 1
107
Cobol
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.
____________________________________________________________________________________________
Verso 1
108
Cobol
IDENT-1
IDENT-2...
DELIMITED BY SIZE
IDENT-7
COMANDO-IMPERATIVO
ON OVERFLOW
____________________________________________________________________________________________
Verso 1
109
Cobol
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.
05
LIN-DIA
PIC 9(02)B.
05
.............
01 TABELA-MESEXT.
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
03
FILLER
____________________________________________________________________________________________
Verso 1
110
Cobol
03
FILLER
03
FILLER
01 FILLER
03
REDEFINES
MS-EXT
TABELA-MESEXT.
PROCEDURE DIVISION.
.............
MOVE DIA-HOJE
STRING
TO
LIN-DIA
LIN-DATA-EXT.
DATA-HOJE
LIN-DATA-EXT =
150897
15 DE AGOSTO DE 1997
ou
DATA-HOJE
LIN-DATA-EXT =
010497
01 DE ABRIL DE 1997
IDENT-1
INTO
COMANDO IMPERATIVO
IDENT-2
IDENT-3...
ON OVERFLOW
111
Cobol
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.
Exemplo:
WORKING-STORAGE SECTION.
77 WRK-ABEND
PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.
READ ARQTESTE
AT END
CLOSE ARQTESTE
STOP RUN.
____________________________________________________________________________________________
Verso 1
113
Cobol
IF
TIPO-TESTE
EQUAL
USING
WRK-ABEND.
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.
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
........
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
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
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
CADAS
MOVI
TRO
MENTO
PARM
____________________________________________________________________________________________
EXERC001
DD/MM/AAAA
Verso
1
119
Cobol
CAD
RELINCL
ATU
AGENCIA
CONTA
DGITO
NOME
VALOR
Numrico
Numrico
Alfanum. Alfanumrico
Num. Compactado
Tam. 04
Tam. 06
Tam. 01
Tam. 15 inteiros,
Tam. 40
Relatrio RELINCL:
12.1.4 Procedimentos:
1) Ler os arquivos de entrada CADASTRO e MOVIMENTO.
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).
____________________________________________________________________________________________
Verso 1
121