COBOL

Participante : ___________________________________
Treinamento: ___________________________________
Período

: ___________________________________

Sala

: ____________Horário: _______________ Instrutores

:____________________________________
____________________________________

____________________________________________________________________________________________
Versão 1

1

Cobol

1. LEGENDA DOS COMPONENTES ORIENTATIVOS............................6
2. INTRODUÇÃO.......................................................................................7
2.1 Sistema Operacional..............................................................................................................................7
2.2 Programas..............................................................................................................................................7
2.3 COMPILAÇÃO.....................................................................................................................................8

3. O QUE É COBOL?.................................................................................8
3.1 Como editar um programa...................................................................................................................9
3.2 Comentários num programa................................................................................................................9
3.3 Palavras ...............................................................................................................................................10
3.3.1 Constante figurativa.......................................................................................................................10
3.3.2 Palavras opcionais.........................................................................................................................11
3.3.3 Palavras-chave...............................................................................................................................11
3.4 Caracteres............................................................................................................................................11
3.5 Estrutura da linguagem......................................................................................................................11
3.5.1 Divisões ........................................................................................................................................12
3.5.2 Seções............................................................................................................................................12
3.5.3 Parágrafos......................................................................................................................................12
3.5.4 Sentenças.......................................................................................................................................12
3.5.5 Programa Cobol.............................................................................................................................13

4. IDENTIFICATION DIVISION................................................................15
5. ENVIRONMENT DIVISION..................................................................17
5.1 CONFIGURATION SECTION.........................................................................................................18
5.1.1 SPECIAL-NAMES........................................................................................................................18
5.2 INPUT-OUTPUT SECTION..............................................................................................................19
5.2.1 FILE-CONTROL...........................................................................................................................19
5.2.2 I-O-CONTROL.............................................................................................................................20

6. DATA DIVISION...................................................................................21
6.1 FILE SECTION...................................................................................................................................22
6.1.1 Níveis especias (2 tipos)................................................................................................................23
6.1.2 FILE DESCRIPTION (FD)...........................................................................................................24
6.1.3 CLÁUSULA PICTURE (PIC)......................................................................................................26
6.1.4 CLÁUSULA FILLER...................................................................................................................28
6.1.5 CLÁUSULA VALUE...................................................................................................................28
____________________________________________________________________________________________
Versão 1

2

Cobol
6.2 WORKING-STORAGE SECTION..................................................................................................29
6.2.1 OPÇÃO COMPUTATIONAL (COMP).......................................................................................29
6.2.2 CLÁUSULA JUSTIFIED..............................................................................................................30
6.2.3 CLÁUSULA REDEFINES...........................................................................................................30
6.2.4 CONSTANTES FIGURATIVAS..................................................................................................31
6.3 LINKAGE SECTION.........................................................................................................................31

7. PROCEDURE DIVISION.....................................................................34
7.1 CLÁUSULA OPEN.............................................................................................................................35
7.2 CLÁUSULA READ.............................................................................................................................35
7.3 CLÁUSULA WRITE..........................................................................................................................36
7.3.1 OPÇÃO ADVANCING................................................................................................................37
7.3.2 OPÇÃO AFTER POSITIONING..................................................................................................37
7.4 CLÁUSULA CLOSE..........................................................................................................................39
7.5 CLÁUSULA STOP RUN....................................................................................................................39
7.6 CLÁUSULA GOBACK......................................................................................................................39
7.7 CLÁUSULA GO TO...........................................................................................................................40
7.8 CLÁUSULA MOVE............................................................................................................................40
7.8.1 CLÁUSULA OF no COMANDO MOVE....................................................................................41
7.9 CLÁUSULA ADD...............................................................................................................................43
7.9.1 OPÇÃO ROUNDED.....................................................................................................................45
7.9.2 OPÇÃO ON SIZE ERROR...........................................................................................................46
7.10 CLÁUSULA SUBTRACT ...............................................................................................................46
7.11 CLÁUSULA MULTIPLY (multiplicação)......................................................................................48
7.12 CLÁUSULA DIVIDE (divisão)........................................................................................................49
7.12.1 OPÇÃO REMAINDER...............................................................................................................51
7.13 CLÁUSULA COMPUTE..................................................................................................................51
7.14 CLÁUSULA DISPLAY....................................................................................................................52
7.15 CLÁUSULA ACCEPT......................................................................................................................53
7.16 CLÁUSULA IF..................................................................................................................................55
7.16.1 TESTE DE CONDIÇÃO DE CLASSE.......................................................................................57
____________________________________________________________________________________________
Versão 1

3

Cobol
7.16.2 TESTE DE NOME-DE-CONDIÇÃO.........................................................................................57
7.16.3 TESTE DE CONDIÇÃO DE RELAÇÃO...................................................................................58
7.16.4 TESTE DE CONDIÇÃO DE SINAL..........................................................................................59
7.17 CLÁUSULA PERFORM..................................................................................................................60
7.17.1 PERFORM - TIMES...................................................................................................................62
7.17.2 PERFORM – UNTIL...................................................................................................................64
7.17.3 PERFORM – VARYING............................................................................................................65
7.18 CLÁUSULA EXIT............................................................................................................................66
7.19 CLÁUSULA (BLANK WHEN ZERO)...........................................................................................66
7.20 CLÁUSULA (SYNCHRONIZED – SYNC)....................................................................................67
7.21 OPERADORES LÓGICOS..............................................................................................................68
7.21.1 TESTES COMPOSTOS..............................................................................................................69
7.22 DATA E HORA DO SISTEMA.......................................................................................................70

8. ARQUIVOS DE ACESSO DIRETO......................................................73
8.1 UTILIZANDO ACESSO DIRETO – LEITURA SEQUENCIAL..................................................74
8.1.1 I-O..................................................................................................................................................75
8.1.2 CLÁUSULA REWRITE...............................................................................................................76
8.1.3 CLÁUSULA START....................................................................................................................77

9. TABELAS.............................................................................................80
9.1 CLÁUSULA OCCURS.......................................................................................................................80
9.2 TABELA SUBSCRITA ......................................................................................................................81
9.3 CLÁUSULA SET................................................................................................................................84
9.4 CLÁUSULA SEARCH.......................................................................................................................85
9.5 TABELA INDEXADA .......................................................................................................................86

10. CLASSIFICAÇÃO DE DADOS...........................................................90
10.1 CLÁUSULA SELECT (SORT)........................................................................................................91
10.2 CLÁUSULA RELEASE...................................................................................................................92
10.3 CLÁUSULA RETURN.....................................................................................................................93
10.4 CLÁUSULA SORT...........................................................................................................................93
10.4.1 INPUT PROCEDURE e OUTPUT PROCEDURE....................................................................94
____________________________________________________________________________________________
Versão 1

4

Cobol
10.4.2 USING e OUTPUT PROCEDURE ............................................................................................96
10.4.3 INPUT PROCEDURE e GIVING...............................................................................................98
10.4.4 USING e GIVING.....................................................................................................................100

11. OUTRAS CLÁUSULAS ...................................................................103
11.1 CLÁUSULA EXAMINE / INSPECT - REPLACING.................................................................103
11.1.1 Regras para EXAMINE.............................................................................................................104
11.1.2 Exemplos de EXAMINE...........................................................................................................105
11.2 CLÁUSULA TRANSFORM..........................................................................................................106
11.2.1 Regras para o TRANSFORM....................................................................................................107
11.2.2 Exempos de TRANSFORM......................................................................................................107
11.3 CLÁUSULA EXHIBIT...................................................................................................................108
11.4 CLÁUSULA READY/RESET (TRACE)......................................................................................109
11.5 CLÁUSULA STRING.....................................................................................................................110
11.5.1 Regras para STRING.................................................................................................................111
11.5.2 Exemplos de STRING...............................................................................................................111
11.6 CLÁUSULA UNSTRING...............................................................................................................113
11.6.1 Regras para UNSTRING...........................................................................................................114
11.7 RETURN-CODE.............................................................................................................................114
11.8 ABENDAR PROGRAMA ............................................................................................................115
11.9 FILE STATUS.................................................................................................................................116
11.9.1 Alguns insucessos em operações de I/O....................................................................................119

12. EXERCÍCIOS...................................................................................121
12.1 Programa 1.......................................................................................................................................121
12.1.1 Nome do programa ...................................................................................................................121
12.1.2 Arquivos utilizados neste programa:.........................................................................................121
12.1.1 Layout dos arquivos...................................................................................................................122
12.1.2 Procedimentos:..........................................................................................................................122

____________________________________________________________________________________________
Versão 1

5

Cobol

1.

Legenda dos Componentes Orientativos.

DICA

LEIA

TOME NOTA

ATENÇÃO

CURIOSIDADE

____________________________________________________________________________________________
Versão 1

6

Cobol

2.

Introdução

Este manual de Cobol oferece informações e conceitos
essenciais para o desenvolvimento de programas na linguagem
Cobol.

2.1 Sistema Operacional
-

programas de controle;

-

supervisão de sistema;

-

supervisão dos arquivos;

-

supervisão dos job´s.

2.2 Programas
-

tradutores de linguagem (metaprogramas);

-

programas de serviço (utilitários);

-

programas de aplicação.

____________________________________________________________________________________________
Versão 1

7

Cobol

2.3 COMPILAÇÃO

-> programa fonte feito pelo programador

-> rotina do sistema operacional (tradutor)

-> módulo objeto

-> rotina do sistema operacional (LINKAGE-EDITOR)

-> módulo de carga

-> execução do programa

3.

O que é Cobol?

____________________________________________________________________________________________
Versão 1

8

Cobol
COBOL significa Common Business Oriented Language, isto é, Linguagem
Comum Orientada para o Comércio.
O Cobol é um subconjunto de palavras da língua inglesa, isto é, um
número limitado de palavras inglesas sujeitas a uma sintaxe própria. É uma
linguagem que lida com problemas comerciais, envolvendo os arquivos de
dados de apreciáveis proporções.

3.1 Como editar um programa
É necessário usar uma estrutura definida da maneira de escrever.
O compilador Cobol possui características posicionais, isto é,
necessitamos da ordenação de palavras, divisões e seções, usando a seguinte
estrutura:
Coluna de 1 a 6
Essas colunas são usadas para numerar as linhas de um programa. A
numeração é uma ordem crescente. Opcionalmente podem deixar de serem
preenchidas ou incluir outros caracteres.
Coluna 7
É usada para um hífen (-), que significa a continuação de não numéricos,
asterisco (*), usado para a inclusão de comentários e a barra (/) para o salto de
página.
Coluna de 8 a 72
São usadas para as entradas (palavras ou literais) do programa. Estas
colunas estão agrupadas em duas margens ‘A’ (coluna 8 a 11) e margem ‘B’
(coluna 12 a 72).
As entradas da margem ‘A’ são:
títulos das divisões, seções e dos parágrafos;
descrição dos arquivos;
títulos especiais na Procedure Division;
os números de nível, como o ‘77’.

-

As entradas da margem ‘B’ são:
espaços entre as margens (com o objetivo de comunicação visual);
continuação das entradas.

-

3.2 Comentários num programa
O comentário não é considerado pelo compilador, servindo somente para
documentação.
____________________________________________________________________________________________
Versão 1

9

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.

Um programa deve sempre ter o máximo de informações
que auxiliem a compreensão do mesmo, portanto, é aconselhável
utilizar os recursos de comentários.

Para auxiliar na estética da listagem do programa, podemos usar a instrução
‘SKIP’ e ‘EJECT’ para pular linhas e folhas.
Digita-se na coluna 12:
EJECT  pula 1 folha
SKIP1  pula 1 linha
SKIP2  pula 2 linhas
SKIP3  pula 3 linhas

3.3 Palavras
Em comprimento, uma palavra 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.
Há palavras que são reservadas do Cobol, com propósitos próprios.

