Cobol - Politec
Cobol - Politec
Cobol - Politec
Participante : ___________________________________
Treinamento: ___________________________________
Período : ___________________________________
Sala : ____________Horário: _______________ Instrutores
:____________________________________
____________________________________
____________________________________________________________________________________________
Versão 1 1
Cobol
____________________________________________________________________________________________
Versão 1 2
Cobol
7.19 CLÁUSULA (BLANK WHEN ZERO)............................................................................................. 67
7.20 CLÁUSULA (SYNCHRONIZED – SYNC)......................................................................................67
7.21 OPERADORES LÓGICOS............................................................................................................. 69
7.22 DATA E HORA DO SISTEMA....................................................................................................... 70
8 ARQUIVOS DE ACESSO DIRETO..................................................................................................... 74
8.1 UTILIZANDO ACESSO DIRETO – LEITURA SEQUENCIAL.........................................................75
9 TABELAS............................................................................................................................................ 81
9.1 CLÁUSULA OCCURS..................................................................................................................... 81
9.2 TABELA SUBSCRITA..................................................................................................................... 82
9.3 CLÁUSULA SET.............................................................................................................................. 84
9.4 CLÁUSULA SEARCH...................................................................................................................... 85
9.5 TABELA INDEXADA....................................................................................................................... 87
10 CLASSIFICAÇÃO DE DADOS......................................................................................................... 91
10.1 CLÁUSULA SELECT (SORT)....................................................................................................... 92
10.2 CLÁUSULA RELEASE.................................................................................................................. 93
10.3 CLÁUSULA RETURN.................................................................................................................... 94
10.4 CLÁUSULA SORT......................................................................................................................... 94
11 OUTRAS CLÁUSULAS.................................................................................................................. 105
11.1CLÁUSULA EXAMINE / INSPECT - REPLACING.......................................................................105
11.2 CLÁUSULA TRANSFORM.......................................................................................................... 108
11.3 CLÁUSULA EXHIBIT................................................................................................................... 110
11.4 CLÁUSULA READY/RESET (TRACE)........................................................................................ 111
11.5 CLÁUSULA STRING................................................................................................................... 112
11.6 CLÁUSULA UNSTRING.............................................................................................................. 115
11.7 RETURN-CODE........................................................................................................................... 116
11.8 ABENDAR PROGRAMA............................................................................................................. 117
11.9 FILE STATUS.............................................................................................................................. 117
12 EXERCÍCIOS.................................................................................................................................. 123
12.1 PROGRAMA 1............................................................................................................................. 123
____________________________________________________________________________________________
Versão 1 3
Cobol
DICA
LEIA
TOME NOTA
ATENÇÃO
CURIOSIDADE
____________________________________________________________________________________________
Versão 1 4
Cobol
2. Introdução
- programas de controle;
- supervisão de sistema;
- supervisão dos arquivos;
- supervisão dos job´s.
2.2 Programas
____________________________________________________________________________________________
Versão 1 5
Cobol
2.3 COMPILAÇÃO
3. O que é Cobol?
____________________________________________________________________________________________
Versão 1 6
Cobol
COBOL significa Common Business Oriented Language, isto é, Linguagem
Comum Orientada para o Comércio.
Coluna de 1 a 6
Coluna 7
Coluna de 8 a 72
____________________________________________________________________________________________
Versão 1 7
Cobol
O asterisco (*) na coluna 7, determinará que toda a linha ficará como
comentário.
A barra (/) na coluna 7, saltará uma página e gravará o comentário logo em
seguida.
3.3 Palavras
Em comprimento, uma palavra não deve exceder a 30 caracteres. O
espaço em branco não é um caracter permitido para a formação de palavras.
Uma palavra não pode começar nem terminar com hífen (-).
Exemplo: IMPOSTO-DE-RENDA.
____________________________________________________________________________________________
Versão 1 8
Cobol
SPACE, SPACES valor brancos
QUOTE, QUOTES apóstrofe
ALL ‘LITERAL’ um ou mais ocorrências de literal
HIGH-VALUE, HIGH-VALUES maior valor (hexa FF)
LOW-VALUE, LOW-VALUES menor valor (hexa 00)
3.3.3 Palavras-chave
3.4 Caracteres
Há um conjunto de caracteres válidos no Cobol, como:
- De ‘0’ a ‘9’;
- De ‘A’ a ‘Z’;
- Espaços, parênteses, menor que, maior que, ponto, sinal de mais, sinal de
menos, dólar, E comercial, arroba, igual, vírgula, barra, asterisco, apóstrofes.
____________________________________________________________________________________________
Versão 1 9
Cobol
- Sentenças;
- Cláusulas (nas três primeiras divisões);
- Comandos (na Procedure Division).
3.5.1 Divisões
3.5.2 Seções
Exemplo:
CONFIGURATION SECTION.
WORKING-STORAGE SECTION.
- na PROCEDURE DIVISION para especificar a segmentação do programa.
3.5.3 Parágrafos
Na PROCEDURE DIVISION é utilizada para agrupar sentenças, permitindo a
alteração do fluxo lógico.
3.5.4 Sentenças
divisões
As sentenças são formadas por uma ou mais cláusulas ou comandos, e
terminado por um ponto.
seções
____________________________________________________________________________________________
Versão 1 10
Cobol
parágrafos
sentenças
comandos cláusulas
____________________________________________________________________________________________
Versão 1 11
Cobol
____________________________________________________________________________________________
Versão 1 12
Cobol
4. IDENTIFICATION DIVISION
____________________________________________________________________________________________
Versão 1 13
Cobol
É a primeira das 4 divisões.
IDENTIFICATION DIVISION.
Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. DEMPB012.
000003 AUTHOR. ANA PAULA NUNES.
000004 INSTALLATION. SAO-CENTRO.
000005 DATE-WRITTEN. 03/08/1997.
000006 DATE-COMPILED.
000007 SECURITY. ESTE PROGRAMA UTILIZA ARQUIVOS DE BACK-UP COMO
000008 SEGURANCA.
000009 REMARKS. O PROGRAMA EMITE RELATORIO A PARTIR DO ARQUIVO P-112.
000010
____________________________________________________________________________________________
Versão 1 14
Cobol
5. ENVIRONMENT DIVISION
____________________________________________________________________________________________
Versão 1 15
Cobol
É a segunda divisão do Cobol.
Identifica a máquina que está sendo usada. Contém a descrição do
computador e a designação dos arquivos para as respectivas unidades de
configuração do computador.
É dividida em duas seções:
- CONFIGURATION SECTION;
- INPUT-OUTPUT SECTION.
- SOURCE-COMPUTER. (nome-do-computador).
- OBJECT-COMPUTER. (nome-do-computador).
- SPECIAL-NAMES. (nome-da-função IS nome-simbólico).
5.1.1 SPECIAL-NAMES
Este parágrafo relaciona funções existentes no compilador Cobol com nomes
simbólicos dados pelo programador.
Exemplo:
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA
C01 IS CANAL-1.
____________________________________________________________________________________________
Versão 1 16
Cobol
5.2 INPUT-OUTPUT SECTION
Define arquivos utilizados pelo programa efetuando ligações com o
equipamento da máquina.
5.2.1 FILE-CONTROL
É o controle de arquivos.
Cada arquivo descrito na “DATA DIVISION” deverá ter seu nome simbólico de
arquivo descrito após o “select”.
5.2.1.1 SELECT
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT (nome-arquivo) ASSIGN TO(classe-organização-nome).
____________________________________________________________________________________________
Versão 1 17
Cobol
5.2.2 I-O-CONTROL.
O “I-O-CONTROL” tem a finalidade de auxiliar na gravação de arquivos
variáveis.
Há operação de CHECK-POINT, ou seja, para trabalhos com arquivos de
grandes quantidades de registros, garantindo a execução do serviço 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 definição de uma “FD” para vários arquivos
que possuam o mesmo lay-out.
____________________________________________________________________________________________
Versão 1 18
Cobol
6. DATA DIVISION
____________________________________________________________________________________________
Versão 1 19
Cobol
Caso alguma não seja necessária, deve ser omitida:
1 – FILE SECTION.
2 – WORKING-STORAGE SECTION.
3 – LINKAGE SECTION.
4 – COMMUNICATION SECTION (estabelece ligações entre o programa cobol
e programa de controle de teleprocessamento).
5 – REPORT SECTION (descreve relatório que o programa deve emitir).
Indicador Uso
FD descrição de arquivos
SD descrição de “sort-files”
RD descrição de relatórios
CD descrição de comunicação
01 RECIBO.
02 IDENTIFICACAO.
03 PREFIXO PIC X(02).
03 RESTO PIC X(05).
02 NUMERO PIC 9(03).
02 FILLER PIC X(50).
(FD) indicador
____________________________________________________________________________________________
Versão 1 20
Cobol
(01), (02), (03) números de nível
(IDENTIFICACAO), (RECIBO) itens de grupo
(PREFIXO), (RESTO), (NUMERO), (FILLER) itens elementares
WORKING-STORAGE SECTION.
77 ACU-LIDOS PIC 9(05) VALUE 0.
77 AUX-NOME PIC X(20).
(88) -> especifica condições que devem ser associadas a valores particulares.
Exemplos:
1 WRK-REG.
02 WRK-SEXO PIC X(01).
88 FEMI VALUE ‘F’.
88 MASC VALUE ‘M’.
____________________________________________________________________________________________
Versão 1 21
Cobol
Formato:
FD NOME-DO-ARQUIVO
BLOCK CONTAINS (quantidade de blocos)
RECORD CONTAINS (tamanho do registro lógico)
RECORDING MODE (formato do arquivo)
LABEL RECORD (formato do label)
DATA RECORD (nome do registro).
(RECORDING MODE IS X)
Designa o formato do arquivo:
- (F) -> comprimento fixo
- (V) -> comprimento variável
- (U) -> indefinido
- (S) -> estendido (spanned)
Se não for colocada a cláusula “RECORDING MODE”, o compilador
determinará pelo cartão “DD” ou catálogo.
____________________________________________________________________________________________
Versão 1 22
Cobol
01 RECIBO.
02 NOME PIC X(30).
02 VALOR PIC 9(03)V9(02).
02 FILLER PIC X(05).
É usada para descrição de informações sobre itens, tais como: tamanho, sinal,
tipo (numérico, alfanumérico ou alfabético).
____________________________________________________________________________________________
Versão 1 23
Cobol
Picture possíveis:
- ALFABÉTICO -> é representado por letras mais o espaço, e o carácter
usado é a letra “A”.
Exemplos:
77 DADO1 PICTURE IS AAA VALUE ‘ABC’.
77 DADO2 PIC IS AAA VALUE ‘ABC’.
77 DADO3 PIC A(3) VALUE ‘BCD’.
- EDIÇÃO -> utiliza-se para itens que devem ser impressos ou enviados para
tela de programas on-line. São definidos na “WORKING-STORAGE
SECTION”.
O formato é representado por qualquer combinação dos seguintes
caracteres:
(9), (V), (P), (.), (Z), (*), (CR), (DB), (,), (0), (B), ($), (+), (-)
____________________________________________________________________________________________
Versão 1 24
Cobol
(9), (V), (P) -> são usados de maneira semelhante ao uso dos itens numéricos;
(.) -> o ponto decimal, quando usado, é inserido na posição indicada;
(Z) -> indica a supressão de zeros não significativos;
(*) -> é usado como proteção de um número impresso;
(CR), (DB) -> significam CR (crédito) e DB (débito). Usa-se somente quando o
número for negativo. Caso o número seja positivo, não aparecerá nada;
(,), (0), (B) -> são símbolos de edição que são inseridos na impressão;
($), (+), (-) -> são impressos na posição indicada.
OBS: O símbolo (-) não dever ser o próximo sinal após o ponto. Caso isso
ocorrer, definir mais um (-). Exemplo:
____________________________________________________________________________________________
Versão 1 25
Cobol
Exemplo:
01 REGISTRO.
02 FILLER PIC X(100).
1 CABEC.
02 FILLER PIC X(10) VALUE SPACES.
02 FILLER PIC X(06) VALUE ‘FOLHAS’.
02 DATA PIC X(10) VALUE SPACES.
____________________________________________________________________________________________
Versão 1 26
Cobol
6.2.1 OPÇÃO COMPUTATIONAL (COMP)
Só podem ser usados para itens numéricos (COMP, COMP-1, COMP-2,
COMP-3, COMP-4).
____________________________________________________________________________________________
Versão 1 27
Cobol
01 DADOS PIC X(10) JUSTIFIED RIGHT.
01 DADOS PIC X(10) JUST RIGHT.
1 REGISTRO.
03 ALPINO PIC X(06).
03 BETA.
05 LETRA PIC X(04).
05 NUM PIC 9(02).
03 ALFA REDEFINES BETA.
05 AUT PIC 9(01).
05 LIVRE PIC X(05).
03 ZUM PIC X(08).
ZERO ALFANUMÉRICAS
ZEROS OU
ZEROES NUMÉRICAS
SPACE ALFABÉTICAS
SPACES OU ALFANUMÉRICAS
____________________________________________________________________________________________
Versão 1 28
Cobol
LINKAGE SECTION.
01 PARAMETROS.
03 TAMANHO PIC 9(04) COMP.
03 DATA-PARM PIC 9(08).
____________________________________________________________________________________________
Versão 1 29
Cobol
“LINKAGE” na “WORKING-STORAGE”, sendo obrigatório os campos a
serem passados, estarem na mesma ordem do programa chamado.
- No exemplo acima, os dados serão jogados do “PARM” para
“PARAMETROS” após a cláusula “PROCEDURE DIVISION USING
PARAMETROS”.
____________________________________________________________________________________________
Versão 1 30
Cobol
____________________________________________________________________________________________
Versão 1 31
Cobol
7. PROCEDURE DIVISION
____________________________________________________________________________________________
Versão 1 32
Cobol
READ (NOME-ARQUIVO).
ou
READ (NOME-ARQUIVO) INTO (AREA-LAYOUT).
ou
READ (NOME-ARQUIVO) INTO (AREA-LAYOUT)
AT END
GO TO 100-99-FIM.
- 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 não for usado o salto automático de linhas no programa. Não 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 página) para depois imprimir.
O “BEFORE” primeiro imprime para depois saltar de linhas ou (pular de página).
Exemplos:
____________________________________________________________________________________________
Versão 1 33
Cobol
FILE SECTION.
01 SAIDA.
XXXXXXX
WORKING-STORAGE SECTION.
01 AREA-1.
XXXXXXXXXXXX
Se um número inteiro for usado (1 a 100) serão saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
FD IMPRESSAO
____________________________________________________________________________________________
Versão 1 34
Cobol
LABEL OMITTED
RECORDING F
BLOCK 0.
1 RELATORIO.
2 CARRO PIC X(01).
02 FILLER PIC X(132).
WORKING-STORAGE SECTION.
1 CABEC1.
2 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.
____________________________________________________________________________________________
Versão 1 35
Cobol
- Não deve-se utilizar “AFTER” e “BEFORE” no mesmo programa.
CLOSE CARTAO
STOP RUN.
GOBACK.
____________________________________________________________________________________________
Versão 1 36
Cobol
Exemplo:
IDENTIFICATION DIVISION.
...............
LINKAGE SECTION.
...............
PROCEDURE DIVISION.
..............
GOBACK.
7.7 CLÁUSULA GO TO
Permite a transferência da parte do programa que está sendo executada para
uma outra.
Formato:
LEITURA.
......... AT END
GO TO FIM-LEITURA.
.............................
FIM-LEITURA.
Formato 1:
MOVE (CAMPO-1) TO (CAMPO-2) (CAMPO-3)
____________________________________________________________________________________________
Versão 1 37
Cobol
Exemplo:
WORKING-STORAGE SECTION.
01 DADO-A PIC X(05) VALUE ‘ABC’.
01 DADO-2 PIC X(05).
01 DADO-3 PIC X(05) VALUE SPACES.
01 DADO-4 PIC X(05).
...........................
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 (CAMPO-1) TO (CAMPO2)
Exemplo:
WORKING-STORAGE SECTION.
1 CAMPO-1.
03 NOME PIC X(05).
03 ENDER PIC X(10).
1 CAMPO-2.
03 ENDER PIC X(10).
03 NOME PIC X(05).
....................
PROCEDURE DIVISION.
MOVE CORR CAMPO-1 TO CAMPO-2.
____________________________________________________________________________________________
Versão 1 38
Cobol
Exemplo com literais figurativas:
Exemplo:
WORKING-STORAGE SECTION.
1 TABELA-1.
03 NOME PIC X(05).
03 ENDER PIC X(10).
1 TABELA-2.
03 ENDER PIC X(10).
03 NOME PIC X(05).
01 SELECIONADO PIC X(10).
....................
PROCEDURE DIVISION.
MOVE ENDER OF TABELA-2 TO SELECIONADO
MOVE SELECIONADO TO ENDER OF TABELA-1.
....................
____________________________________________________________________________________________
Versão 1 39
Cobol
Cobol como item alfanumérico, isto é, todo item de grupo é um
item alfanumérico.
Formato 1:
ADD (IDENT-1) TO (IDENT-2).
____________________________________________________________________________________________
Versão 1 40
Cobol
Nesta forma, soma-se o conteúdo 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
(sentença imperativa).
Os campos IDENT-1 e IDENT-2 serão 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 (IDENT-1) TO (IDENT-2)
ADD CORR (IDENT-1) TO (IDENT-2).
Exemplo:
1 CAMPO-1.
03 A PIC 9(03)V(02).
03 B PIC 9(04).
1 CAMPO-2.
03 A PIC 9(03)V9(02).
03 B PIC 9(04).
____________________________________________________________________________________________
Versão 1 41
Cobol
ADD CORR CAMPO-1 TO CAMPO-2.
Outros exemplos:
ADD A B TO C D.
(Cálculo 1 = A + B + C = S1 / Cálculo 2 = A + B + D = S2
C = S1 = 6 / D = S2 = 7)
ADD A TO B.
(A + B = S1 / B = S1 = 3)
ADD A C GIVING D
(A + C = S1 / D = S1 = 4)
____________________________________________________________________________________________
Versão 1 42
Cobol
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:
7.10CLÁUSULA SUBTRACT
____________________________________________________________________________________________
Versão 1 43
Cobol
Formato 1:
SUBTRACT A FROM B
No cálculo acima, faz-se = (B – A) e o resultado fica em “B”.
Formato 2:
Formato 3:
Fomato 4:
Exemplo:
SUBTRACT A B FROM D C.
____________________________________________________________________________________________
Versão 1 44
Cobol
São feitas as seguintes operações para o comando acima:
1) D – (A + B), o resultado é colocado em “D”.
2) C – (B + A), o resultado é colocado em “C”.
1 A.
02 B PIC 9(04).
02 C PIC 99.
01 D.
02 B PIC 9(04).
02 C PIC 99.
____________________________________________________________________________________________
Versão 1 45
Cobol
Formato 1:
MULTIPLY A BY B.
Formato 2:
MULTIPLY A BY B GIVING C.
Formato 3:
Formato 4:
____________________________________________________________________________________________
Versão 1 46
Cobol
Exemplo/formato 1:
DIVIDE A BY B.
Dividendo = A
Divisor = B
Quociente = B
Exemplo/formato 2:
DIVIDE A INTO B.
Dividendo = B
Divisor = A
Quociente = B
Exemplo/formato 3:
DIVIDE A BY B GIVING C.
____________________________________________________________________________________________
Versão 1 47
Cobol
DIVIDE A INTO B GIVING C.
Formato 4:
Formato 5:
Exemplos:
7.13CLÁUSULA COMPUTE
____________________________________________________________________________________________
Versão 1 48
Cobol
Outros exemplos:
COMPUTE RESULTADO = B * B * A.
COMPUTE EXPON = B ** 2.
COMPUTE Z = (A / B) * C.
Formato 1:
COMPUTE (N) ROUNDED (M) ROUNDED...= (EXPRESSÃO ARITMETICA)
ON SIZE ERROR (SENTENÇA IMPERATIVA).
____________________________________________________________________________________________
Versão 1 49
Cobol
Exemplo:
7.14CLÁUSULA DISPLAY
Formato 1:
DISPLAY ‘TOTAL DE REGISTROS LIDOS = ‘ TOTAL-LIDOS.
Formato 2:
DISPLAY ACUM-GRAVADOS ‘REGISTROS GRAVADOS’ UPON CONSOLE.
SYSPUNCH.
____________________________________________________________________________________________
Versão 1 50
Cobol
- Console = 100 bytes;
- Syspunch = 72 bytes;
- Sysout = 120 bytes.
7.15CLÁUSULA ACCEPT
Formato:
ACCEPT (IDENT) FROM SYSIN.
CONSOLE.
(NOME-MNEMONICO).
(NOME-MNEMONICO) = executa uma operação de entrada do computador
para um campo definido na “WORKING-STORAGE SECTION”.
Exemplos:
1 DATA-DO-DIA.
03 DIA PIC 9(02).
03 FILLER PIC X(01).
____________________________________________________________________________________________
Versão 1 51
Cobol
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.
............
//........
//SYSIN DD *
ARQUIVODT4573
Ou
//SYSIN DD DSN=V.POOL.ARQDATA(0),DISP=SHR
7.16CLÁUSULA IF
Formato:
Exemplo:
____________________________________________________________________________________________
Versão 1 52
Cobol
Outros exemplos:
IF VALOR IS NEGATIVE
GO TO FIM-ROTINA
ELSE
GO TO INICIO-ROTINA
END-IF
____________________________________________________________________________________________
Versão 1 53
Cobol
IF TESTE
AÇÃO VERDADEIRA
ELSE
AÇÃO FALSA.
Tipos de testes:
- teste de condição de classe;
- teste de nome-de-condição;
- teste de condição de relação;
- teste de sinal.
Formato:
IF (IDENT) IS NUMERIC
IS NOT ALPHABETIC
Exemplo:
IF CONTA IS NUMERIC
COMPUTE SALDO = SALDO-TOTAL – TAXAS
ELSE
DISPLAY ‘CONTA NÃO NUMÉRICA, DIGITAR NOVAMENTE’.
____________________________________________________________________________________________
Versão 1 54
Cobol
Exemplo:
01 CAMPO 9(08).
01 CAMPO 9(05) COMP-3.
01 CAMPO S9(07) COMP-3.
1 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.
____________________________________________________________________________________________
Versão 1 55
Cobol
Formato:
Exemplos:
IF AC-LINHA GREATER 50
GO TO ROTINA-CABECALHO.
IF CODIGO = 2
MOVE CODIGO TO REG-CODIGO.
IF VALOR IS POSITIVE
MOVE VALOR TO SAI-VALOR
____________________________________________________________________________________________
Versão 1 56
Cobol
ADD VALOR TO AC-VALOR.
IF NUM-2 IS NEGATIVE
GO TO ERRO.
IF VALOR IS NUMERIC
IF VALOR IS ZEROS
IF DADO IS NEGATIVE
MOVE ‘CAMPO VALIDO’ TO MENSAGEM
ELSE
GO TO ROT-LEITURA
ELSE
NEXT SENTENCE
ELSE
GO TO INICIO.
7.17CLÁUSULA PERFORM
____________________________________________________________________________________________
Versão 1 57
Cobol
Formato (simples):
Exemplo:
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
PERFORM ROT-ABC THRU FIM-ROT-ABC.
MOVE A TO B
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.
____________________________________________________________________________________________
Versão 1 58
Cobol
PERFORM ROT-A THRU ROT-C.
..........
ROT-A.
.............
.............
ROT-B.
PERFORM ROT-D TRHU ROT-E.
ROT-C.
..........
..........
ROT-D.
.........
.........
ROT-E.
...........
Exemplo:
00-INICIO SECTION.
00-00-A.
MOVE 1 TO AC-VALOR.
PERFORM 10-LEITURA-CARTAO.
IF CHAVE-FIM EQUAL ‘NAO’
GO TO 00-00-A.
.............
00-99-FIM.
EXIT.
____________________________________________________________________________________________
Versão 1 59
Cobol
10-LEITURA-CARTAO SECTION.
READ REGCAD AT END
MOVE ‘FIM’ TO CHAVE-FIM
GO TO 10-99-FIM.
ADD 1 TO AC-LIDOS.
IF TIPO EQUAL 4
PERFORM 15-TIPO-4.
10-99-FIM.
EXIT.
15-TIPO-4 SECTION.
.............
15-99-FIM.
EXIT.
Formato:
____________________________________________________________________________________________
Versão 1 60
Cobol
Se “NOME-DADO” ou “NUM-INTEIRO” for de valor negativo ou zero, o
comando “PERFORM” que conter a opção “TIMES”, não será executado e o
processamento continuará após o “PERFORM”.
Exemplo:
ou
CALCULAR.
.............
..............
CALCULAR-FIM.
____________________________________________________________________________________________
Versão 1 61
Cobol
Formato:
ou
Exemplo:
PERFORM ROT-A THRU FIM-ROT-A
UNTIL WS-NUM IS NEGATIVE.
ROT-A.
.................
SUBTRACT 1 FROM WS-NUM.
FIM-ROT-A.
EXIT.
____________________________________________________________________________________________
Versão 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 (CONDIÇÃO-1)
Exemplo:
....................
WORKING-STORAGE SECTION.
....................
01 INDICE PIC 9(02) VALUE ZEROS.
1 TABELA.
02 VENDAS-PROD OCCURS 4 TIMES.
03 VALOR PIC 9(05).
.............
.............
PROCEDURE DIVISION.
.................
PERFORM ZERA-TAB
VARYING INDICE
FROM 1 BY 1
UNTIL INDICE GREATER 4.
____________________________________________________________________________________________
Versão 1 63
Cobol
ZERA-TAB.
MOVE ZEROS TO VALOR(INDICE).
ZERA-FIM.
EXIT.
7.18CLÁUSULA EXIT
É um ponto comum de finalização para uma série de procedimento(s).
NOME-PARAGRAFO. EXIT.
A cláusula “EXIT” deve ser precedida por um nome de parágrafo e deve ser
única cláusula do parágrafo.
Exemplo:
INICIO.
PERFORM A-1 THRU A-99.
FIM-INICIO.
EXIT.
A-1.
.........
A-99.
EXIT.
Esta cláusula deve ser apenas para itens elementares numéricos ou numéricos
de edição.
Exemplo:
____________________________________________________________________________________________
Versão 1 64
Cobol
1 LINHA.
2 VALOR PIC 9(05) BLANK WHEN ZERO.
Quando o campo for movido para VALOR e todo o conteúdo dele for zero,
então será substituídos os caracteres iguais a zero, por espaços.
Formato:
(SYNCHRONIZED) (LEFT)
(SYNC) (RIGHT)
1 REGISTRO.
2 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.
____________________________________________________________________________________________
Versão 1 65
Cobol
Exemplo:
1 REGISTRO.
2 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 A B
SUBTRACT 5 FROM B.
7.21OPERADORES LÓGICOS
____________________________________________________________________________________________
Versão 1 66
Cobol
verdadeiros, o resultado
será verdadeiro.
Exemplo:
____________________________________________________________________________________________
Versão 1 67
Cobol
MOVE CAMPO TO SAI-CAMPO.
Exemplos:
ou
1 CAMPO-DATA.
2 ANO PIC 9(02).
02 MÊS PIC 9(02).
02 DIA PIC 9(02).
.................
____________________________________________________________________________________________
Versão 1 68
Cobol
____________________________________________________________________________________________
Versão 1 69
Cobol
____________________________________________________________________________________________
Versão 1 70
Cobol
FILE-CONTROL.
SELECT CADASTRO ASSIGN TO DA-I-DDCADAST
ACCESS MODE IS RANDOM
RECORD KEY IS CAD-CHAVE
NOMINAL KEY IS W-CHAVE.
____________________________________________________________________________________________
Versão 1 71
Cobol
FD CADASTRO
LABEL STANDARD
RECORDING F
RECORD 130
BLOCK 10 RECORDS.
1 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.
FILE-CONTROL.
SELECT CADASTRO ASSIGN TO DA-I-DDCADAST
ACCESS MODE IS SEQUENTIAL
RECORD KEY IS CAD-CHAVE.
........
..............
FD CADASTRO
LABEL STANDARD
RECORDING F
RECORD 130
BLOCK 10 RECORDS.
____________________________________________________________________________________________
Versão 1 72
Cobol
01 REG-CADASTRO.
03 CAD-CHAVE PIC 9(06).
03 CAD-NOME PIC X(40).
..................
..............
READ CADASTRO
AT END
GO TO FIM-PROCESSAMENTO.
.....................
..................
8.1.1 I-O
Formato no OPEN:
No OPEN, a opção “I-O” (input-output) deve ser declarada para arquivos que
possuem organização “DIRETA”, e quanto utilizada a cláusula “REWRITE”. Caso
contrário, abrir somente com a opção “INPUT” para leitura ou “OUTPUT” para
gravação.
Formato no READ:
____________________________________________________________________________________________
Versão 1 73
Cobol
Exemplo:
READ CADASTRO.
Formato no WRITE:
Formato:
____________________________________________________________________________________________
Versão 1 74
Cobol
Exemplo:
REWRITE REG-CADASTRO.
Formato:
OU
____________________________________________________________________________________________
Versão 1 75
Cobol
START (NOME-DO-ARQUIVO)
INVALID KEY (SENTENÇA IMPERATIVA)
Nota-se que o START, só posiciona e não 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
RECORDING F
BLOCK 20 RECORDS.
01 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-NÃO-ACHADO.
____________________________________________________________________________________________
Versão 1 76
Cobol
LEITURA.
READ CADSEQUE
AT END
GO TO FIM-PROCESSA.
......
GO TO LEITURA.
FIM-PROCESSA.
____________________________________________________________________________________________
Versão 1 77
Cobol
9. TABELAS
As tabelas devem ser construídas na ‘”DATA DIVISION”.
OCCURS X TIMES
OCCURS X TO XX DEPENDING ON (CAMPO).
- TABELA SUBSCRITA;
- TABELA INDEXADA.
____________________________________________________________________________________________
Versão 1 78
Cobol
- DIRECIONAL;
- BIDIMENSIONAL;
- TRIDIMENSIONAL.
1 TABELA-DE-MESES.
2 TAB-MESES.
3 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.
____________________________________________________________________________________________
Versão 1 79
Cobol
03 MESES PIC X(09).
1 DATA-DIA.
2 DIA PIC 9(02).
02 FILLER PIC X(01).
02 MES PIC 9(02).
02 FILLER PIC X(01).
02 ANO PIC 9(04).
1 CABEC.
03 FILLER PIC X(28) VALUE
‘RELATORIO EMITIDO EM: ‘.
03 NOME-MÊS PIC X(09).
..................
PROCEDURE DIVISION.
....................
DISPLAY ‘TECLE DATA – FORMATO DD/MM/AAAA’ UPON CONSOLE.
ACCEPT DATA-DIA FROM CONSOLE.
MOVE MESES (MÊS) TO NOME-MÊS.
Exemplo 2:
WORKING-STORAGE SECTION.
.............
77 IND PIC 9(02) COMP VALUE 0 SYNC.
.............
1 LINHA-DETALHE.
2 FILLER PIC X(20)
VALUE ‘TOTAL DO ESTADO DE ‘.
02 ESTADO PIC X(15).
.............
.............
1 TABELA-ESTADO.
2 TAB.
3 FILLER PIC X(17) VALUE ‘SPSAO PAULO’.
____________________________________________________________________________________________
Versão 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 1 TO IND.
LOOP-INICIO.
IF SIGLA(IND) EQUAL ESTADO-FITA
GO TO MOVE-ESTADO
ELSE
ADD 1 TO IND
IF IND = 24
GO TO ROT-ERRO
ELSE
GO TO LOOP-INICIO.
MOVE-ESTADO.
MOVE DESCRICAO(IND) TO ESTADO.
..........
____________________________________________________________________________________________
Versão 1 81
Cobol
9.3 CLÁUSULA SET
Esta cláusula estabelece pontos de referência na pesquisa de tabelas,
colocando determinados valores nos indexadores associados com os elementos das
tabelas.
Formato 1:
SET (INDEX NAME) TO (NUM-INTEIRO)
(IDENTIFICADOR) (IDENTIFICADOR)
(INDEX NAME)
Formato 2:
SET (INDEXADOR-A) (INDEXADOR-B)
UP BY (IDENT-1)
ou
DOWN BY (LIT-2)
Exemplos:
____________________________________________________________________________________________
Versão 1 82
Cobol
SET INDEX-8 DOWN BY 1.
Formato 1:
Formato 2:
____________________________________________________________________________________________
Versão 1 83
Cobol
Se nas opções AT END e WHEN não existir nas sentenças imperativas nenhum
desvio (GO TO ou PERFORM), o controle de execução passará para a próxima
sentença após a execução so SEARCH.
Exemplo 1:
WORKING-STORAGE SECTION.
1 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’.
____________________________________________________________________________________________
Versão 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’.
03 TAB-NOM REDEFINES TABELA-NOMES
OCCURS 14 INDEXED BY IND.
05 NOME PIC X(11).
SET IND TO 1.
SEARCH TAB-NOM
AT END
GO TO DAR-DISPL
WHEN
NOME (IND) EQUAL AUX-NOME
PERFORM ROT-ACHOU-NOME.
ROT-ACHOU-NOME.
.....................
DATA DIVISION.
.........
FD CADENTRA
____________________________________________________________________________________________
Versão 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 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’.
03 FILLER REDEFINES TAB-MSG.
05 TAB-2 OCCURS 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.
____________________________________________________________________________________________
Versão 1 86
Cobol
____________________________________________________________________________________________
Versão 1 87
Cobol
1 - Descrição de dados:
Para cada arquivo a ser classificado, deve existir uma descrição do arquivo
de classificação na “FILE SECTION”.
Exemplo:
SD TRABALHO
DATA RECORD IS TRAB.
1 TRAB.
2 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 necessário na “PROCEDURE DIVISION”.
Exemplo:
____________________________________________________________________________________________
Versão 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 saída:
É usado para tratamento dos registros classificados. Serve para colocá-los
em vários de arquivos de saída.
Exemplo:
____________________________________________________________________________________________
Versão 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):
- não pode dar OPEN, CLOSE, READ e WRITE;
- deve ter um SELECT;
10.2CLÁUSULA RELEASE
Release é um verbo de liberação.
____________________________________________________________________________________________
Versão 1 90
Cobol
Formato:
RELEASE (NOME-DO-REGISTRO)
ou
10.3CLÁUSULA RETURN
Return é um verbo de retorno.
Formato:
RETURN (NOME-DO-ARQ-CLASSIF) INTO (AREA)
AT END
(COMANDO IMPERATIVO).
10.4CLÁUSULA SORT
A função do comando SORT é determinar o arquivo a ser classificado, os
campos de classificação, sua ordem (ascendente e/ou descendente) e se devem ser
executados procedimentos de “ entrada” e/ou “saída”.
Formato:
SORT (NOME-ARQ-CLASSIF) ASCENDING KEY / DESCENDING KEY
(NOME-CAMPO-1...)
USING (NOME-ARQUIVO-1)
INPUT PROCEDURE (NOME-SECAO-1)
GIVING (NOME-ARQUIVO-2)
____________________________________________________________________________________________
Versão 1 91
Cobol
OUTPUT PROCEDURE (NOME-SECAO-2)
1- (NOME-ARQ-CLASSIF) -> é parâmetro obrigatório e deve ser definido na “SD”;
3 - (NOME-CAMPO-1) -> são os nomes dos campos para classificação. Pode-se ter
até doze (12) campos e pode figurar em qualquer parte do registro. O tamanho total
de todos os campos de classificação não pode exceder 256 bytes;
IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
SELECT ARQENT ASSIGN TO UT-S-ARQENT.
SELECT ARQSORT ASSIGN TO UT-S-ARQSORT.
........
____________________________________________________________________________________________
Versão 1 92
Cobol
DATA DIVISION.
SD ARQSORT.
1 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 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.
STOP RUN.
CLASSIFICA SECTION.
READ ARQENT AT END
____________________________________________________________________________________________
Versão 1 93
Cobol
CLOSE ARQENT
GO TO FIM-CLASSIFICA.
RELEASE SRT-REGISTRO
GO TO CLASSIFICA.
FIM-CLASSIFICA.
EXIT.
CLASSIFICADO SECTION.
RETURN ARQSORT AT END
GO TO FIM-CLASSIFICADO.
..........
FIM-CLASSIFICADO.
EXIT.
IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
SELECT ARQENT ASSIGN TO UT-S-ARQENT.
SELECT ARQSORT ASSIGN TO UT-S-ARQSORT.
........
DATA DIVISION.
SD ARQSORT.
1 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
____________________________________________________________________________________________
Versão 1 94
Cobol
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 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 ASCENDING KEY SRT-TIPO
DESCENDING KEY SRT-CODIGO
USING ARQENT
OUTPUT PROCEDURE CLASSIFICADO.
STOP RUN.
..............
CLASSIFICADO SECTION.
RETURN ARQSORT AT END
GO TO FIM-CLASSIFICADO.
..........
.........
FIM-CLASSIFICADO.
EXIT.
____________________________________________________________________________________________
Versão 1 95
Cobol
- É obrigatório o arquivo utilizado na opção USING ter o
mesmo tamanho do arquivo do SORT;
- Arquivos de tamanhos variáveis não devem ser sorteados
com a opção USING, mas sim pela “INPUT
PROCEDURE”.
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.
1 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 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).
____________________________________________________________________________________________
Versão 1 96
Cobol
03 ENT-NOME PIC X(30).
FD 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.
____________________________________________________________________________________________
Versão 1 97
Cobol
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.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 ENT-REGISTRO.
03 ENT-REG PIC X(36).
FD ARQSAI
LABEL STANDARD
RECORDING F
BLOCK 0.
____________________________________________________________________________________________
Versão 1 98
Cobol
01 SAI-REGISTRO.
03 FILLER PIC X(36).
..........
PROCEDURE DIVISION.
.....................
PRINCIPAL SECTION.
STOP RUN.
*****************************
//SORTLIB DD DSN=SYS1.SORTILIB,DISP=SHR
//SORTWK01 DD UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)
//SORTWK02 DD UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)
//’’’’’’03’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’04’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
____________________________________________________________________________________________
Versão 1 99
Cobol
//’’’’’’05’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’06’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
____________________________________________________________________________________________
Versão 1 100
Cobol
Formato:
____________________________________________________________________________________________
Versão 1 101
Cobol
REPLACING -> substitui um determinado caracter num item por outro determinado
caracter.
TALLYING -> conta o número de vezes que um determinado caracter figura num item
(sendo possível substituir este caracter por um outro determinado caracter).
2- A opção TALLYING gera um número inteiro cujo valor é armazenado num item
binário denominado “TALLY”. Este número representa o seguinte:
- quantas vezes ocorre a LITERAL-3 com o uso da opção “ALL”;
- quantas vezes ocorre a LITERAL-3, antes de encontrar um campo diferente
da LITERAL-3, com o uso da opção “LEADING”;
____________________________________________________________________________________________
Versão 1 102
Cobol
- número de caracteres diferentes da LITERAL-3 até o primeiro caracter igual
a LITERAL-3 ser encontrado, com o uso da opção “UNTIL FIRST”.
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
CAMPO-B depois = 00 05 72
- 4)
EXAMINE CAMPO-A REPLACING FIRST 7 BY ZERO.
____________________________________________________________________________________________
Versão 1 103
Cobol
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
TALLY depois = 00 03
11.2CLÁUSULA TRANSFORM
____________________________________________________________________________________________
Versão 1 104
Cobol
Formato:
____________________________________________________________________________________________
Versão 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 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.3CLÁUSULA EXHIBIT
Formato:
____________________________________________________________________________________________
Versão 1 106
Cobol
- NAMED -> imprime / mostra o conteúdo do campo todas as vezes que passar pelo
EXHIBIT;
Exemplos:
____________________________________________________________________________________________
Versão 1 107
Cobol
Formato:
READY TRACE.
RESET TRACE.
READY TRACE
Imprime / mostra a sequência de parágrafos ou SECTION’s, pelo qual o
programa está passando.
RESET TRACE
Encerra a operação do “READY TRACE”.
Exemplo:
PROCEDURE DIVISION.
A0.
READY TRACE.
.........
A1.
.........
...........
A5.
...........
A99.
EXIT.
11.5CLÁUSULA STRING
Formato:
____________________________________________________________________________________________
Versão 1 108
Cobol
Na cláusula STRING, os caracteres são 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 posições mais a esquerda do campo receptor (IDENT-7). Depois o
campo emissor completo ao qual foi dado o próximo nome (IDENT-2) é movido,
imediatamente, para a direita das posições preenchidas do campo receptor.
Este processo continua até que todos os campos emissores tenham sido
transferidos ou que os campos estejam cheios.
FD ARQENTRA
.........
.........
01 REG-ENTRA.
____________________________________________________________________________________________
Versão 1 109
Cobol
03 DATA-HOJE.
05 DIA-HOJE PIC 99.
05 MES-HOJE PIC 99.
05 ANO-HOJE PIC 99.
...............................
WORKING-STORAGE SECTION.
................
1 LIN-IMPRIME.
03 FILLER PIC X(20) VALUE SPACES.
03 LIN-DATA.
05 LIN-DIA PIC 9(02)B.
05 LIN-DATA-EXT PIC X(40).
.............
1 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*’.
03 FILLER PIC X(20) VALUE ‘DE NOVEMBRO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE DEZEMBRO DE 19*’.
01 FILLER REDEFINES TABELA-MESEXT.
03 MÊS-EXT PIC X(20) OCCURS 12 TIMES.
PROCEDURE DIVISION.
.............
____________________________________________________________________________________________
Versão 1 110
Cobol
MOVE DIA-HOJE TO LIN-DIA
DATA-HOJE = 150897
LIN-DATA-EXT = 15 DE AGOSTO DE 1997
ou
DATA-HOJE = 010497
LIN-DATA-EXT = 01 DE ABRIL DE 1997
11.6CLÁUSULA UNSTRING
Formato:
____________________________________________________________________________________________
Versão 1 111
Cobol
11.7RETURN-CODE
É uma área que contém um código de retorno qualquer para que este seja
checado pelo STEP posterior ao executado, através do cond do JCL.
Exemplo:
IDENTIFICATION DIVISION.
..........
ENVIRONMENT DIVISION.
.........
DATA DIVISION.
.........
PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.
IF TIPO EQUAL 1
MOVE +010 TO RETURN-CODE
____________________________________________________________________________________________
Versão 1 112
Cobol
CLOSE ARQTESTE
STOP RUN.
11.8ABENDAR PROGRAMA
Para abendar um programa da maneira que vamos definir neste subcapítulo,
deve-se definir um campo na WORKING-STORAGE SECTION com 4 bytes binários
com qualquer valor, que não ultrapasse a 4095.
Exemplo:
WORKING-STORAGE SECTION.
77 WRK-ABEND PIC S9(04) VALUE +1234 COMP.
PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.
IF TIPO-TESTE EQUAL 3
DISPLAY ‘ERRO REGISTRO DE ENTRADA ARQTESTE’
DISPLAY ‘0 PROGRAMA AFGT0904 SERÁ CANCELADO’
CALL ‘ILBOABN0’ USING WRK-ABEND.
____________________________________________________________________________________________
Versão 1 113
Cobol
11.9FILE STATUS
O FILE STATUS permite ao usuário monitorar a execução de operações de
entrada e saída (I/O) requisitadas para os arquivos de um programa.
Após cada operação de I/O, o sistema move um valor para a STATUS KEY
(campo alfanumérico, com 2 caracteres definidos na WORKING-STORAGE
SECTION e especificado na ENVIRONMENT DIVISION, através do SELECT) que
acusa o sucesso ou o insucesso da operação.
Qualquer valor movido para a STATUS KEY diferente de zeros, revela que a
execução não foi bem sucedida.
Exemplo:
IDENTIFICATION DIVISION.
.............
ENVIRONMENT DIVISION.
............
SELECT ARQ-IN ASSING TO UT-S-ENTRADA
FILE STATUS IS WS-ARQ-IN.
____________________________________________________________________________________________
Versão 1 114
Cobol
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.
PROCESSA SECTION.
READ ARQ-IN.
____________________________________________________________________________________________
Versão 1 115
Cobol
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 ‘00’
MOVE ‘WRITE’ TO 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.
____________________________________________________________________________________________
Versão 1 116
Cobol
11.9.1 Alguns insucessos em operações de I/O
1) FILE STATUS = 90
DD STATEMENT MISSING (PARA ARQUIVO)
2) FILE STATUS = 92
READ APOS AT END
____________________________________________________________________________________________
Versão 1 117
Cobol
____________________________________________________________________________________________
Versão 1 118
Cobol
12. Exercícios
12.1Programa 1
CADAS MOVI
TRO MENT
O
EXERC001
PARM
DD/MM/AAAA
CAD
RELINCL
ATU
____________________________________________________________________________________________
Versão 1 119
Cobol
Relatório RELINCL:
12.1.4 Procedimentos:
____________________________________________________________________________________________
Versão 1 120
Cobol
____________________________________________________________________________________________
Versão 1 121