3.3.1

Constante figurativa
É uma palavra associada a um valor particular.
Exemplos:

____________________________________________________________________________________________
Versão 1

10

Cobol
ZEROS, ZERO, ZEROES

 valor zero

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

Palavras opcionais
Seu uso é opcional:
Exemplo:
IF

CPO-A

é igual a

IF

CPO-A

logo

IS e THAN são opcionais.

3.3.3

IS

GREATER

THAN

GREATER

10
10

Palavras-chave
Determinar a função da cláusula ou comando
Exemplo: ADD, READ, WRITE, IF
Verbos : seu uso está contido na Procedure Division, comparado aos verbos
de gramática, já que levam a algum tipo de ação (exceto IF).

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.

3.5 Estrutura da linguagem
A linguagem Cobol é estruturada em:
-

Divisões;

____________________________________________________________________________________________
Versão 1

11

Cobol
-

Seções;

-

Parágrafos;

-

Sentenças;

-

Cláusulas (nas três primeiras divisões);

-

Comandos (na Procedure Division).

3.5.1

Divisões

As divisões do Cobol para a estruturação do programa e suas funções são
quatro:
-

Divisão de identificação (IDENTIFICATION DIVISION);

-

Divisão de equipamento (ENVIRONMENT DIVISION);

-

Divisão de dados (DATA DIVISION);

-

Divisão de procedimentos (PROCEDURE DIVISION).

3.5.2

Seções
Podemos identificar dois tipos de seções:
definidos na ENVIRONMENT DIVISION e DATA DIVISION conforme
requeridos.

-

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
As sentenças são formadas por uma ou mais cláusulas ou comandos, e

terminado por um ponto.

____________________________________________________________________________________________
Versão 1

12

Cobol

3.5.5

Programa Cobol
divisões
seções
parágrafos
sentenças
comandos

cláusulas

____________________________________________________________________________________________
Versão 1

13

Cobol

____________________________________________________________________________________________
Versão 1

14

Cobol

4.

IDENTIFICATION DIVISION

____________________________________________________________________________________________
Versão 1

15

Cobol

Identifica o programa fonte (informação obrigatória), e
outras informações como autor, instalação, etc.

É a primeira das 4 divisões.
É utilizada para identificar o programa.
Os dados introduzidos pela ‘IDENTIFICATION DIVISION’ são tratados pelo
compilador Cobol como comentários, não sendo traduzidos em linguagem de
máquina. Formato opcional:
IDENTIFICATION DIVISION.
PROGRAM-ID. (nome do programa)
AIUTHOR. (nome do programador)
INSTALLATION. (local de uso ou geração do programa)
DATE-WRITTEN. (data em que foi escrito o programa)
DATE-COMPILED. (data em que foi compilado o programa)
REMARKS. (comentários sobre o programa. Utilizado o REMARKS em
programas desenvolvidos em Cobol ANS, isto é, Cobol I).
Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
000001
000002
000003
000004
000005
000006
000007
000008
000009
000010

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

Obs: a opção DATE-COMPILED não deve ser preenchida, pois é o sistema
operacional que fará isso.

____________________________________________________________________________________________
Versão 1

16

Cobol

5.

ENVIRONMENT DIVISION

____________________________________________________________________________________________
Versão 1

17

Cobol

É a definição do ambiente físico.
Especifica o equipamento usado para compilação e
execução do programa, além de associar os arquivos do programa
aos diversos periféricos, técnicos especiais de entrada/saída.

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

5.1 CONFIGURATION SECTION
Esta seção é utilizada para fornecer informações sobre o computador.
É dividida em 3 parágrafos:
-

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.
____________________________________________________________________________________________
Versão 1

18

Cobol
DECIMAL-POINT IS COMMA
C01

IS

CANAL-1.

O ‘DECIMAL-POINT IS COMMA’ define que o ponto decimal dever ser a vírgula.
O canal de controle da impressão (CANAL-1) está no intervalo C01 a C12.

5.2 INPUT-OUTPUT SECTION
Define arquivos utilizados pelo programa efetuando ligações com o
equipamento da máquina.

Está dividida em 2 parágrafos:
-

FILE-CONTROL.

-

I-O-CONTROL.

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

O Select tem a função de designar um arquivo para um dispositivo de
entrada/saída. É necessário um “Select” para cada arquivo.
Exemplo:
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT (nome-arquivo) ASSIGN TO(classe-organização-nome).

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

____________________________________________________________________________________________
Versão 1

19

Cobol
pelo qual o arquivo será reconhecido na “DATA DIVISION”

e

“PROCEDURE DIVISION”.
Classe -> especifica o tipo de dispositivo:
DA = acesso direto (discos magnéticos)
UT = utility (fitas e discos magnéticos)
UR = registros unitários (leitoras, impressoras)
UP = registro unitário (perfuradoras).
Organização -> indica a organização 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 organização indexada
Nome -> é o nome pelo qual o arquivo será reconhecido pelo
cartão “DD” do “JCL”. Não deve ter mais que 8 caracteres, e nem
começar com caracter numérico.

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

20

Cobol

6.

DATA DIVISION

____________________________________________________________________________________________
Versão 1

21

Cobol

Define a estrutura lógica dos arquivos e das áreas de
trabalho. Descreve os dados que o programa aceitará como
entrada e os que serão produzidos como saída.

A DATA DIVISION tem a função de descrever os arquivos e seus registros.
Assim como qualquer área de traballho necessária ao programa.
Essa divisão possui 5 seções que devem aparecer na ordem especificada.
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).

6.1 FILE SECTION
Descreve o conteúdo e a organização dos arquivos.
O primeiro nível na “FILE SECTION” é por intermédio de uma entrada (FD –
FILE DESCRIPTION).
Cada “FD” descreve o arquivo do Select.
O segundo nível é descrito por uma entrada “01”.

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

O formato dos números e níveis servem para estruturar logicamente o registro.

____________________________________________________________________________________________
Versão 1

22

Cobol
As subdivisões de um registro são “itens elementares” (não possuem
subdivisões) e “itens de grupo”.
Os números de níveis começam em 01 ou 1 e vão até 49. Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
FD CARTOES
XXXXXXXXXXXXXXXXX.
01 RECIBO.
02 IDENTIFICACAO.
03 PREFIXO
03 RESTO
02 NUMERO
02 FILLER

PIC
PIC
PIC
PIC

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

(FD)  indicador
(01), (02), (03)  números de nível
(IDENTIFICACAO), (RECIBO)  itens de grupo
(PREFIXO), (RESTO), (NUMERO), (FILLER)  itens elementares

6.1.1

Níveis especias (2 tipos)
Níveis:
(77)  designa itens da “WORKING-STORAGE SECTION” que não são

subdivisores de outros e por sua vez não são subdivididos. Quando aparecerem
devem ser descritos obrigatoriamente dentro da “WORKING-STORAGE SECTION”.
O item (77) serve para definir acumuladores e áreas auxiliares.
Exemplo:
WORKING-STORAGE SECTION.
77

ACU-LIDOS

PIC 9(05) VALUE 0.

77

AUX-NOME

PIC X(20).

(88) -> especifica condições que devem ser associadas a valores particulares.
Exemplos:
1

WRK-REG.
02

WRK-SEXO
88 FEMI

PIC X(01).
VALUE ‘F’.

____________________________________________________________________________________________
Versão 1

23

Cobol
88 MASC
77

VALUE ‘M’.

WRK-REG

PIC 9(05)

VALUE

ZEROS

COMP-3.

88

MASC

VALUE

0

THRU

10.

88

FEMI

VALUE

15

THRU

30

35

THRU

40.

88

FEMI

VALUE

50.

Os valores definidos no nível “88” devem estar em ordem crescente.

6.1.2

FILE DESCRIPTION (FD)
É a descrição do arquivo.
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).

6.1.2.1

BLOCK CONTAINS

(BLOCK CONTAINS 9999 RECORDS)
Especifica o tamanho do registro físico.
Se for colocado zero (0), assume informações do cartão “DD”.
Se não for colocado “RECORDS”, assume “CHARACTERS”.
6.1.2.2

RECORD CONTAINS

(RECORD CONTAINS 9999 CHARACTERS)
Especifica o tamanho do registro lógico.
Se esta cláusula for colocada, é feita uma conferência pelo compilador,
somando a quantidade de bytes da definição do registro.
6.1.2.3

RECORDING MODE

(RECORDING MODE IS X)
____________________________________________________________________________________________
Versão 1

24

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

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

6.1.2.4

LABEL RECORD

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

STANDARD -> padrão

-

OMITTED -> omitido
Para impressora, leitora de cartões, perfuradoras, usar “OMITTED”, pois não

possuem “LABELS”. Os demais casos usar “STANDARD”.
6.1.2.5

DATA RECORD

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

____________________________________________________________________________________________
Versão 1

25

Cobol
DATA RECORD IS RECIBO.
01 RECIBO.
02 NOME
02 VALOR
02 FILLER

6.1.3

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

CLÁUSULA PICTURE (PIC)

É usada para descrição de informações sobre itens, tais como: tamanho, sinal,
tipo (numérico, alfanumérico ou alfabético).
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

VALUE

‘BCD’.

-

A(3)

ALFANUMÉRICO -> é representado por letras, números e caracteres do
Cobol. O caracter usado é a letra “X”. A representação de dados não pode
exceder a 120 caracteres.
Exemplos:

01

DADO1

PIC XXX

01

DADO2

PIC X(04) VALUE

-

VALUE

‘ANO’.
‘KKKK’.

NUMÉRICO -> usa-se para representação exclusiva de itens numéricos. Os
caracteres usados são: “9”, “V”, “P”, “S”.

“9” = é utilizado para indicar a posição do campo que contém
um dígito de “0” a “9”.
“V” = é usado para mostrar a posição da vírgula decimal. O
ponto decimal, se colocado, não faz parte do item.
“P” = representa um dígito numérico zero (0).
____________________________________________________________________________________________
Versão 1

26

Cobol

“S” = indica a presença de sinal, deve ser colocado antes do
“9”.

-

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), ($), (+), (-)
(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:
01

CAMPO

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

____________________________________________________________________________________________
Versão 1

27

Cobol
Definição

Picture

Valor Real

Na memória

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

OBS: caso tenha que utilizar o caracter ‘, para se fazer
entendido ao Cobol, define-se dentro das aspas duplas.
Exemplo:
77 ASPA PIC X(01) VALUE “ ’ ”.

6.1.4

CLÁUSULA FILLER
É usada para um item elementar ou um item de grupo, e nunca será

refenciado. Pode ser usada na “DATA DIVISION” e suas “SECTIONS”.
Exemplo:
01

REGISTRO.
02

6.1.5

FILLER

PIC X(100).

CLÁUSULA VALUE
É usada para definir um valor inicial para um item da “WORKING-STORAGE

SECTION”. Não pode ser usada na “FILE SECTION”.
Exemplo:

____________________________________________________________________________________________
Versão 1

28

Cobol
1

CABEC.
02

FILLER

PIC X(10)

VALUE

SPACES.

02

FILLER

PIC X(06)

VALUE

‘FOLHAS’.

02

DATA

PIC X(10)

VALUE

SPACES.

6.2 WORKING-STORAGE SECTION

Esta seção descreve informações sobre as áreas de
trabalho, descrição de tabelas, área para DB2, lay-out, etc.

6.2.1

OPÇÃO COMPUTATIONAL (COMP)
Só podem ser usados para itens numéricos (COMP, COMP-1, COMP-2,

COMP-3, COMP-4).
6.2.1.1

COMP ou COMP-4 (binário):
Bytes = 2 se tamanho do campo com COMP for de 1 a 4;
Bytes = 4 se tamanho do campo com COMP for de 5 a 9;
Bytes = 8 se tamanho do campo com COMP for de 10 a 18;

Se quiser valorizar um campo binário este deve estar em formato decimal.
Exemplo:
01 VALOR1

PIC 9(03) COMP.

01 VALOR3

PIC 9(04) COMP VALUE 1234.

(Memória = 04D2)

01 VALOR5 PIC 9(07) COMP VALUE 499701. (Memória = 00079FF5).

6.2.1.2

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

Usados para ponto flutuante interno.
É usado nos registradores = 0,2,4,6.

____________________________________________________________________________________________
Versão 1

29

Cobol
COMP-1 = 4 bytes de precisão simples.
COMP-4 = 8 bytes de precisão dupla.
6.2.1.3

COMP-3 (compactado)

É decimal interno (compactado). Campos até 18 dígitos ou 10 bytes. 1 byte usa
2 dígitos ou 1 dígito mais o sinal.
Exemplos:
01

VALORA

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

01

VALORB

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

6.2.2

CLÁUSULA JUSTIFIED
Posiciona itens alfabéticos ou alfanuméricos a direita no campo receptor.
Quando item emissor maior será truncado a esquerda e quando menor

preenchidos com brancos.
Exemplos:
01

DADOS

PIC X(10)

JUSTIFIED RIGHT.

01

DADOS

PIC X(10)

JUST

MOVE CAMPOX
CAMPOX = JOAO

6.2.3

TO

RIGHT.

DADOS

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

CLÁUSULA REDEFINES
É usada para redescrever uma área.
A redefinição deverá conter a mesma quantidade de bytes do campo ou área

anterior e estar no mesmo nível.

1

REGISTRO.
03
03

ALPINO

PIC X(06).

BETA.
05

LETRA

PIC X(04).

05

NUM

PIC 9(02).

____________________________________________________________________________________________
Versão 1

30

Cobol
03

03

6.2.4

ALFA

REDEFINES

05

AUT

PIC 9(01).

05

LIVRE

PIC X(05).

ZUM

BETA.

PIC X(08).

CONSTANTES FIGURATIVAS
São constantes definidas pelo compilador.

Constantes figurativas

Picture aplicáveis

ZERO

ALFANUMÉRICAS

ZEROS

OU

ZEROES

NUMÉRICAS

SPACE

ALFABÉTICAS

SPACES

OU ALFANUMÉRICAS

HIGH-VALUE (MAIOR VALOR)

ALFANUMÉRICAS

HIGH-VALUES
QUOTE (APÓSTROFE)

ALFANUMÉRICAS

QUOTES
ALL ‘CARACTER ALFANUMÉRICO’

ALFANUMÉRICAS

LOW-VALUE (MENOR VALOR)

ALFANUMÉRICAS

LOW-VALUES

6.3 LINKAGE SECTION
É utilizada para pegar dados pelo “PARM.GO” ou ligar o programa a outros
programas.
-

são válidas as regras referentes as apresentadas na “WORKING-STORAGE
SECTION”;

-

a cláusula VALUE somente pode ser especificada para itens de nível “88”;

____________________________________________________________________________________________
Versão 1

31

Cobol
-

assume-se que para cada item passado tem que ser de nível “01” ou nível
“77” (limite de full-word);

-

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

-

para definição da “LINKAGE SECTION”, quando for pego algum dado pelo
“PARM”, os dois primeiros bytes devem ser definidos como binário, pois
estes bytes conterão o tamanho do “PARM”.

Exemplo:
LINKAGE SECTION.
01 PARAMETROS.
03
03
-

TAMANHO

PIC 9(04) COMP.

DATA-PARM

PIC 9(08).

quando se faz ligação entre programas, o programa chamado, deve conter a
cláusula “LINKAGE SECTION”, e seus referidos campos de definição.
Quanto ao programa chamador, este deve conter os mesmos campos da
“LINKAGE” na “WORKING-STORAGE”, sendo obrigatório os campos a
serem passados, estarem na mesma ordem do programa chamado.

-

No

exemplo

acima,

“PARAMETROS”

após

os
a

dados
cláusula

serão

jogados

“PROCEDURE

do

“PARM”

DIVISION

para

USING

PARAMETROS”.

____________________________________________________________________________________________
Versão 1

32

Cobol

____________________________________________________________________________________________
Versão 1

33

Cobol

7.

PROCEDURE DIVISION

____________________________________________________________________________________________
Versão 1

34

Cobol

Contém comandos executáveis do programa, isto é, os
procedimentos a serem executados.

7.1 CLÁUSULA OPEN
Abre arquivo de entrada e saída. Formato:
OPEN

INPUT (NOME-ARQUIVO-1) (NOME-ARQUIVO-2)
OUTPUT (NOME-ARQUIVO-3)
I-O

(NOME-ARQUIVO-4)

INPUT -> arquivos de leitura
OUTPUT -> arquivos de gravação e impressão
I-O -> arquivos de acesso-direto (leitura e gravação)

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

NOME-DO-ARQUIVO -> definido por uma descrição na “FD”

-

INTO -> faz com que o registro seja lido e movido para área definida dentro
da “WORKING-STORAGE” ou “LINKAGE SECTION”.

-

AT END -> é uma das opções para o controle de fim de arquivo.

____________________________________________________________________________________________
Versão 1

35

Cobol

7.3 CLÁUSULA WRITE
Transfere um registro do programa para um arquivo de saída ou impressora de
relatórios.
Formato:
WRITE (NOME-REGISTRO) FROM (AREA-1)
AFTER/BEFORE ADVANCING (INTEIRO) LINES
- FROM -> faz com que uma área seja movida da “WORKING-STORAGE
SECTION” para o registro, e seja gravado ou impresso.
- ADVANCING -> refere-se ao controle do posicionamento vertical de cada
linha, se 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:
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 nível “01”.
WRITE

SAIDA

FROM

AREA-1.

FILE SECTION.
01 SAIDA.
XXXXXXX
WORKING-STORAGE SECTION.
____________________________________________________________________________________________
Versão 1

36

Cobol
01 AREA-1.
XXXXXXXXXXXX

7.3.1

OPÇÃO ADVANCING
C01 até C09
C10 até C12

Salto do canal 1 até 9
Salto do canal 10, 11 e 12

Se um número inteiro for usado (1 a 100) serão saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
WRITE RELATORIO FROM

CABEC1

WRITE RELATORIO FROM

LIN-DET1

7.3.2

AFTER ADVANCING CANAL-1.
AFTER ADVANCING 2 LINES.

OPÇÃO AFTER POSITIONING
Deve ser declarada como caracter alfanumérico (PICTURE X).
Por exemplo, na impressão do cabeçalho de um relatório:
FD IMPRESSAO
LABEL OMITTED
RECORDING F
BLOCK 0.

1

RELATORIO.
2
02 FILLER

CARRO
PIC

PIC

X(01).

X(132).

WORKING-STORAGE SECTION.
1

CABEC1.
2

FILLER

PIC X(01)

VALUE ‘1’.

____________________________________________________________________________________________
Versão 1

37

Cobol
02 DATA

PIC X(10)

VALUE SPACES.

02 FILLER

PIC X(40)

VALUE SPACES.

02 FILLER

PIC X(30)

VALUE

‘PROGRAMA DE INCLUSAO DE TITULOS’.
02 FILLER

PIC X(44)

VALUE SPACES.

02 HORA

PIC X(08)

VALUE SPACES.

.............
PROCEDURE DIVISION
.........
WRITE RELATORIO FROM CABEC1 AFTER POSITIONING CARRO.
WRITE RELATORIO FROM CABEC1 AFTER POSITIONING 2 LINES.
WRITE RELATORIO FROM CABEC1.
Espacejamento simples
Espacejamento duplo
Espacejamento triplo
Supressão do espacejamento
Salto do canal 1 a 9
Salto do canal 10, 11 e 12

Branco
‘ ‘
Zero
‘0’
Menos
‘-‘
Mais
‘+’
‘1’ a ‘9’
‘A’, ‘B’, ‘C’
-

No POSITIONING, o máximo de linhas que se pode pular são 3 (três);

-

Não deve-se utilizar “AFTER” e “BEFORE” no mesmo programa.

-

AFTER = salta primeiro, depois imprime;

-

BEFORE = imprime primeiro, depois salta a linha.

____________________________________________________________________________________________
Versão 1

38

Cobol

7.4 CLÁUSULA CLOSE
O CLOSE é utilizado para fechar os arquivos que foram abertos. Quando este
comando não for utilizado, o próprio sistema se encarregará de fechá-los. Formatos:
CLOSE normal p/ disco e fita:

-

CLOSE CARTAO

7.5 CLÁUSULA STOP RUN
Termina o processamento de um programa.
Formato:
STOP RUN.
Este comando é obrigatório, podendo existir mais de um comando dentro do
mesmo programa.

7.6 CLÁUSULA GOBACK
Termina o processamento de uma ligação entre programas, ou pode ser
utilizado como o “STOP RUN”.
Muito utilizado em programas on-line e módulos.
Formato:
GOBACK.
Exemplo:
IDENTIFICATION DIVISION.
...............
LINKAGE SECTION.
...............
PROCEDURE DIVISION.
..............
GOBACK.

____________________________________________________________________________________________
Versão 1

39

Cobol

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.

Indica-se para uma melhor estruturação da lógica e do
programa, não executar o comando GO TO para desviar para fora
da rotina em que foi colocado.

7.8 CLÁUSULA MOVE
Este comando faz a movimentação de dados dentro do programa.
Formato 1:
MOVE (CAMPO-1)

TO

(CAMPO-2)

(CAMPO-3)

Exemplo:
WORKING-STORAGE SECTION.
01

DADO-A

PIC

X(05)

01

DADO-2

PIC

X(05).

01

DADO-3

PIC

X(05)

01

DADO-4

PIC

X(05).

VALUE ‘ABC’.
VALUE

SPACES.

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

TO

DADO-2.

MOVE DADO-A

TO

DADO-3

DADO-4.

____________________________________________________________________________________________
Versão 1

40

Cobol
Formato 2:
MOVE CORRESPONDING (CAMPO-1)

TO

(CAMPO2)

MOVE CORR

TO

(CAMPO2)

(CAMPO-1)

O MOVE CORRESPONDING ou MOVE CORR movimenta dados entre itens
elementares de mesmo nome, bastando para tanto, citar os itens de grupo
correspondentes.
Exemplo:
WORKING-STORAGE SECTION.
1

CAMPO-1.

1

03

NOME

PIC X(05).

03

ENDER

PIC X(10).

CAMPO-2.
03

ENDER

PIC X(10).

03

NOME

PIC X(05).

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

CORR

CAMPO-1

TO

CAMPO-2.

Exemplo com literais figurativas:
MOVE

SPACES

TO

WS-AREA-LIVRE

MOVE

ZEROS

TO

DATA-8

MOVE

120

TO

NUMERO-FIXO

MOVE

‘CREDITO’ TO

WS-CONTABIL

MOVE

‘FAVOR’

WS-CABEC1

7.8.1

TO

CABEC2.

CLÁUSULA OF no COMANDO MOVE
Usa-se esta cláusula para campos com nomes iguais, definidos em itens de

grupo com nomes diferentes.
____________________________________________________________________________________________
Versão 1

41

Cobol
Formato:
MOVE

WS-MES

TO

MES

OF

REGISTRO-1.

Exemplo:
WORKING-STORAGE SECTION.
1

1

TABELA-1.
03

NOME

PIC X(05).

03

ENDER

PIC X(10).

TABELA-2.

01

03

ENDER

PIC X(10).

03

NOME

PIC X(05).

SELECIONADO

PIC

X(10).

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

ENDER

OF TABELA-2

MOVE

SELECIONADO

TO

SELECIONADO

TO

ENDER OF

TABELA-1.

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

Na movimentação de itens “não-elementares”, é tratado no
Cobol como item alfanumérico, isto é, todo item de grupo é um
item alfanumérico.
Se o item receptor for alfanumérico, alfanumérico de
edição ou item alfabético:
-

as posições não preenchidas pelo conteúdo do campo
emissor, são preenchidas automaticamente com espaços;

-

Se o tamanho do campo emissor for maior que o campo
receptor, os caracteres em excesso serão truncados;

-

Se o item emissor possuir sinal, o valor absoluto será
adotado pelo item receptor.

____________________________________________________________________________________________
Versão 1

42

Cobol
Se o item receptor for numérico ou numérico de edição:
-

O caracter ponto decimal (.) será alinhado;

-

Os caracteres são preenchidos pelo item emissor com
zeros, exceto quando os zeros forem substituídos por
caracteres de edição;
O valor absoluto do item emissor será aceito da maneira

-

que o item receptor estiver formatado, a direita ou a
esquerda do ponto decimal. Os dígitos em excesso serão
truncados;
Se o item emissor for não-numérico, os resultados serão

-

imprevisíveis.
Quando um comando “MOVE” é executado, qualquer
conversão da representação de dados, quanto possível, é feita.

7.9 CLÁUSULA ADD
Esta cláusula é válida somente para itens elementares numéricos.
Por ela, são somados dois ou mais operandos e o resultado guardado numa
variável definida pelo programa.
Formato 1:
ADD (IDENT-1)

TO

(IDENT-2).

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).
____________________________________________________________________________________________
Versão 1

43

Cobol
Os conteúdos dos campos IDENT-1, IDENT-2 e IDENT-3 serão somados
(IDENT-1 + IDENT-2 + IDENT-3) e o resultado ficará em IDENT-N.
Formato 4:
ADD CORRESPONDING
ADD CORR

(IDENT-1)

(IDENT-1)

TO (IDENT-2)

TO (IDENT-2).

Neste caso, IDENT-1 e IDENT-2 são itens de grupo. Os itens elementares
contidos nestes itens de grupo serão somados e o resultado ficará em IDENT-2.
Nesta opção, os itens elementares dentro dos níveis de grupo só podem ser
somados, caso haja correspondência de nomes.
Exemplo:
1

CAMPO-1.

1

03

A

PIC

9(03)V(02).

03

B

PIC

9(04).

CAMPO-2.
03

A

PIC

9(03)V9(02).

03

B

PIC

9(04).

ADD

CORR

CAMPO-1

TO

CAMPO-2.

Efetuará as seguintes operações:
(A do CAMPO-1 + A do CAMPO-2 )= S1
(B do CAMPO-1 + B do CAMPO-2 )= S2
No CAMPO-2 serão armazenados os resultados:
A do CAMPO-2 = S1
B do CAMPO-2 = S2
Outros exemplos:
Suponhamos A = 1, B=2, C=3 e D=4.
____________________________________________________________________________________________
Versão 1

44

Cobol
ADD A B

TO

C D.

(Cálculo 1 = A + B + C = S1
C = S1 = 6

/

Cálculo 2 = A + B + D = S2

/ D = S2 = 7)

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

C

(A + C = S1

/ B = S1 = 3)
GIVING

D

/ D = S1 = 4)

-

Nos casos acima os identificadores que sucedem a “TO”
ou “GIVING” podem ser itens elementares numéricos de
edição.

-

O tamanho máximo de cada operando num campo
numérico é de 18 dígitos.

7.9.1

OPÇÃO ROUNDED
Quando a opção ROUNDED for colocada, haverá uma aproximação para dígito

menos significativo do operando. Será somado um (1) a este dígito, se o dígito, mais
significativo a ser truncado for maior ou igual a cinco (5). Esta opção só é válida para
casa decimal.
Exemplos:
CAMPO-1 = 1,99
CAMPO-2 = 0,3
Dividindo o CAMPO-1 pelo CAMPO-2, teremos: 6,6333... o campo receptor
ficará = 6,63.
CAMPO-3 = 1,25
CAMPO-4 = 0,3
Dividindo o CAMPO-3 pelo CAMPO-4, resultaria em 4,2666...., ficando o
campo receptor = 4,27.
Formato:
____________________________________________________________________________________________
Versão 1

45

Cobol
ADD CAMPO-3

TO

CAMPO-4

ROUNDED.

A opção ROUNDED deverá preceder o campo receptor.

7.9.2

OPÇÃO ON SIZE ERROR
Se antes do ponto decimal, o valor do resultado exceder o número de dígitos

disponíveis do operando definido para conter o resultado, será desviado para
sentença imperativa e os valores permanecerão inalterados.
Exemplo:
ADD

A

TO

B

GIVING

C

ROUNDED

ON SIZE ERROR GO TO ERRO.
A opção “ON SIZE ERROR” deve sempre preceder o campo receptor.

7.10CLÁUSULA SUBTRACT

Esta cláusula é utilizada para subtrair um ou somar dois ou
mais itens numéricos para subtrair o resultado de outro ou mais
itens numéricos.

Formato 1:
SUBTRACT

A

FROM

B

No cálculo acima, faz-se = (B – A) e o resultado fica em “B”.
Formato 2:
SUBTRACT

(IDENT-1)
FROM

(IDENT-2) ....

(IDENT-M)

ROUNDED

(IDENT-N)

____________________________________________________________________________________________
Versão 1

46

Cobol
ON SIZE ERROR (SENTENÇA IMPERATIVA).
Formato 3:
SUBTRACT

(IDENT-1)
GIVING

(IDENT-2) FROM

(IDENT-M)

(IDENT-N).

Fomato 4:
SUBTRACT CORR

(IDENT-1)

FROM

(IDENT-2)

CORRESPONDING
No formato 2, todos os identificadores (IDENT-X) antes da palavra FROM são
somados, e o total é subtraído dos identificadores “M” e “N”. O resultado fica em “M” e
“N”.
Exemplo:
SUBTRACT A B

FROM D C.

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”.
No formato 3, todos os identificadores (IDENT-X) que precedem a palavra
FROM são somados, o resultado subtraído do operando após a palavra FROM. O
resultado é colocado no operando após a palavra GIVING.
Exemplo:
SUBTRACT H

I

J FROM L

GIVING

N.

Operações efetuadas acima:
L – (H + I + J), o resultando colocado em “N”.
No formato 4, temos como exemplo:

____________________________________________________________________________________________
Versão 1

47

Cobol
1

01

A.
02

B

PIC 9(04).

02

C

PIC 99.

02

B

PIC 9(04).

02

C

PIC 99.

D.

SUBTRACT

CORR

A

FROM

D.

Operações que serão efetuadas:
1) B(D) - B(A), e o resultado é colocado em B(D)
2) C(D) - C(A), e o resultado é colocado em C(D).

7.11CLÁUSULA MULTIPLY (multiplicação)

Esta cláusula é usada para multiplicar um item numérico
por outro numérico.

Formato 1:
MULTIPLY

A

BY

B.

A multiplicação é feita “A” por “B”, e o resultado é colocado em “B”.
Formato 2:
MULTIPLY

A

BY

B

GIVING

C.

A multiplicação é feita “A” por “B” e o resultado é colocado em “C”.
O campo “C” pode ser uma picture numérica de edição.

____________________________________________________________________________________________
Versão 1

48

Cobol
Formato 3:
MULTIPLY (IDENT-1)

BY

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
Formato 4:
MULTIPLY (IDENT-1)

BY

(IDENT-2)

GIVING

(IDENT-3)

ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).

7.12CLÁUSULA DIVIDE (divisão)

Esta cláusula é utilizada para efetuar o comando de
divisão entre campos de itens numéricos.

Exemplo/formato 1:
DIVIDE

A

BY

B.

Dividendo = A
Divisor = B
Quociente = B
Operações que serão efetuadas acima = (A / B) = R1
B = R1
Exemplo/formato 2:

____________________________________________________________________________________________
Versão 1

49

Cobol
DIVIDE

A

INTO

B.

Dividendo = B
Divisor = A
Quociente = B
Operações que serão efetuadas acima = (B / A) = R1
B = R1
Exemplo/formato 3:
DIVIDE

A

BY

B

GIVING

C.

Operações que serão efetuadas acima = (A / B) = R1
C = R1
DIVIDE

A

INTO

B

GIVING

C.

Operações que serão efetuadas acima = (B / A) = R1
C = R1
Formato 4:
DIVIDE

(IDENT-1)

BY

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
DIVIDE

(IDENT-1)

INTO

(IDENT-2)

ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
Formato 5:
DIVIDE

(IDENT-1)

BY(ou INTO)

(IDENT-3)

ROUNDED

(IDENT-2)
REMAINDER

GIVING

(IDENT-4).

____________________________________________________________________________________________
Versão 1

50

Cobol

7.12.1

OPÇÃO REMAINDER

É utilizada para colocar o resto da divisão.

Exemplos:
DIVIDE

A

INTO

B

REMAINDER

C.

DIVIDE

A

INTO

B

GIVING

REMAINDER

DIVIDE

A

BY

B

REMAINDER

C.

DIVIDE

A

BY

B

GIVING

REMAINDER

C
C

D.
D.

7.13CLÁUSULA COMPUTE

Operandos que a cláusula compute pode executar:
-

Adição (+);

-

Subtração (-);

-

Multiplicação (*);

-

Divisão (/);

-

Exponenciação (**).

Suponhamos que desejamos calcular uma taxa cujo valor é de 5 percentuais
do capital:
COMPUTE TAXA = 0.05 * CAPITAL
Outros exemplos:
COMPUTE VALOR-A = TAXA * 0.15 + NUM / DIV.
COMPUTE RESULTADO = B * B * A.
____________________________________________________________________________________________
Versão 1

51

Cobol
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...= (EXPRESSÃO ARITMETICA)
ON SIZE ERROR (SENTENÇA IMPERATIVA).

No compute, as operações obedecem a hierarquia das
operações. Caso se queira efetuar uma operação de nível mais
inferior antes de uma superior, deve-se colocar a de nível de
interesse primeiro entre parênteses.

Exemplo:
IF (CAMPO / 4 * 6)
MOVE

CAMPO

EQUAL (CAMPO2 * 2) / 4
TO

SAI-CAMPO.

As operações aritméticas seguem a sua hierarquia, exceto quando estiverem
entre parênteses.

7.14CLÁUSULA DISPLAY

____________________________________________________________________________________________
Versão 1

52

Cobol

Esta cláusula serve para escrever dados em um dispositivo
de saída.

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
cartão “//SYSOUT” no JCL.
Quantidade de caracteres (bytes) para cada tipo:
-

Console = 100 bytes;

-

Syspunch = 72 bytes;

-

Sysout = 120 bytes.

7.15CLÁUSULA ACCEPT

Esta cláusula executa uma operação de entrada.

Formato:
ACCEPT (IDENT)

FROM

SYSIN.
CONSOLE.
(NOME-MNEMONICO).

____________________________________________________________________________________________
Versão 1

53

Cobol
(NOME-MNEMONICO) = executa uma operação de entrada do computador
para um campo definido na “WORKING-STORAGE SECTION”.
Exemplos:
ACCEPT WS-DATA

FROM

DATE.

ACCEPT DADOS

FROM

SYSIN.

ACCEPT DATA-R

FROM

CONSOLE.

Exemplos para pedir data pelo CONSOLE:
DISPLAY ‘DIGITE A DATA DO DIA:’ UPON CONSOLE.
DISPLAY ‘NO FORMATO DD/MM/AAAA’ UPON CONSOLE.
ACCEPT DATA-DO-DIA
1

FROM

CONSOLE.

DATA-DO-DIA.
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”.

____________________________________________________________________________________________
Versão 1

54

Cobol
//........
//SYSIN DD *
ARQUIVODT4573
Ou
//SYSIN DD DSN=V.POOL.ARQDATA(0),DISP=SHR

7.16CLÁUSULA IF

Esta cláusula indica a decisão de um programa.

Formato:
IF

(CONDIÇÃO)

(SENTENÇA-1)

ELSE

(SENTENÇA-2)

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

RENDIMENTO
GO

EQUAL

1000,00 OR GREATER 1000,00

TO

DESCONTO-MAX

TO

DESCONTO-MIN.

ELSE
GO

Neste exemplo, o programa indica a existência de uma decisão escrevendo a
palavra “IF”, seguida de palavras que contenham um teste e o que fazer conforme o
resultado do teste significando uma frase condicional.
Outros exemplos:
IF

VALOR
GO

TO

IS

NEGATIVE

FIM-ROTINA

____________________________________________________________________________________________
Versão 1

55

Cobol
ELSE
GO

TO

INICIO-ROTINA

END-IF
IF

NOME NOT EQUAL ‘PEDRO’
NEXT SENTENCE

ELSE
ADD 1

TO

CONT-NOME-IGUAL.

MOVE CONT-NOME-IGUAL

TO

RELATORIO-NOME-IGUAL.

O “NEXT SENTENCE”

determina que nada será feito e

deve-se continuar o processo após o primeiro ponto final ou “ENDIF” encontrado.

Toda sentença condicional possui 4 elementos:
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.

____________________________________________________________________________________________
Versão 1

56

Cobol

7.16.1

TESTE DE CONDIÇÃO DE CLASSE

Testa o conteúdo de um campo, se é alfabético ou numérico.
Formato:
IF

(IDENT)

IS

NUMERIC

IS NOT ALPHABETIC
Exemplo:
IF

CONTA

IS

COMPUTE

NUMERIC

SALDO = SALDO-TOTAL – TAXAS

ELSE
DISPLAY ‘CONTA NÃO NUMÉRICA, DIGITAR NOVAMENTE’.

Quando testar se um campo é numérico, e este for
compactado, tomar cuidado com o sinal (C). Nestes casos, colocar
o indicador de sinal (S) na frente dos 9’s.

Exemplo:
01 CAMPO

9(08).

01 CAMPO

9(05)

01 CAMPO

S9(07) COMP-3.

7.16.2

COMP-3.

TESTE DE NOME-DE-CONDIÇÃO

Efetua comparação usando palavras significativas, associadas a um nível “88”.
Definição:
1

WS-AREA.
03

NOME

PIC X(30).

03

CODIGO

PIC 9(06).

03

STATUS

PIC 9(01).

88

HOMEM

VALUE

1.

____________________________________________________________________________________________
Versão 1

57

Cobol
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

7.16.3

TO

PROCED-ERRO.

TESTE DE CONDIÇÃO DE RELAÇÃO

Efetua comparação entre dois (2) operandos.
Formato:
IF (IDENT-1) ou (LITERAL-1) ou (EXPRESSÃO ARITMÉTICA-1)
OPERADOR DE RELAÇÃO
(IDENT-2) ou (LITERAL-2) ou (EXPRESSÃO ARITMÉTICA-2)
OPERAÇÃO DE RELAÇÃO
IS (NOT) GREATER (THAN)

SIGNIFICADO
MAIOR QUE OU NÃO MAIOR QUE

IS (NOT) >
IS (NOT) LESS (THAN)

MENOR QUE

IS (NOT) <
IS (NOT) EQUAL TO

IGUAL

OU

OU

NÃO MENOR QUE

NÃO IGUAL

IS (NOT) =
Exemplos:
IF

IF

AC-LINHA

GREATER 50

GO

ROTINA-CABECALHO.

TO

CODIGO
MOVE

=
CODIGO

2
TO

REG-CODIGO.

____________________________________________________________________________________________
Versão 1

58

Cobol
IF

VALOR

NOT

LESS

SALDO

PERFORM ROT-GRAVA.

7.16.4

TESTE DE CONDIÇÃO DE SINAL

Sua função é determinar o valor algébrico de um operando aritmético.
Formato:
IF (IDENT-1)

IS

POSITIVE

IF (EXPRESSÃO ARITMÉTICA) IS

NOT NEGATIVE
ZERO (ZEROS)

Exemplo:
IF VALOR

IS POSITIVE

MOVE VALOR

TO

SAI-VALOR

ADD

TO

AC-VALOR.

VALOR

Exemplo 1 cláusula IF:
IF

NUMERO

GREATER THAN

B ** 2 – 1

NEXT SENTENCE
ELSE
GO
IF

IF

TO

ROT-MOVIMENTA.

NUM-2

IS

NEGATIVE

GO

TO

ERRO.

VALOR – 3
MOVE

EQUAL

SALDO

TO

SALDO
SALDO-SAIDA.

Exemplo 2 cláusula IF:
IF

VALOR
IF

IS NUMERIC

VALOR
IF

IS

ZEROS

DADO

IS NEGATIVE

MOVE

‘CAMPO VALIDO’

TO

MENSAGEM

ELSE
____________________________________________________________________________________________
Versão 1

59

Cobol
GO

TO

ROT-LEITURA

ELSE
NEXT SENTENCE
ELSE
GO

TO

INICIO.

7.17CLÁUSULA PERFORM

Esta cláusula ocasiona a execução de um ou mais
procedimentos.

Após a execução dos procedimentos (parágrafos), o controle volta para a
instrução seguinte a do “PERFORM”.
Formato (simples):
PERFORM

(PARAGRAFO-1)

THRU

(FIM-PARAGRAFO-1).

PERFORM

(PARAGRAFO-1)

THRU

(PARAGRAFO-2).

PERFORM

(PARAGRAFO-1).

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

ROT-ABC THRU

MOVE

TO

A

FIM-ROT-ABC.

B

STOP RUN.
.....
ROT-ABC.
____________________________________________________________________________________________
Versão 1

60

Cobol
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.
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 parágrafos em “SECTION”, o CONDITION-CODE de
retorno estará na próxima SECTION ou no final da PROCEDURE.
Neste caso, você só poderá usar o GO TO para desvios dentro da mesma
SECTION, pois assim, não haverá o risco de destruir o CONDITION-CODE de
retorno.
Exemplo:
00-INICIO SECTION.

____________________________________________________________________________________________
Versão 1

61

Cobol
00-00-A.
MOVE

1

TO

AC-VALOR.

PERFORM 10-LEITURA-CARTAO.
IF

CHAVE-FIM

EQUAL

GO

00-00-A.

TO

‘NAO’

.............
00-99-FIM.
EXIT.
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.

4

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

7.17.1

PERFORM - TIMES

É um complemento da cláusula PERFORM.
Como o PERFORM, esta cláusula desvia-se da sequência normal de execução
para realizar um ou vários procedimentos.
Formato:
PERFORM

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

____________________________________________________________________________________________
Versão 1

62

Cobol
(NUM-INTEIRO)
(NOME-DADO)

TIMES.

Com a opção TIMES , os procedimentos são realizados no número de vezes
especificados por “NOME-DADO” ou “NUM-INTEIRO”.
Em seguida, passa-se ao comando seguinte ao comando “PERFORM”.
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:
PERFORM CALCULAR

THRU

CALCULAR-FIM

5 TIMES.

.......................
ou
PERFORM CALCULAR

THRU

CALCULAR-FIM
VALOR-NUM

TIMES.

..........................
CALCULAR.
.............
..............
CALCULAR-FIM.
O parágrafo CALCULAR, será executado 5 vezes ou dependendo do valor
contido em VALOR-NUM.

____________________________________________________________________________________________
Versão 1

63

Cobol

7.17.2

PERFORM – UNTIL

Com a opção “UNTIL”, os procedimentos serão executados
até que a condição após o “UNTIL” seja verdadeira.
No programa, ao encontrar a cláusula “UNTIL”, primeiro é
verficado se a condição do “UNTIL” já está satisfeita e depois
executa o “PERFORM”.

Formato:
PERFORM

(NOME-ROTINA-1)
UNTIL

THRU

(NOME-ROTINA-2)

(CONDIÇÃO)

ou
PERFORM

(NOME-ROTINA-1)

UNTIL

(CONDIÇÃO)

Em seguida ao PERFORM UNTIL, é executado o comando seguinte ao
“PERFORM”, se a condição já estiver satisfeita.
Quando a condição já estiver satisfeita, no momento em que é encontrado o
comando “PERFORM” referente a condição, os procedimentos chamados pelo
“PERFORM” não serão executados.
Exemplo:
PERFORM

ROT-A

THRU

FIM-ROT-A

UNTIL

WS-NUM

IS

NEGATIVE.

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

____________________________________________________________________________________________
Versão 1

64

Cobol

7.17.3

PERFORM – VARYING

Formato:
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)

São executadas as seguintes etapas de operação:
1- “NOME-DADO-1” é colocado no valor inicial (FROM) pelo “LITERAL-NUMERICO1” ou “NOME-DADO-2”;
2- A “CONDICAO-1” é testada para determinar se ela foi satisfeita. No caso de ter
sido cumprida, o comando seguinte ao comando “PERFORM” será executado;
3- No caso da condição não ter sido satisfeita, os procedimentos do “PERFORM” são
realizados;
4- Em seguida, “NOME-DADO-1” é modificado por “LITERAL-NUMERICO-2” ou
“NOME-DADO-3”;
5- As etapas 2, 3 e 4 são repetidas até a condição ser satisfeita.
Exemplo:
....................
WORKING-STORAGE SECTION.
....................
01

INDICE

PIC 9(02)

VALUE ZEROS.

OCCURS

TIMES.

1 TABELA.
02 VENDAS-PROD
03 VALOR

4

PIC 9(05).

.............
.............
PROCEDURE DIVISION.
.................
PERFORM ZERA-TAB

____________________________________________________________________________________________
Versão 1

65

Cobol
VARYING INDICE
FROM

1

UNTIL

BY

1

INDICE

GREATER 4.

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.
O programa poderá ter vários EXIT’s associados com PERFORM’s.
Exemplo:
INICIO.
PERFORM A-1 THRU

A-99.

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

7.19CLÁUSULA (BLANK WHEN ZERO)
Indica que o item descrito deve ser preenchido com espaços, sempre que um
valor for zero.

____________________________________________________________________________________________
Versão 1

66

Cobol
Esta cláusula deve ser apenas para itens elementares numéricos ou numéricos
de edição.
Exemplo:
1

LINHA.
2

MOVE

VALOR

CAMPO-NUM

TO

PIC 9(05)

BLANK WHEN ZERO.

VALOR.

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.

7.20CLÁUSULA (SYNCHRONIZED – SYNC)
Utilizada para obter alinhamento de um item elementar em uma das limitações
próprias da memória (HALF-WORD) – (FULL-WORD).
Formato:
(SYNCHRONIZED) (LEFT)
(SYNC)

(RIGHT)

Esta cláusula assegura a eficiência das operações aritméticas das cláusulas
COMP, COMP-1, COMP-2. Para as demais cláusulas, é interpretada como
comentário.
A necessidade da “SYNC”, é pelo fato de não existir alinhamento em tempo de
compilação para descrição de itens binários para nível superior “01”. No exemplo
abaixo, os campos A e B necessitam ser alinhados:
1

REGISTRO.
2

NOME

PIC X(20).

02 FILLER

PIC X(01).

02 A

PIC S9(07) COMP.

02 CODIGO

PIC 9(02).

____________________________________________________________________________________________
Versão 1

67

Cobol
02 B

PIC S9(04) COMP.

Se usarmos a SYNCHRONIZED (SYNC), não precisamos nos preocupar com o
problema do alinhamento.
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

SUBTRACT 5 FROM

A

B

B.

7.21OPERADORES LÓGICOS
Existem no Cobol 3 (três) operadores lógicos:

OPERADOR LÓGICO
OR

SIGNIFICADO
Se ao menos um for

____________________________________________________________________________________________
Versão 1

68

Cobol
verdadeiro, o resultado
será verdadeiro.
AND

Se todos forem
verdadeiros, o resultado
será verdadeiro.

NOT

Negação lógica.

Pode ser utilizado parênteses tanto para esclarecer o sentido das
comparações, quanto para obter outros efeitos.
IF VALOR
GO

7.21.1

= 100,00

TO

OR

200,00

OR

400,00

OK.

TESTES COMPOSTOS

Ocorre o teste composto, quando aparece os conectores lógicos no “IF”, como:
“AND”, “OR” ou “NOT”.
Exemplo:
IF NOME
GO

=

TO

SPACES

AND

ENDERECO

= SPACES

CAMPOS-BRANCO

ELSE
IF CODIGO

LESS

MOVE 1
IF (A LESS
(B / 2

2

TO

INDICE.

B

GREATER

EQUAL

(F

NOT

GO

TO

OR

D)

E)

EQUAL

GREATER

C

AND
OR

ZEROS)

MOVER-DADOS.

IF CAMPO IS NUMERIC
CAMPO

CODIGO-2

AND

LESS 500,00

NEXT SENTENCE
____________________________________________________________________________________________
Versão 1

69

Cobol
ELSE
MOVE CAMPO
IF (TAXA

TO SAI-CAMPO.

GREATER

(CODMAT = ‘P’

70

(FIRMACOD

OR

LESS

AND

LESS

100)

‘B’)

OR
AND

40)

NEXT SENTENCE
ELSE
GO

TO

CONFIRMA.

7.22DATA E HORA DO SISTEMA
Do sistema, pode-se obter:
-

DATE = AAMMDD

(6 bytes)

-

DAY

(5 bytes) -> data juliana

-

TIME = HHMMSSDD (8 bytes)

= AADDD

Exemplos:
ACCEPT

CAMPO-DATA

FROM

DATE.

ACCEPT

CAMPO-DIA

FROM

DAY.

ACCEPT

CAMPO-HORA

FROM

TIME.

Definindo os campos acima na “WORKING-STORAGE SECTION”:
01

CAMPO-DATA

PIC 9(06).

01

CAMPO-DIA

PIC 9(05).

01

CAMPO-HORA

PIC 9(08).

ou
1

CAMPO-DATA.
2

ANO

PIC 9(02).

02

MÊS

PIC 9(02).

02

DIA

PIC 9(02).

____________________________________________________________________________________________
Versão 1

70

Cobol
.................

____________________________________________________________________________________________
Versão 1

71

Cobol

____________________________________________________________________________________________
Versão 1

72

Cobol

8.

ARQUIVOS DE ACESSO DIRETO
Na ENVIRONMENT DIVISION, definindo o arquivo:
FILE-CONTROL.
SELECT CADASTRO ASSIGN

TO

DA-I-DDCADAST

ACCESS

MODE

IS

RANDOM

RECORD

KEY

IS

CAD-CHAVE

NOMINAL KEY

IS

W-CHAVE.

ACCESS MODE IS RANDOM –> deve ser utilizado para

____________________________________________________________________________________________
Versão 1

73

Cobol
arquivos cuja organização é direta (D) ou indexada (I).
NOMINAL

KEY

IS

(NOME-DA-WORKING)

->

campo

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

KEY

IS

(NOME-DO-REGISTRO)

->

campo

definido no registro, na qual contém a chave de pesquisa.

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.

8.1 UTILIZANDO ACESSO DIRETO – LEITURA SEQUENCIAL
FILE-CONTROL.
SELECT

CADASTRO

ASSIGN

TO

DA-I-DDCADAST

ACCESS

MODE

IS

SEQUENTIAL

RECORD

KEY

IS

CAD-CHAVE.

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

CADASTRO
LABEL STANDARD
RECORDING

F

____________________________________________________________________________________________
Versão 1

74

Cobol

01

RECORD

130

BLOCK

10

RECORDS.

REG-CADASTRO.
03

CAD-CHAVE

PIC 9(06).

03

CAD-NOME

PIC X(40).

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

READ

CADASTRO
AT

END
GO

TO

FIM-PROCESSAMENTO.

.....................
..................
Obrigatoriamente deve-se usar na leitura sequencial:
ACCESS MODE IS SEQUENTIAL = usado para arquivos cuja organização é

-

DA-I-XXXXXXXX e leitura sequencial;
RECORD KEY IS (NOME-CAMPO) = define a chave do arquivo. Campo da

-

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

-

8.1.1

I-O

Formato no OPEN:
OPEN

I-O (NOME-DO-ARQUIVO)

No OPEN, a 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

75

Cobol
READ

(NOME-DO-ARQUIVO)

INTO

(AREA-IDENTIF)

INVALID KEY (SENTENÇA IMPERATIVA)
A opção “INVALID KEY” aciona os dispositivos de programação no sentido de
verificação do conteúdo das chaves, o que normalmente é substtuído pelo teste de
FILE STATUS.

Exemplo:
MOVE

150190

READ

CADASTRO.

IF

TO

WS-FS-CADASTRO

WS-CHAVE. (->nominal-key)

EQUAL ‘23’

DISPLAY “REGISTRO NÃO ENCONTRADO”
STOP RUN.
Formato no WRITE:
WRITE

(NOME-DO-DADO, REGISTRO)

FROM

(AREA-IDENTIF)

INVALID KEY (SENTENÇA IMPERATIVA)

8.1.2

CLÁUSULA REWRITE
Sua função é substituir o registro código de um arquivo de acesso direto, se o

conteúdo da “NOMINAL KEY” associada for válido.

A cláusula “READ” deve ser dada antes da cláusula
“REWRITE”.

Formato:

____________________________________________________________________________________________
Versão 1

76

Cobol
REWRITE

(NOME-DO-DADO, REGISTRO)

FROM

(AREA-IDENTIF)

INVALID KEY (SENTENÇA IMPERATIVA)

Exemplo:
MOVE

CAR-CHAVE

REWRITE

TO

WS-CHAVE (-> nominal-key)

REG-CADASTRO.

IF WS-FS-CADASTRO NOT EQUAL ZEROS
DISPLAY ‘FILE STATUS = ‘ WS-FS-CADASTRO
DISPLAY ‘

ERRO NO REWRITE

STOP RUN.
DISPLAY ‘OK, REGISTRO REGRAVADO’.

8.1.3

CLÁUSULA START
A cláusula START é utilizada, quando se quer agilizar a leitura de um arquivo

de acesso direto e método de acesso sequencial.
Posiciona-se em algum registro cuja chave de acesso seja satisfeita e daí para
frente, lê-se o arquivo sequencialmente.
Formato:
START (NOME-DO-ARQUIVO) KEY IS (EQUAL TO)
(GREATER THAN)
(NOT LESS THAN)
(NOME-DO-CAMPO)
INVALID

KEY

(SENTENÇA

IMPERATIVA)
____________________________________________________________________________________________
Versão 1

77

Cobol
OU
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

01

RECORDING

F

BLOCK

20

RECORDS.

CAD-REGISTRO.
03

CAD-KEY.
05

CAD-CODIGO

PIC X(02).

05

CAD-NUMERO

PIC 9(04)

03

CAD-NOME

PIC X(40).

03

CAD-ENDER

PIC X(45).

03

CAD-IDADE

PIC 9(02).

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

WS-KEY

PIC X(06) VALUE ‘AB1437’.

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

CADSEQUE

____________________________________________________________________________________________
Versão 1

78

Cobol
INVALID KEY
PERFORM ROTINA-NÃO-ACHADO.
LEITURA.
READ

CADSEQUE
AT

END
GO TO FIM-PROCESSA.

......
GO

TO

LEITURA.

FIM-PROCESSA.

Toda vez que se passar pelo “START”, o registro cuja
chave foi satisfeita será retornado e posicionado para leitura.

____________________________________________________________________________________________
Versão 1

79

Cobol

9.

TABELAS
As tabelas devem ser construídas na ‘”DATA DIVISION”.

9.1 CLÁUSULA OCCURS
Os itens 01 e 77 não podem conter a cláusula OCCURS.
Formato:
OCCURS X

TIMES

OCCURS X

TO

XX

DEPENDING ON (CAMPO).

Existem 2 tipos de tabelas:
-

TABELA SUBSCRITA;

-

TABELA INDEXADA.

____________________________________________________________________________________________
Versão 1

80

Cobol
As tabelas também podem ser:
-

DIRECIONAL;

-

BIDIMENSIONAL;

-

TRIDIMENSIONAL.

O tamanho de uma tabela não pode exceder a 131.071

-

bytes (128K);
O tamanho de uma tabela que tiver DEPENDING ON não

-

pode exceder a 32.767 bytes (32K);
-

Cada 1K tem em média 1.024 bytes;

-

O indexador de uma tabela indexada, pode ser somado
ou subtraído. Ex.: TAB (INDEX + 1) TO X.

9.2 TABELA SUBSCRITA
Pode ser considerada, tabela subscrita, a tabela que você utiliza um índice fora
dela.
Exemplo 1, definição da tabela na WORKING-STORAGE SECTION:
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’.

____________________________________________________________________________________________
Versão 1

81

Cobol
03 FILLER

PIC X(09)

VALUE

‘NOVEMBRO’.

03 FILLER

PIC X(09)

VALUE

‘DEZEMBRO’.

02 TAB-MESES-R
03 MESES
1

PIC X(09).

DATA-DIA.
2

1

REDEFINES TAB-MESES OCCURS 12 TIMES.

DIA

PIC 9(02).

02

FILLER

PIC X(01).

02

MES

PIC 9(02).

02

FILLER

PIC X(01).

02

ANO

PIC 9(04).

CABEC.
03

FILLER

PIC X(28) VALUE
‘RELATORIO EMITIDO EM: ‘.

03

NOME-MÊS

PIC X(09).

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

DATA-DIA FROM CONSOLE.
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
VALUE

02 ESTADO

PIC X(20)
‘TOTAL DO ESTADO DE ‘.
PIC X(15).

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

____________________________________________________________________________________________
Versão 1

82

Cobol
1

TABELA-ESTADO.
2

TAB.
3

FILLER

PIC

X(17)

VALUE

‘SPSAO

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

ADD 1

TO

IND

IF

IND

=

24

GO

TO

ROT-ERRO

TO

LOOP-INICIO.

ELSE

ELSE
GO
MOVE-ESTADO.
MOVE

DESCRICAO(IND)

TO

ESTADO.

____________________________________________________________________________________________
Versão 1

83

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.

A cláusula SET deve ser utilizada quando quisermos
inicializar um indexador antes da execução de uma cláusula
SEARCH. Pode também ser utilizada na transferência dos
conteúdos

dos

indexadores

para

outros

itens

de

dados

elementares ou somar ou subtrair conteúdo do indexador.

Formato 1:
SET

(INDEX NAME)

TO

(IDENTIFICADOR)

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

Função: seta o “INDEX NAME” ou “IDENTIFICADOR” com um valor inicial.
Formato 2:
SET

(INDEXADOR-A)

(INDEXADOR-B)
UP

BY

(IDENT-1)

ou
DOWN BY (LIT-2)
Neste formato 2, quando o comando SET é executado, o conteúdo do
INDEXADOR-A é acrescido (UP BY) ou decrescido (DOWN BY) do valor que
corresponde ao número de ocorrências representadas pelo LIT-2 ou IDENT-1.
Exemplos:
SET

INDEX-7

TO

25.

____________________________________________________________________________________________
Versão 1

84

Cobol
SET

INDEX-C INDEX-D TO

INDEX-7.

SET

INDEX-1

UP

1.

SET

INDEX-8

DOWN

BY

BY

1.

9.4 CLÁUSULA SEARCH
Esta cláusula é utilizada para pesquisar uma tabela. Ela procura um elemento
que satisfaça certas condições e determina o valor do nome indexado associado ao
índice correspondente do elemento da tabela.
Somente um único identificador da tabela pode ser referenciado por uma
cláusula SEARCH.

Formato 1:
SEARCH

IDENT-1
AT

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

END

WHEN

(SENTENCA IMPERATIVA 1)
CONDICAO-1

(SENTENCA IMPERATIVA 2)
(NEXT SENTENCE)

WHEN

CONDICAO-2

(SENTENCA IMPERATIVA 3)
(NEXT SENTENCE)

Formato 2:
SEARCH ALL

IDENT-1
AT
WHEN

END

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

AND

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

Nos formatos acima, o IDENT-1 não deve ser subscrito ou indexado.
____________________________________________________________________________________________
Versão 1

85

Cobol
Sua descrição na DATA DIVISION deve conter a cláusula OCCURS associada a
opção INDEXED BY. Não poderemos usar números de vírgula flutuante no IDENT-1.
Quando pesquisamos uma tabela através da cláusula SEARCH, somente o
indexador associado ao nome dado ao IDENT-1 pela opção INDEXED BY é que
varia.
Então, para pesquisas de tabela de mais de uma dimensão, é necessário
executar a cláusula SEARCH repetidamente.
Após cada execução, é necessário que a cláusula SET ajuste os indexadores
associados aos outros níveis da tabela.
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.

9.5 TABELA INDEXADA

Tabela indexada é aquela cujo índice está embutido na tabela
através da cláusula INDEXED BY.

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

____________________________________________________________________________________________
Versão 1

86

Cobol
05

FILLER

PIC X(11) VALUE ‘BENEDITA’.

05

FILLER

PIC X(11) VALUE ‘SERGIO’.

05

FILLER

PIC X(11) VALUE ‘CAMILA’.

05

FILLER

PIC X(11) VALUE ‘EVELYN’.

05

FILLER

PIC X(11) VALUE ‘SERAFIM’.

05

FILLER

PIC X(11) VALUE ‘PEDRO’.

05

FILLER

PIC X(11) VALUE ‘LUCAS’.

05

FILLER

PIC X(11) VALUE ‘IRACEMA’.

TAB-NOM

REDEFINES

03

TABELA-NOMES

OCCURS 14 INDEXED BY IND.
05
01

NOME

AUX-NOME

PIC X(11).

PIC X(11) VALUE SPACES.

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

AUX-NOME

SET IND
SEARCH

TO

FROM CONSOLE.

1.

TAB-NOM
AT

END
GO

TO

DAR-DISPL

WHEN
NOME (IND)

EQUAL

AUX-NOME

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

____________________________________________________________________________________________
Versão 1

87

Cobol
.........
FD

CADENTRA
..........
03

CHAVE-COD

PIC 9(01).

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

PIC X(20) VALUE SPACES.

03 LIN-MSG

PIC X(20).

......
01 TABELA2.
03

03

TAB-MSG.
05 FILLER

PIC X(11) VALUE ‘1DESPREZADO’.

05 FILLER

PIC X(11) VALUE ‘2DUPLICADO’.

05 FILLER

PIC X(11) VALUE ‘3EXCLUIDO’.

05 FILLER

PIC X(11) VALUE ‘4INCLUIDO’.

05 FILLER

PIC X(11) VALUE ‘5ALTERADO’.

FILLER
05

REDEFINES

TAB-2

OCCURS

TAB-MSG.
5

TIMES

ASCENDING KEY IS TAB-CODIGO
INDEXED BY IND.
07

TAB-CODIGO

PIC 9(01).

07

TAB-MENSAG

PIC X(10).

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

TO SAIDA

WHEN
TAB-CODIGO (IND) EQUAL CHAVE-COD
MOVE TAB-MENSAG(IND) TO LIN-MSG.
OBS: Não é necessário setar o indexador quando utilizar “SEARCH ALL”.
____________________________________________________________________________________________
Versão 1

88

Cobol

A ordem de sequência das opções do SEARCH ALL devem ser
respeitadas.
1 – OCCURS
2 – ASCENDING KEY IS ou DESCENDING KEY IS
3 – INDEXED BY.

____________________________________________________________________________________________
Versão 1

89

Cobol

10.

CLASSIFICAÇÃO DE DADOS
São quatro (4) os elementos para classificação interna no programa Cobol.
Podemos classificar os arquivos em ordem ascendente ou descendente.
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

1

RECORD

IS

TRAB.

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”.
Determina os campos de controle para classificação e indica se
processamentos de entrada e saída devem ser usados.
Exemplo:
____________________________________________________________________________________________
Versão 1

90

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:
500- PEGA-CLASSIFICADO SECTION.
LER-SORT.
RETURN

TRABALHO

AT END
MOVE ‘*’ TO CHAVE-FIM-SORT
GO

TO FIM-SORT.

10.1CLÁUSULA SELECT (SORT)
Esta cláusula fica na “ENVIRONMENT DIVISION” e “DATA DIVISION”, na
descrição dos arquivos.
____________________________________________________________________________________________
Versão 1

91

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

TO

UT-S-SORTWK01.

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

-

SD (SORT DESCRIPTION) é obrigatório;

-

(NOME-ARQ-CLASSIF):
- não pode dar OPEN, CLOSE, READ e WRITE;
- deve ter um SELECT;
- Cláusula DATA RECORDS é obrigatória em alguns

sistemas. Atualmente, é opcional.

10.2CLÁUSULA RELEASE
Release é um verbo de liberação.

____________________________________________________________________________________________
Versão 1

92

Cobol
Esta cláusula é usada no SORT, em um procedimento de entrada para
transferir um registro de cada vez para ser classificado.

Formato:
RELEASE

(NOME-DO-REGISTRO)

ou
RELEASE

(NOME-DO-REGISTRO)

FROM

(NOME-DA-AREA).

10.3CLÁUSULA RETURN
Return é um verbo de retorno.
O comando RETURN é usado em procedimentos de saída para receber, um
de cada vez, os registros já classificados.
Formato:
RETURN (NOME-DO-ARQ-CLASSIF)
AT

INTO

(AREA)

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)

____________________________________________________________________________________________
Versão 1

93

Cobol
INPUT PROCEDURE (NOME-SECAO-1)
GIVING (NOME-ARQUIVO-2)
OUTPUT PROCEDURE (NOME-SECAO-2)
1- (NOME-ARQ-CLASSIF) -> é parâmetro obrigatório e deve ser definido na “SD”;
2 - é obrigatório ao menos uma das opções “ASCENDING” ou “DESCENDING”;
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;
4 - A opção USING é necessária quando não existe processamento de entrada e o
(NOME-ARQUIVO-1) deve ser definido na “FD”;
5 - A opção GIVING é necessária quando não existir processamento de saída. O
(NOME-ARQUIVO-2) deve ser definido na “FD”;
6 - A opção INPUT PROCEDURE é necessária quando usar o processamento de
entrada:
-

é uma parte separada dentro da “PROCEDURE DIVISION”;

-

só pode ser referenciada pelo comando “SORT”;

-

deve conter pelo menos um comando “RELEASE”.

7 - A opção OUTPUT PROCEDURE é como a INPUT PROCEDURE:
-

é uma parte separada dentro da “PROCEDURE DIVISION”;

-

só pode ser referenciada pelo comando “SORT”;

-

deve conter pelo menos um comando “RETURN”.

10.4.1

INPUT PROCEDURE e OUTPUT PROCEDURE

IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
____________________________________________________________________________________________
Versão 1

94

Cobol
SELECT ARQENT

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSORT

ASSIGN

TO

UT-S-ARQSORT.

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

FD

SRT-REGISTRO.
03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

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

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

INPUT PROCEDURE CLASSIFICA
OUTPUT PROCEDURE CLASSIFICADO.
STOP RUN.

____________________________________________________________________________________________
Versão 1

95

Cobol
CLASSIFICA SECTION.
READ

ARQENT

AT END
CLOSE ARQENT
GO

TO

FIM-CLASSIFICA.

MOVE

ENT-TIPO

TO

SRT-TIPO

MOVE

ENT-CODIGO

TO

SRT-CODIGO

MOVE

ENT-NOME

TO

SRT-NOME

RELEASE SRT-REGISTRO
GO

TO

CLASSIFICA.

FIM-CLASSIFICA.
EXIT.
CLASSIFICADO SECTION.
RETURN ARQSORT

AT END
GO TO FIM-CLASSIFICADO.

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

10.4.2

USING e OUTPUT PROCEDURE

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

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSORT

ASSIGN

TO

UT-S-ARQSORT.

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

____________________________________________________________________________________________
Versão 1

96

Cobol
1

FD

SRT-REGISTRO.
03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

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
USING

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

ARQENT

OUTPUT PROCEDURE CLASSIFICADO.
STOP RUN.
..............
CLASSIFICADO SECTION.
RETURN ARQSORT

AT END
GO TO FIM-CLASSIFICADO.

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

____________________________________________________________________________________________
Versão 1

97

Cobol

-

O arquivo a ser utilizado na opção USING, deve ser
definido na FD;

-

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

10.4.3

INPUT PROCEDURE e GIVING

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

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSAI

ASSIGN

TO

UT-S-ARQSAI.

SELECT ARQSORT

ASSIGN

TO

UT-S-SORTWK01.

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

FD

SRT-REGISTRO.
03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

1

ENT-REGISTRO.
03

FILLER

PIC X(20).

03

ENT-TIPO

PIC X(02).

____________________________________________________________________________________________
Versão 1

98

Cobol

FD

03

FILLER

PIC X(01).

03

ENT-CODIGO

PIC 9(07) COMP-3.

03

FILLER

PIC X(10).

03

ENT-NOME

PIC X(30).

ARQSAI
LABEL STANDARD
RECORDING F
BLOCK 0.

01 SAI-REGISTRO.
03 FILLER

PIC X(36).

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

ARQENT

SORT ARQSORT

ASCENDING

KEY SRT-TIPO

DESCENDING

KEY SRT-CODIGO

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

ARQENT

AT END
CLOSE ARQENT
GO

TO

FIM-CLASSIFICA.

MOVE

ENT-TIPO

TO

SRT-TIPO

MOVE

ENT-CODIGO

TO

SRT-CODIGO

MOVE

ENT-NOME

TO

SRT-NOME

RELEASE SRT-REGISTRO
GO

TO

CLASSIFICA.

FIM-CLASSIFICA.
EXIT.

____________________________________________________________________________________________
Versão 1

99

Cobol

-

O arquivo a ser utilizado na opção GIVING, deve ser
definido na FD;

-

É obrigatório o arquivo utilizado na opção GIVING ter o
mesmo tamanho do arquivo do SORT;

-

Arquivos de tamanhos variáveis não devem ser sorteados
com

a

opção

GIVING,

mas

sim

pela

“OUTPUT

PROCEDURE”.

10.4.4

USING e GIVING

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

ASSIGN

TO

UT-S-ARQENT.

SELECT ARQSAI

ASSIGN

TO

UT-S-ARQSAI.

SELECT ARQSORT

ASSIGN

TO

UT-S-SORTWK01.

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

FD

03

SRT-TIPO

PIC X(02).

03

SRT-CODIGO

PIC 9(07) COMP-3.

03

SRT-NOME

PIC X(30).

ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.

1

ENT-REGISTRO.
03

FD

ENT-REG

PIC X(36).

ARQSAI
LABEL STANDARD

____________________________________________________________________________________________
Versão 1

100

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

Não se pode dar os comandos OPEN e CLOSE nos
arquivos que se utilizam da opção USING ou GIVING.

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

OBS: Exemplo de JCL para SORT com no máximo 6 SORTWK.
O SPACE pode ser um TRK ou CYL:
//SORTLIB

DD

DSN=SYS1.SORTILIB,DISP=SHR

//SORTWK01

DD

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

//SORTWK02

DD

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

____________________________________________________________________________________________
Versão 1

101

Cobol
//’’’’’’03’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’04’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’05’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’06’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

____________________________________________________________________________________________
Versão 1

102

Cobol

11.

OUTRAS CLÁUSULAS

11.1CLÁUSULA EXAMINE / INSPECT - REPLACING
A função desta cláusula é substituir um determinado caracter num item, por
outro determinado caracter. Semelhante a essa função, temos outra cláusula no
Cobol II, a cláusula INSPECT.

____________________________________________________________________________________________
Versão 1

103

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 número de vezes que um determinado caracter figura num item
(sendo possível substituir este caracter por um outro determinado caracter).

Os campos para o EXAMINE e INSPECT só podem estar /
ser zonados.

11.1.1

Regras para EXAMINE

1- Serve somente para campos numéricos zonados, alfabéticos e alfanuméricos;
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

104

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

3- No caso de ser usada a opção “REPLACING” (alterando):
-

com a opção “ALL”, cada LITERAL-1 (ou LITERAL-3) é substituído pela
LITERAL-2 (ou LITERAL-4);

-

com a opção “LEADING” a substituição pela LITERAL-2 (ou LITERAL-4)
termina no momento em que é encontrado um LITERAL-1(ou LITERAL-3);

-

com a opção “UNTIL FIRST” a substituição pelo LITERAL-2 (ou LITERAL-4)
termina no momento em que é encontrado um LITERAL-1 (ou LITERAL-3);

-

com a opção “FIRST”, a primeira LITERAL-1 (ou LITERAL-3) que aparecer, é
substituído pelo LITERAL-2 (ou LITERAL-4).

11.1.2

Exemplos de EXAMINE

- 1)
EXAMINE/INSPECT CAMPO-A REPLACING ALL ‘7’ BY ‘0’.
CAMPO-A antes = 44 75 72
CAMPO-A depois = 44 05 02
- 2)
EXAMINE/INSPECT IMPORTANCIA REPLACING LEADING ZEROS BY ‘2’.
IMPORTANCIA antes = 00 08 40
IMPORTANCIA antes = 22 28 40
- 3)
EXAMINE CAMPO-B RELACING UNTIL FIRST 5 BY ZERO.
CAMPO-B antes = 44 75 72
CAMPO-B depois = 00 05 72
- 4)
EXAMINE CAMPO-A REPLACING FIRST 7 BY ZERO.

____________________________________________________________________________________________
Versão 1

105

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

106

Cobol

O comando TRANSFORM é usado para transformação de
caracteres conforme uma regra de transformação. Por exemplo: os
caracteres de um campo podem ser transformados em uma outra
sequência.

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

11.2.1

(LITERAL NÃO NUMERICO-1)

(LITERAL NÃO NUMERICO-2)

(NOME-DADO-1)

(NOME-DADO-2)

Regras para o TRANSFORM

1- NOME-DADO-3 -> tem que ser um item elementar alfabético, alfanumérico ou um
item de grupo com um comprimento fixo com menos de 257 bytes;
2- A regra de transformação é estabelecida por combinação da opção “FROM” e
“TO”;

3- Para os operandos da opção “FROM” e “TO” valem as seguintes regras:
-

literais não numéricas devem estar sempre entre “apóstrofes”;

-

na LITERAL-NÃO-NUMERICA ou NOME-DADO-1, o mesmo caracter não
pode figurar mais de uma vez, se for repetido o resultado não é previsível;
são permitidos como constantes figurativas: zeros, spaces, quotes, high-

-

values, low-values.

11.2.2

Exempos de TRANSFORM

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

____________________________________________________________________________________________
Versão 1

107

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

O EXHIBIT tem a finalidade de mostrar o conteúdo dos
campos.

Formato:
EXHIBIT NAMED

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

CHANGED NAMED (LITERAL NÃO NUMERICA)
CHANGED

____________________________________________________________________________________________
Versão 1

108

Cobol
- NAMED -> imprime / mostra o conteúdo do campo todas as vezes que passar pelo
EXHIBIT;
- CHANGED NAMED -> imprime / mostra o conteúdo do campo somente na troca de
valores;
- CHANGED -> imprime / mostra o conteúdo dos campos somente na troca de
valores em forma de colunas.

-

O EXHIBIT não pode ser utilizado para contadores
especiais;

-

O EXHIBIT mostra o nome do campo e em seguida o seu
conteúdo.

Exemplos:

EXHIBIT NAMED

CAMPO-A.

EXHIBIT CHANGED NAMED

CAMPO-A.

EXHIBIT CHANGED

CAMPO-A.

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

11.4CLÁUSULA READY/RESET (TRACE)

O READY tem a finalidade de mostrar os passos do
programa assinalando os parágrafos pelo qual já passou.

____________________________________________________________________________________________
Versão 1

109

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.
Caso ocorra um ABEND, os últimos parágrafos que antecederam o ABEND,
podem não aparecerem.

11.5CLÁUSULA STRING
Formato:
STRING
INTO

IDENT-1

IDENT-2...

DELIMITED BY SIZE

IDENT-7

COMANDO-IMPERATIVO

ON OVERFLOW

____________________________________________________________________________________________
Versão 1

110

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.

Os campos emissores podem ser colocados em qualquer
lugar e em qualquer ordem na DATA DIVISION. A ordem na qual
eles são nomeados governa a ordem da transferência de dados.
Se ON OVERFLOW não estiver especificado, o próximo
comando seguinte ao comando STRING é executado.
Quando o(s) campo(s) emissor(es) for menor que os
campos receptores, estes não são completados com brancos como
é comum no comando MOVE.

11.5.1

Regras para STRING

1- Todos os identificadores devem ser descritos como USAGE IS DISPLAY;
2- O identificador receptor (IDENT-7) deve ser um item de dados elementar sem
nenhum símbolo de edição;
3- A frase DELIMITED BY SIZE é exigida e significa que a transferência de dados
para quando o campo receptor está cheio, isto é, quando encontra o campo
delimitador.

11.5.2

Exemplos de STRING

FD ARQENTRA
.........
.........
01 REG-ENTRA.
____________________________________________________________________________________________
Versão 1

111

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

03

LIN-DATA.

PIC X(20) VALUE SPACES.

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
03

REDEFINES

MÊS-EXT

TABELA-MESEXT.

PIC X(20) OCCURS 12 TIMES.

PROCEDURE DIVISION.
.............
____________________________________________________________________________________________
Versão 1

112

Cobol
MOVE DIA-HOJE
STRING

TO

LIN-DIA

MÊS-EXT (MÊS-HOJE) ANO-HOJE DELIMITED BY ‘*’
INTO

LIN-DATA-EXT.

O resultado acima será:
DATA-HOJE

=

LIN-DATA-EXT =

150897
15 DE AGOSTO DE 1997

ou
DATA-HOJE

=

LIN-DATA-EXT =

010497
01 DE ABRIL DE 1997

11.6CLÁUSULA UNSTRING
Formato:
UNSTRING

IDENT-1

INTO

COMANDO IMPERATIVO

IDENT-2

IDENT-3...

ON OVERFLOW

Na cláusula UNSTRING, os caracteres são transferidos dos campos
receptores (IDENT-2, IDENT-3, ETC) para o campo emissor (IDENT-1) da esquerda
para a direita.
O campo receptor ao qual foi dado o nome primeiro (IDENT-2) é
completamente preenchido com os caracteres mais a esquerda do campo emissor.
Então, o próximo campo emissor, este processo continua até que todos os campos
estejam cheios ou o campo emissor inteiro tenha sido transferido.

Os campos receptores podem ser colocados em qualquer
lugar e em qualquer ordem na DATA DIVISION.
A ordem na qual eles estão nomeados governa a ordem da
transferência de dados.

____________________________________________________________________________________________
Versão 1

113

Cobol

11.6.1

Regras para UNSTRING

1- O campo emissor (IDENT-1) deve ser alfanumérico;
2- Os campos receptores (IDENT-2, IDENT-3, etc) devem ser descritos como
USAGE IS DISPLAY;
3- Os campos receptores podem ser alfabéticos, numéricos ou alfanuméricos.

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

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

IF

TIPO EQUAL 1
MOVE +010

TO RETURN-CODE

____________________________________________________________________________________________
Versão 1

114

Cobol
CLOSE ARQTESTE
STOP RUN.

Deve-se procurar enviar o RETURN-CODE valorizado
sempre ao final do processamento, isto é, antes do STOP RUN ou
GOBACK.

11.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.
READ ARQTESTE

AT END
CLOSE ARQTESTE
STOP RUN.

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

115

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.

Alguns exemplos de operações de I/O que podem ser
testadas o FILE STATUS:
-

OPEN

-

START

-

WRITE

-

READ

-

REWRITE

-

CLOSE

Exemplo:
IDENTIFICATION DIVISION.
.............
ENVIRONMENT DIVISION.
............
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.

..........
____________________________________________________________________________________________
Versão 1

116

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

MOVE ‘ARQ-OUT’

TO

WS-ARQUIVO

GO TO DISPLAY-ERROS.
FIM-INICIO.
EXIT.
PROCESSA SECTION.
READ ARQ-IN.
____________________________________________________________________________________________
Versão 1

117

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

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.

É aconselhável que se teste a STATUS KEY após cada
operação de I/O.
Se um valor diferente de zero for encontrado, o correto será
terminar o programa e corrigir o erro. Se outra medida for tomada,
é provável que ocorra um abend em uma outra instrução.

____________________________________________________________________________________________
Versão 1

118

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

____________________________________________________________________________________________
Versão 1

119

Cobol

____________________________________________________________________________________________
Versão 1

120

Cobol

12.

Exercícios

12.1Programa 1
12.1.1

Nome do programa

EXERC001

12.1.2

Arquivos utilizados neste programa:

Entrada = CADASTRO e MOVIMENTO
Saída = CADATU e RELINCL

MOVI

CADAS

MENT

TRO

PARM

O

EXERC001

DD/MM/AAAA

CAD
ATU

RELINCL

____________________________________________________________________________________________
Versão 1

121

Cobol

12.1.1

Layout dos arquivos

Arquivo CADASTRO, MOVIMENTO e CADATU – tamanho de 60 bytes:

AGENCIA

CONTA

DÍGITO

NOME

VALOR

Numérico

Numérico

Alfanum. Alfanumérico

Num. Compactado

Tam. 04

Tam. 06

Tam. 01

Tam. 15 inteiros,

Tam. 40

2 decimais, com sinal
Relatório RELINCL:

12.1.2

Procedimentos:

1) Ler os arquivos de entrada CADASTRO e MOVIMENTO.
2) Processar até o final dos arquivos de entrada
2.1) Efetuar comparação das chaves (AGENCIA, CONTA e DÍGITO)
Se existir registro correspondente no CADASTRO e no MOVIMENTO
Mover o VALOR do MOVIMENTO no CADASTRO
Gravar CADATU com base no CADASTRO
Senão
Se existir apenas o registro no CADASTRO
Gravar CADATU com base no CADASTRO
Senão
Se existir apenas o registro no MOVIMENTO
Gravar CADATU com base no MOVIMENTO
Imprimir registro MOVIMENTO no relatório de incluídos (RELINCL).

____________________________________________________________________________________________
Versão 1

122

Cobol
3) A data do relatório é a data recebida no parm, no formato DD/MM/AAAA.

____________________________________________________________________________________________
Versão 1

123

Sign up to vote on this title
UsefulNot useful