156
COBOL COBOL Participante : ___________________________________ Participante : ___________________________________ ________________________________________________________________________________________ ___ Versão 1 1

Cobol - Politec

  • Upload
    liags

  • View
    938

  • Download
    9

Embed Size (px)

DESCRIPTION

common business-oriented language

Citation preview

Page 1: Cobol - Politec

COBOLCOBOL

Participante : ___________________________________Participante : ___________________________________

Treinamento: ___________________________________Treinamento: ___________________________________

Período : ___________________________________Período : ___________________________________

Sala : ____________Horário: _______________ Sala : ____________Horário: _______________

Instrutores :____________________________________

____________________________________

____________________________________________________________________________________________

Versão 1 1

Page 2: Cobol - Politec

Cobol

1 LEGENDA DOS COMPONENTES ORIENTATIVOS...........................................................................5

2 INTRODUÇÃO...................................................................................................................................... 6

2.1 SISTEMA OPERACIONAL................................................................................................................6

2.2 PROGRAMAS.................................................................................................................................... 6

2.3 COMPILAÇÃO................................................................................................................................... 7

3 O QUE É COBOL?.............................................................................................................................. 8

3.1 COMO EDITAR UM PROGRAMA.....................................................................................................8

3.2 COMENTÁRIOS NUM PROGRAMA.................................................................................................9

3.3 PALAVRAS........................................................................................................................................ 9

3.4 CARACTERES................................................................................................................................. 10

3.5 ESTRUTURA DA LINGUAGEM......................................................................................................11

4 IDENTIFICATION DIVISION...............................................................................................................15

5 ENVIRONMENT DIVISION.................................................................................................................17

5.1 CONFIGURATION SECTION..........................................................................................................17

5.2 INPUT-OUTPUT SECTION..............................................................................................................18

6. DATA DIVISION................................................................................................................................. 21

6.1 FILE SECTION................................................................................................................................. 21

6.2 WORKING-STORAGE SECTION....................................................................................................28

6.3 LINKAGE SECTION........................................................................................................................ 31

7 PROCEDURE DIVISION.....................................................................................................................34

7.1 CLÁUSULA OPEN........................................................................................................................... 34

7.2 CLÁUSULA READ........................................................................................................................... 34

7.3 CLÁUSULA WRITE......................................................................................................................... 35

7.4 CLÁUSULA CLOSE........................................................................................................................ 38

7.5 CLÁUSULA STOP RUN..................................................................................................................38

7.6 CLÁUSULA GOBACK.....................................................................................................................38

7.7 CLÁUSULA GO TO......................................................................................................................... 39

7.8 CLÁUSULA MOVE.......................................................................................................................... 39

7.8.1 CLÁUSULA OF NO COMANDO MOVE.......................................................................................41

7.9 CLÁUSULA ADD............................................................................................................................. 42

7.9.1 OPÇÃO ROUNDED...................................................................................................................... 45

7.9.2 OPÇÃO ON SIZE ERROR............................................................................................................45

7.10 CLÁUSULA SUBTRACT...............................................................................................................46

7.11 CLÁUSULA MULTIPLY (MULTIPLICAÇÃO)................................................................................48

7.12 CLÁUSULA DIVIDE (DIVISÃO).....................................................................................................49

7.13 CLÁUSULA COMPUTE.................................................................................................................51

7.14 CLÁUSULA DISPLAY................................................................................................................... 52

7.15 CLÁUSULA ACCEPT.................................................................................................................... 53

7.16 CLÁUSULA IF................................................................................................................................ 54

7.17 CLÁUSULA PERFORM.................................................................................................................60

7.18 CLÁUSULA EXIT........................................................................................................................... 66

____________________________________________________________________________________________

Versão 1 2

Page 3: Cobol - Politec

Cobol

7.19 CLÁUSULA (BLANK WHEN ZERO).............................................................................................67

7.20 CLÁUSULA (SYNCHRONIZED – SYNC)......................................................................................67

7.21 OPERADORES LÓGICOS.............................................................................................................69

7.22 DATA E HORA DO SISTEMA.......................................................................................................70

8 ARQUIVOS DE ACESSO DIRETO.....................................................................................................74

8.1 UTILIZANDO ACESSO DIRETO – LEITURA SEQUENCIAL.........................................................75

9 TABELAS............................................................................................................................................ 81

9.1 CLÁUSULA OCCURS.....................................................................................................................81

9.2 TABELA SUBSCRITA..................................................................................................................... 82

9.3 CLÁUSULA SET.............................................................................................................................. 84

9.4 CLÁUSULA SEARCH...................................................................................................................... 85

9.5 TABELA INDEXADA....................................................................................................................... 87

10 CLASSIFICAÇÃO DE DADOS.........................................................................................................91

10.1 CLÁUSULA SELECT (SORT).......................................................................................................92

10.2 CLÁUSULA RELEASE.................................................................................................................. 93

10.3 CLÁUSULA RETURN....................................................................................................................94

10.4 CLÁUSULA SORT......................................................................................................................... 94

11 OUTRAS CLÁUSULAS.................................................................................................................. 105

11.1CLÁUSULA EXAMINE / INSPECT - REPLACING.......................................................................105

11.2 CLÁUSULA TRANSFORM..........................................................................................................108

11.3 CLÁUSULA EXHIBIT................................................................................................................... 110

11.4 CLÁUSULA READY/RESET (TRACE)........................................................................................111

11.5 CLÁUSULA STRING...................................................................................................................112

11.6 CLÁUSULA UNSTRING..............................................................................................................115

11.7 RETURN-CODE........................................................................................................................... 116

11.8 ABENDAR PROGRAMA.............................................................................................................117

11.9 FILE STATUS.............................................................................................................................. 117

12 EXERCÍCIOS.................................................................................................................................. 123

12.1 PROGRAMA 1............................................................................................................................. 123

1. Legenda dos Componentes Orientativos.

____________________________________________________________________________________________

Versão 1 3

Page 4: Cobol - Politec

Cobol

DICA

LEIA

TOME NOTA

ATENÇÃO

CURIOSIDADE

____________________________________________________________________________________________

Versão 1 4

Page 5: Cobol - Politec

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 5

Page 6: Cobol - Politec

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 6

Page 7: Cobol - Politec

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 7

Page 8: Cobol - Politec

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:

ZEROS, ZERO, ZEROES valor zero

____________________________________________________________________________________________

Versão 1 8

Page 9: Cobol - Politec

Cobol

SPACE, SPACES valor brancos

QUOTE, QUOTES apóstrofe

ALL ‘LITERAL’ um ou mais ocorrências de literal

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

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

3.3.2 Palavras opcionais

Seu uso é opcional:

Exemplo:

IF CPO-A IS GREATER THAN 10

é igual a IF CPO-A GREATER 10

logo IS e THAN são opcionais.

3.3.3 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;

- Seções;

____________________________________________________________________________________________

Versão 1 9

Page 10: Cobol - Politec

Cobol

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

3.5.5 Programa Cobol

____________________________________________________________________________________________

Versão 1 10

divisões

Page 11: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 11

seções

parágrafos

sentenças

comandos cláusulas

Page 12: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 12

Page 13: Cobol - Politec

Cobol

4. IDENTIFICATION DIVISION

Identifica o programa fonte (informação obrigatória), e

outras informações como autor, instalação, etc.

____________________________________________________________________________________________

Versão 1 13

Page 14: Cobol - Politec

Cobol

É 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 IDENTIFICATION DIVISION. 000002 PROGRAM-ID. DEMPB012. 000003 AUTHOR. ANA PAULA NUNES. 000004 INSTALLATION. SAO-CENTRO. 000005 DATE-WRITTEN. 03/08/1997. 000006 DATE-COMPILED.000007 SECURITY. ESTE PROGRAMA UTILIZA ARQUIVOS DE BACK-UP COMO 000008 SEGURANCA. 000009 REMARKS. O PROGRAMA EMITE RELATORIO A PARTIR DO ARQUIVO P-112. 000010

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

____________________________________________________________________________________________

Versão 1 14

Page 15: Cobol - Politec

Cobol

5. ENVIRONMENT DIVISION

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

____________________________________________________________________________________________

Versão 1 15

Page 16: Cobol - Politec

Cobol

É a segunda divisão do Cobol.

Identifica a máquina que está sendo usada. Contém a descrição do

computador e a designação dos arquivos para as respectivas unidades de

configuração do computador.

É dividida em duas seções:

- CONFIGURATION SECTION;

- INPUT-OUTPUT SECTION.

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.

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.

____________________________________________________________________________________________

Versão 1 16

Page 17: Cobol - Politec

Cobol

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

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)

____________________________________________________________________________________________

Versão 1 17

Page 18: Cobol - Politec

Cobol

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 18

Page 19: Cobol - Politec

Cobol

6. DATA DIVISION

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.

____________________________________________________________________________________________

Versão 1 19

Page 20: Cobol - Politec

Cobol

Caso alguma não seja necessária, deve ser omitida:

1 – FILE SECTION.

2 – WORKING-STORAGE SECTION.

3 – LINKAGE SECTION.

4 – COMMUNICATION SECTION (estabelece ligações entre o programa cobol

e programa de controle de teleprocessamento).

5 – REPORT SECTION (descreve relatório que o programa deve emitir).

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.

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 PIC X(02). 03 RESTO PIC X(05). 02 NUMERO PIC 9(03). 02 FILLER PIC X(50).

(FD) indicador

____________________________________________________________________________________________

Versão 1 20

Page 21: Cobol - Politec

Cobol

(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:

01 WRK-REG.

02 WRK-SEXO PIC X(01).

88 FEMI VALUE ‘F’.

88 MASC VALUE ‘M’.

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

____________________________________________________________________________________________

Versão 1 21

Page 22: Cobol - Politec

Cobol

Formato:

FD NOME-DO-ARQUIVO

BLOCK CONTAINS (quantidade de blocos)

RECORD CONTAINS (tamanho do registro lógico)

RECORDING MODE (formato do arquivo)

LABEL RECORD (formato do label)

DATA RECORD (nome do registro).

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)

Designa o formato do arquivo:

- (F) -> comprimento fixo

- (V) -> comprimento variável

- (U) -> indefinido

- (S) -> estendido (spanned)

Se não for colocada a cláusula “RECORDING MODE”, o compilador

determinará pelo cartão “DD” ou catálogo.

____________________________________________________________________________________________

Versão 1 22

Page 23: Cobol - Politec

Cobol

Para arquivos sequenciais usar : F, V ou S;

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

6.1.2.4 LABEL RECORD

(LABEL RECORD IS XXXXXXXX)

Especifica o formato do label.

Quando omitido assume “LABEL STANDARD”.

- STANDARD -> 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 DATA RECORD IS RECIBO.

01 RECIBO. 02 NOME PIC X(30). 02 VALOR PIC 9(03)V9(02). 02 FILLER PIC X(05).

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

____________________________________________________________________________________________

Versão 1 23

Page 24: Cobol - Politec

Cobol

Picture possíveis:

- ALFABÉTICO -> é representado por letras mais o espaço, e o carácter

usado é a letra “A”.

Exemplos:

77 DADO1 PICTURE IS AAA VALUE ‘ABC’.

77 DADO2 PIC IS AAA VALUE ‘ABC’.

77 DADO3 PIC A(3) VALUE ‘BCD’.

- 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 VALUE ‘ANO’.

01 DADO2 PIC X(04) VALUE ‘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).

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

____________________________________________________________________________________________

Versão 1 24

Page 25: Cobol - Politec

Cobol

(9), (V), (P) -> são usados de maneira semelhante ao uso dos itens numéricos;

(.) -> o ponto decimal, quando usado, é inserido na posição indicada;

(Z) -> indica a supressão de zeros não significativos;

(*) -> é usado como proteção de um número impresso;

(CR), (DB) -> significam CR (crédito) e DB (débito). Usa-se somente quando o

número for negativo. Caso o número seja positivo, não aparecerá nada;

(,), (0), (B) -> são símbolos de edição que são inseridos na impressão;

($), (+), (-) -> são impressos na posição indicada.

OBS: O símbolo (-) não dever ser o próximo sinal após o ponto. Caso isso

ocorrer, definir mais um (-). Exemplo:

01 CAMPO PIC --.---.---,99.

Definição Picture Valor Real Na memória

9(04) 9999 502 5029V9(2) 9V99 1,25 1259(03) 999PP 43700 437S9(02) S99 -21 21-9(05) 99.999 10.987 109879(04)V99 Z.ZZZ,99 25,50 0025509(03) ZZZ 0009(03) **9 422 4229(03) *** *** 000S9(03)V99 999,99CR 800,00CR 80000(-)9(04) 990099 110025 11259(06) 99B99B99 12 13 15 1213159(03) $999 $371 371S9(02) -99 -15 15(-)S9(02) -99 16 16 S9(02) +99 15 15(-)S9(02) +99 +16 16(+)S9(02) 99- 15- 15(-)S9(04) -.--9 -12 0012(-)

____________________________________________________________________________________________

Versão 1 25

Page 26: Cobol - Politec

Cobol

OBS: caso tenha que utilizar o caracter ‘, para se fazer entendido ao Cobol, define-se dentro das aspas duplas.

Exemplo:

77 ASPA PIC X(01) VALUE “ ’ ”.

6.1.4 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 FILLER PIC X(100).

6.1.5 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:

01 CABEC.

02 FILLER PIC X(10) VALUE SPACES.

02 FILLER PIC X(06) VALUE ‘FOLHAS’.

02 DATA PIC X(10) VALUE SPACES.

6.2 WORKING-STORAGE SECTION

Esta seção descreve informações sobre as áreas de

trabalho, descrição de tabelas, área para DB2, lay-out, etc.

____________________________________________________________________________________________

Versão 1 26

Page 27: Cobol - Politec

Cobol

6.2.1 OPÇÃO COMPUTATIONAL (COMP)

Só podem ser usados para itens numéricos (COMP, COMP-1, COMP-2,

COMP-3, COMP-4).

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.

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:

____________________________________________________________________________________________

Versão 1 27

Page 28: Cobol - Politec

Cobol

01 DADOS PIC X(10) JUSTIFIED RIGHT.

01 DADOS PIC X(10) JUST RIGHT.

MOVE CAMPOX TO DADOS

CAMPOX = JOAO DADOS =40 40 40 40 40 40 D1 D6 C1 D6

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

01 REGISTRO.

03 ALPINO PIC X(06).

03 BETA.

05 LETRA PIC X(04).

05 NUM PIC 9(02).

03 ALFA REDEFINES BETA.

05 AUT PIC 9(01).

05 LIVRE PIC X(05).

03 ZUM PIC X(08).

6.2.4 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

____________________________________________________________________________________________

Versão 1 28

Page 29: Cobol - Politec

Cobol

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

- 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 TAMANHO PIC 9(04) COMP.

03 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

____________________________________________________________________________________________

Versão 1 29

Page 30: Cobol - Politec

Cobol

“LINKAGE” na “WORKING-STORAGE”, sendo obrigatório os campos a

serem passados, estarem na mesma ordem do programa chamado.

- No exemplo acima, os dados serão jogados do “PARM” para

“PARAMETROS” após a cláusula “PROCEDURE DIVISION USING

PARAMETROS”.

____________________________________________________________________________________________

Versão 1 30

Page 31: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 31

Page 32: Cobol - Politec

Cobol

7. PROCEDURE DIVISION

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.

____________________________________________________________________________________________

Versão 1 32

Page 33: Cobol - Politec

Cobol

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.

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.

____________________________________________________________________________________________

Versão 1 33

Page 34: Cobol - Politec

Cobol

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.

01 AREA-1.

XXXXXXXXXXXX

7.3.1 OPÇÃO ADVANCING

C01 até C09 Salto do canal 1 até 9

C10 até C12 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 AFTER ADVANCING CANAL-1.

WRITE RELATORIO FROM LIN-DET1 AFTER ADVANCING 2 LINES.

7.3.2 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:

____________________________________________________________________________________________

Versão 1 34

Page 35: Cobol - Politec

Cobol

FD IMPRESSAO

LABEL OMITTED

RECORDING F

BLOCK 0.

01 RELATORIO.

02 CARRO PIC X(01).

02 FILLER PIC X(132).

WORKING-STORAGE SECTION.

01 CABEC1.

02 FILLER PIC X(01) VALUE ‘1’.

02 DATA PIC X(10) VALUE SPACES.

02 FILLER PIC X(40) VALUE SPACES.

02 FILLER PIC X(30) VALUE

‘PROGRAMA DE INCLUSAO DE TITULOS’.

02 FILLER PIC X(44) VALUE SPACES.

02 HORA PIC X(08) VALUE SPACES.

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

PROCEDURE DIVISION

.........

WRITE RELATORIO FROM CABEC1 AFTER POSITIONING CARRO.

WRITE RELATORIO FROM CABEC1 AFTER POSITIONING 2 LINES.

WRITE RELATORIO FROM CABEC1.

Branco ‘ ‘ Espacejamento simples

Zero ‘0’ Espacejamento duplo

Menos ‘-‘ Espacejamento triplo

Mais ‘+’ Supressão do espacejamento

‘1’ a ‘9’ Salto do canal 1 a 9

‘A’, ‘B’, ‘C’ Salto do canal 10, 11 e 12

____________________________________________________________________________________________

Versão 1 35

Page 36: Cobol - Politec

Cobol

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

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.

____________________________________________________________________________________________

Versão 1 36

Page 37: Cobol - Politec

Cobol

Formato:

GOBACK.

Exemplo:

IDENTIFICATION DIVISION.

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

LINKAGE SECTION.

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

PROCEDURE DIVISION.

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

GOBACK.

7.7 CLÁUSULA GO TO

Permite a transferência da parte do programa que está sendo executada para

uma outra.

Formato:

LEITURA.

......... AT END

GO TO FIM-LEITURA.

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

FIM-LEITURA.

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.

____________________________________________________________________________________________

Versão 1 37

Page 38: Cobol - Politec

Cobol

Formato 1:

MOVE (CAMPO-1) TO (CAMPO-2) (CAMPO-3)

Exemplo:

WORKING-STORAGE SECTION.

01 DADO-A PIC X(05) VALUE ‘ABC’.

01 DADO-2 PIC X(05).

01 DADO-3 PIC X(05) VALUE SPACES.

01 DADO-4 PIC X(05).

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

PROCEDURE DIVISION.

MOVE DADO-A TO DADO-2.

MOVE DADO-A TO DADO-3 DADO-4.

Formato 2:

MOVE CORRESPONDING (CAMPO-1) TO (CAMPO2)

MOVE CORR (CAMPO-1) TO (CAMPO2)

O MOVE CORRESPONDING ou MOVE CORR movimenta dados entre itens

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

correspondentes.

Exemplo:

WORKING-STORAGE SECTION.

01 CAMPO-1.

03 NOME PIC X(05).

03 ENDER PIC X(10).

01 CAMPO-2.

03 ENDER PIC X(10).

03 NOME PIC X(05).

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

PROCEDURE DIVISION.

MOVE CORR CAMPO-1 TO CAMPO-2.

____________________________________________________________________________________________

Versão 1 38

Page 39: Cobol - Politec

Cobol

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’ TO WS-CABEC1 CABEC2.

7.8.1 CLÁUSULA OF no COMANDO MOVE

Usa-se esta cláusula para campos com nomes iguais, definidos em itens de

grupo com nomes diferentes.

Formato:

MOVE WS-MES TO MES OF REGISTRO-1.

Exemplo:

WORKING-STORAGE SECTION.

01 TABELA-1.

03 NOME PIC X(05).

03 ENDER PIC X(10).

01 TABELA-2.

03 ENDER PIC X(10).

03 NOME PIC X(05).

01 SELECIONADO PIC X(10).

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

PROCEDURE DIVISION.

MOVE ENDER OF TABELA-2 TO SELECIONADO

MOVE SELECIONADO TO ENDER OF TABELA-1.

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

____________________________________________________________________________________________

Versão 1 39

Page 40: Cobol - Politec

Cobol

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.

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.

____________________________________________________________________________________________

Versão 1 40

Page 41: Cobol - Politec

Cobol

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

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 (IDENT-1) TO (IDENT-2)

ADD CORR (IDENT-1) 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:

01 CAMPO-1.

03 A PIC 9(03)V(02).

03 B PIC 9(04).

01 CAMPO-2.

____________________________________________________________________________________________

Versão 1 41

Page 42: Cobol - Politec

Cobol

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.

ADD A B TO C D.

(Cálculo 1 = A + B + C = S1 / Cálculo 2 = A + B + D = S2

C = S1 = 6 / D = S2 = 7)

ADD A TO B.

(A + B = S1 / B = S1 = 3)

ADD A C GIVING D

(A + C = S1 / D = S1 = 4)

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

____________________________________________________________________________________________

Versão 1 42

Page 43: Cobol - Politec

Cobol

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:

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.

____________________________________________________________________________________________

Versão 1 43

Page 44: Cobol - Politec

Cobol

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) (IDENT-2) ....

FROM (IDENT-M) ROUNDED (IDENT-N)

ON SIZE ERROR (SENTENÇA IMPERATIVA).

Formato 3:

SUBTRACT (IDENT-1) (IDENT-2) FROM (IDENT-M)

GIVING (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:

____________________________________________________________________________________________

Versão 1 44

Page 45: Cobol - Politec

Cobol

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:

01 A.

02 B PIC 9(04).

02 C PIC 99.

01 D.

02 B PIC 9(04).

02 C PIC 99.

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)

____________________________________________________________________________________________

Versão 1 45

Page 46: Cobol - Politec

Cobol

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.

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)

____________________________________________________________________________________________

Versão 1 46

Page 47: Cobol - Politec

Cobol

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:

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

____________________________________________________________________________________________

Versão 1 47

Page 48: Cobol - Politec

Cobol

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-2) GIVING

(IDENT-3) ROUNDED REMAINDER (IDENT-4).

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 C REMAINDER D.

DIVIDE A BY B REMAINDER C.

DIVIDE A BY B GIVING C REMAINDER D.

7.13CLÁUSULA COMPUTE

____________________________________________________________________________________________

Versão 1 48

Page 49: Cobol - Politec

Cobol

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.

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

____________________________________________________________________________________________

Versão 1 49

Page 50: Cobol - Politec

Cobol

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) EQUAL (CAMPO2 * 2) / 4

MOVE CAMPO TO SAI-CAMPO.

As operações aritméticas seguem a sua hierarquia, exceto quando estiverem

entre parênteses.

7.14CLÁUSULA DISPLAY

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:

____________________________________________________________________________________________

Versão 1 50

Page 51: Cobol - Politec

Cobol

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

(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 FROM CONSOLE.

01 DATA-DO-DIA.

03 DIA PIC 9(02).

03 FILLER PIC X(01).

____________________________________________________________________________________________

Versão 1 51

Page 52: Cobol - Politec

Cobol

03 MES PIC 9(02).

03 FILLER PIC X(01).

03 ANO PIC 9(04).

Ou

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

Exemplo:

01 REG-CAD.

03 CAD-NOME PIC X(40).

03 CAD-DATA PIC 9(08).

..........

ACCEPT REG-CAD FROM SYSIN.

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

O “SYSIN” é utilizado para pegar dados de um arquivo “SYSIN DD”.

//........

//SYSIN DD *

ARQUIVODT4573

Ou

//SYSIN DD DSN=V.POOL.ARQDATA(0),DISP=SHR

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

____________________________________________________________________________________________

Versão 1 52

Page 53: Cobol - Politec

Cobol

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

IF RENDIMENTO EQUAL 1000,00 OR GREATER 1000,00

GO TO DESCONTO-MAX

ELSE

GO TO DESCONTO-MIN.

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 IS NEGATIVE

GO TO FIM-ROTINA

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.

____________________________________________________________________________________________

Versão 1 53

Page 54: Cobol - Politec

Cobol

O “NEXT SENTENCE” determina que nada será feito e

deve-se continuar o processo após o primeiro ponto final ou “END-

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

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 NUMERIC

COMPUTE SALDO = SALDO-TOTAL – TAXAS

ELSE

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

____________________________________________________________________________________________

Versão 1 54

Page 55: Cobol - Politec

Cobol

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

01 CAMPO S9(07) COMP-3.

7.16.2 TESTE DE NOME-DE-CONDIÇÃO

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

Definição:

01 WS-AREA.

03 NOME PIC X(30).

03 CODIGO PIC 9(06).

03 STATUS PIC 9(01).

88 HOMEM VALUE 1.

88 MULHER VALUE 2.

88 ERRO VALUE 3 THRU 9.

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

PROCEDURE DIVISION.

IF HOMEM

GO TO PROCED-HOMEM.

IF MULHER

GO TO PROCED-MULHER.

IF ERRO

GO TO PROCED-ERRO.

7.16.3 TESTE DE CONDIÇÃO DE RELAÇÃO

Efetua comparação entre dois (2) operandos.

____________________________________________________________________________________________

Versão 1 55

Page 56: Cobol - Politec

Cobol

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 SIGNIFICADO

IS (NOT) GREATER (THAN)

IS (NOT) >

MAIOR QUE OU NÃO MAIOR QUE

IS (NOT) LESS (THAN)

IS (NOT) <

MENOR QUE OU NÃO MENOR QUE

IS (NOT) EQUAL TO

IS (NOT) =

IGUAL OU NÃO IGUAL

Exemplos:

IF AC-LINHA GREATER 50

GO TO ROTINA-CABECALHO.

IF CODIGO = 2

MOVE CODIGO TO REG-CODIGO.

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

____________________________________________________________________________________________

Versão 1 56

Page 57: Cobol - Politec

Cobol

MOVE VALOR TO SAI-VALOR

ADD VALOR TO AC-VALOR.

Exemplo 1 cláusula IF:

IF NUMERO GREATER THAN B ** 2 – 1

NEXT SENTENCE

ELSE

GO TO ROT-MOVIMENTA.

IF NUM-2 IS NEGATIVE

GO TO ERRO.

IF VALOR – 3 EQUAL SALDO

MOVE SALDO TO SALDO-SAIDA.

Exemplo 2 cláusula IF:

IF VALOR IS NUMERIC

IF VALOR IS ZEROS

IF DADO IS NEGATIVE

MOVE ‘CAMPO VALIDO’ TO MENSAGEM

ELSE

GO TO ROT-LEITURA

ELSE

NEXT SENTENCE

ELSE

GO TO INICIO.

7.17CLÁUSULA PERFORM

____________________________________________________________________________________________

Versão 1 57

Page 58: Cobol - Politec

Cobol

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 FIM-ROT-ABC.

MOVE A TO B

STOP RUN.

.....

ROT-ABC.

MOVE CAMPO-1 TO SAI-CAMPO

COMPUTE SAI-VALOR = (B * 2)

FIM-ROT-ABC.

ROT-DEF.

COMPUTE .....

FIM-ROT-DEF.

Podemos ter um PERFORM dentro de outro PERFORM:

INICIO.

____________________________________________________________________________________________

Versão 1 58

Page 59: Cobol - Politec

Cobol

PERFORM ROT-A THRU ROT-C.

..........

ROT-A.

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

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

ROT-B.

PERFORM ROT-D TRHU ROT-E.

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.

00-00-A.

MOVE 1 TO AC-VALOR.

PERFORM 10-LEITURA-CARTAO.

IF CHAVE-FIM EQUAL ‘NAO’

GO TO 00-00-A.

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

00-99-FIM.

EXIT.

____________________________________________________________________________________________

Versão 1 59

Page 60: Cobol - Politec

Cobol

10-LEITURA-CARTAO SECTION.

READ REGCAD AT END

MOVE ‘FIM’ TO CHAVE-FIM

GO TO 10-99-FIM.

ADD 1 TO AC-LIDOS.

IF TIPO EQUAL 4

PERFORM 15-TIPO-4.

10-99-FIM.

EXIT.

15-TIPO-4 SECTION.

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

15-99-FIM.

EXIT.

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)

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

____________________________________________________________________________________________

Versão 1 60

Page 61: Cobol - Politec

Cobol

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

comando “PERFORM” que conter a opção “TIMES”, não será executado e o

processamento continuará após o “PERFORM”.

Exemplo:

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.

7.17.2 PERFORM – UNTIL

____________________________________________________________________________________________

Versão 1 61

Page 62: Cobol - Politec

Cobol

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) THRU (NOME-ROTINA-2)

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

7.17.3 PERFORM – VARYING

Formato:

____________________________________________________________________________________________

Versão 1 62

Page 63: Cobol - Politec

Cobol

PERFORM (NOME-PROC-1) THRU (NOME-PROC-2)

VARYING (NOME-DADO-1)

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

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

UNTIL (CONDIÇÃO-1)

São executadas as seguintes etapas de operação:

1- “NOME-DADO-1” é colocado no valor inicial (FROM) pelo “LITERAL-NUMERICO-

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

01 TABELA.

02 VENDAS-PROD OCCURS 4 TIMES.

03 VALOR PIC 9(05).

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

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

PROCEDURE DIVISION.

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

PERFORM ZERA-TAB

VARYING INDICE

FROM 1 BY 1

UNTIL INDICE GREATER 4.

____________________________________________________________________________________________

Versão 1 63

Page 64: Cobol - Politec

Cobol

ZERA-TAB.

MOVE ZEROS TO VALOR(INDICE).

ZERA-FIM.

EXIT.

7.18CLÁUSULA EXIT

É um ponto comum de finalização para uma série de procedimento(s).

NOME-PARAGRAFO. EXIT.

A cláusula “EXIT” deve ser precedida por um nome de parágrafo e deve ser

única cláusula do parágrafo.

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.

Esta cláusula deve ser apenas para itens elementares numéricos ou numéricos

de edição.

Exemplo:

____________________________________________________________________________________________

Versão 1 64

Page 65: Cobol - Politec

Cobol

01 LINHA.

02 VALOR PIC 9(05) BLANK WHEN ZERO.

MOVE CAMPO-NUM TO 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:

01 REGISTRO.

02 NOME PIC X(20).

02 FILLER PIC X(01).

02 A PIC S9(07) COMP.

02 CODIGO PIC 9(02).

02 B PIC S9(04) COMP.

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

problema do alinhamento.

____________________________________________________________________________________________

Versão 1 65

Page 66: Cobol - Politec

Cobol

Exemplo:

01 REGISTRO.

02 NOME PIC X(20).

02 FILLER PIC X(01).

02 A PIC S9(07) COMP SYNC.

02 CODIGO PIC 9(02).

02 B PIC S9(04) COMP SYNC.

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

ADD 10 TO A B

SUBTRACT 5 FROM B.

7.21OPERADORES LÓGICOS

Existem no Cobol 3 (três) operadores lógicos:

OPERADOR LÓGICO SIGNIFICADO

OR Se ao menos um for

verdadeiro, o resultado

será verdadeiro.

AND Se todos forem

____________________________________________________________________________________________

Versão 1 66

Page 67: Cobol - Politec

Cobol

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 = 100,00 OR 200,00 OR 400,00

GO TO OK.

7.21.1 TESTES COMPOSTOS

Ocorre o teste composto, quando aparece os conectores lógicos no “IF”, como:

“AND”, “OR” ou “NOT”.

Exemplo:

IF NOME = SPACES AND ENDERECO = SPACES

GO TO CAMPOS-BRANCO

ELSE

IF CODIGO LESS 2 OR CODIGO-2 GREATER C

MOVE 1 TO INDICE.

IF (A LESS B GREATER D) AND

(B / 2 EQUAL E) OR

(F NOT EQUAL ZEROS)

GO TO MOVER-DADOS.

IF CAMPO IS NUMERIC AND

CAMPO LESS 500,00

NEXT SENTENCE

ELSE

____________________________________________________________________________________________

Versão 1 67

Page 68: Cobol - Politec

Cobol

MOVE CAMPO TO SAI-CAMPO.

IF (TAXA GREATER 70 AND LESS 100) OR

(CODMAT = ‘P’ OR ‘B’) AND

(FIRMACOD LESS 40)

NEXT SENTENCE

ELSE

GO TO CONFIRMA.

7.22DATA E HORA DO SISTEMA

Do sistema, pode-se obter:

- DATE = AAMMDD (6 bytes)

- DAY = AADDD (5 bytes) -> data juliana

- TIME = HHMMSSDD (8 bytes)

Exemplos:

ACCEPT CAMPO-DATA FROM DATE.

ACCEPT CAMPO-DIA FROM DAY.

ACCEPT CAMPO-HORA FROM TIME.

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

01 CAMPO-DATA PIC 9(06).

01 CAMPO-DIA PIC 9(05).

01 CAMPO-HORA PIC 9(08).

ou

01 CAMPO-DATA.

02 ANO PIC 9(02).

02 MÊS PIC 9(02).

02 DIA PIC 9(02).

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

____________________________________________________________________________________________

Versão 1 68

Page 69: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 69

Page 70: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 70

Page 71: Cobol - Politec

Cobol

8. ARQUIVOS DE ACESSO DIRETONa ENVIRONMENT DIVISION, definindo o arquivo:

FILE-CONTROL.

SELECT CADASTRO ASSIGN TO DA-I-DDCADAST

ACCESS MODE IS RANDOM

RECORD KEY IS CAD-CHAVE

NOMINAL KEY IS W-CHAVE.

ACCESS MODE IS RANDOM –> deve ser utilizado para

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

____________________________________________________________________________________________

Versão 1 71

Page 72: Cobol - Politec

Cobol

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

definido na “WORKING-STORAGE SECTION” no qual deve

ser movido a chave de pesquisa do arquivo.

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

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

FD CADASTRO

LABEL STANDARD

RECORDING F

RECORD 130

BLOCK 10 RECORDS.

01 REG-CADASTRO.

03 CAD-CHAVE PIC 9(06).

03 CAD-NOME PIC X(40).

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

WORKING-STORAGE SECTION.

01 W-CHAVE PIC 9(06) VALUE 2456.

8.1 UTILIZANDO ACESSO DIRETO – LEITURA SEQUENCIAL

FILE-CONTROL.

SELECT CADASTRO ASSIGN TO DA-I-DDCADAST

ACCESS MODE IS SEQUENTIAL

RECORD KEY IS CAD-CHAVE.

........

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

FD CADASTRO

LABEL STANDARD

RECORDING F

RECORD 130

____________________________________________________________________________________________

Versão 1 72

Page 73: Cobol - Politec

Cobol

BLOCK 10 RECORDS.

01 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:

READ (NOME-DO-ARQUIVO) INTO (AREA-IDENTIF)

____________________________________________________________________________________________

Versão 1 73

Page 74: Cobol - Politec

Cobol

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 TO WS-CHAVE. (->nominal-key)

READ CADASTRO.

IF WS-FS-CADASTRO 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:

REWRITE (NOME-DO-DADO, REGISTRO) FROM (AREA-IDENTIF)

____________________________________________________________________________________________

Versão 1 74

Page 75: Cobol - Politec

Cobol

INVALID KEY (SENTENÇA IMPERATIVA)

Exemplo:

MOVE CAR-CHAVE TO WS-CHAVE (-> nominal-key)

REWRITE 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 75

Page 76: Cobol - Politec

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

RECORDING F

BLOCK 20 RECORDS.

01 CAD-REGISTRO.

03 CAD-KEY.

05 CAD-CODIGO PIC X(02).

05 CAD-NUMERO PIC 9(04)

03 CAD-NOME PIC X(40).

03 CAD-ENDER PIC X(45).

03 CAD-IDADE PIC 9(02).

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

WORKING-STORAGE SECTION.

77 WS-KEY PIC X(06) VALUE ‘AB1437’.

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

PROCEDURE DIVISION.

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

START CADSEQUE

INVALID KEY

____________________________________________________________________________________________

Versão 1 76

Page 77: Cobol - Politec

Cobol

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 77

Page 78: Cobol - Politec

Cobol

9. TABELASAs 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 78

Page 79: Cobol - Politec

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:

01 TABELA-DE-MESES.

02 TAB-MESES.

03 FILLER PIC X(09) VALUE ‘JANEIRO’.

03 FILLER PIC X(09) VALUE ‘FEVEREIRO’.

03 FILLER PIC X(09) VALUE ‘MARCO’.

03 FILLER PIC X(09) VALUE ‘ABRIL’.

03 FILLER PIC X(09) VALUE ‘MAIO’.

03 FILLER PIC X(09) VALUE ‘JUNHO’.

03 FILLER PIC X(09) VALUE ‘JULHO’.

03 FILLER PIC X(09) VALUE ‘AGOSTO’.

03 FILLER PIC X(09) VALUE ‘SETEMBRO’.

03 FILLER PIC X(09) VALUE ‘OUTUBRO’.

03 FILLER PIC X(09) VALUE ‘NOVEMBRO’.

____________________________________________________________________________________________

Versão 1 79

Page 80: Cobol - Politec

Cobol

03 FILLER PIC X(09) VALUE ‘DEZEMBRO’.

02 TAB-MESES-R REDEFINES TAB-MESES OCCURS 12 TIMES.

03 MESES PIC X(09).

01 DATA-DIA.

02 DIA PIC 9(02).

02 FILLER PIC X(01).

02 MES PIC 9(02).

02 FILLER PIC X(01).

02 ANO PIC 9(04).

01 CABEC.

03 FILLER PIC X(28) VALUE

‘RELATORIO EMITIDO EM: ‘.

03 NOME-MÊS PIC X(09).

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

PROCEDURE DIVISION.

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

DISPLAY ‘TECLE DATA – FORMATO DD/MM/AAAA’ UPON CONSOLE.

ACCEPT DATA-DIA FROM CONSOLE.

MOVE MESES (MÊS) TO NOME-MÊS.

Exemplo 2:

WORKING-STORAGE SECTION.

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

77 IND PIC 9(02) COMP VALUE 0 SYNC.

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

01 LINHA-DETALHE.

02 FILLER PIC X(20)

VALUE ‘TOTAL DO ESTADO DE ‘.

02 ESTADO PIC X(15).

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

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

01 TABELA-ESTADO.

____________________________________________________________________________________________

Versão 1 80

Page 81: Cobol - Politec

Cobol

02 TAB.

03 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

ELSE

ADD 1 TO IND

IF IND = 24

GO TO ROT-ERRO

ELSE

GO TO LOOP-INICIO.

MOVE-ESTADO.

MOVE DESCRICAO(IND) TO ESTADO.

..........

____________________________________________________________________________________________

Versão 1 81

Page 82: Cobol - Politec

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 (NUM-INTEIRO)

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

SET INDEX-C INDEX-D TO INDEX-7.

____________________________________________________________________________________________

Versão 1 82

Page 83: Cobol - Politec

Cobol

SET INDEX-1 UP BY 1.

SET INDEX-8 DOWN 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 VARYING (IDENT-2) / (INDEX-1)

AT END (SENTENCA IMPERATIVA 1)

WHEN CONDICAO-1 (SENTENCA IMPERATIVA 2)

(NEXT SENTENCE)

WHEN CONDICAO-2 (SENTENCA IMPERATIVA 3)

(NEXT SENTENCE)

Formato 2:

SEARCH ALL IDENT-1

AT END (SENTENCA IMPERATIVA 1)

WHEN (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 83

Page 84: Cobol - Politec

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.

01 TABELA1.

03 TABELA-NOMES.

05 FILLER PIC X(11) VALUE ‘JOAO’.

05 FILLER PIC X(11) VALUE ‘JOSE’.

05 FILLER PIC X(11) VALUE ‘JULIANA’.

05 FILLER PIC X(11) VALUE ‘MARIA’.

05 FILLER PIC X(11) VALUE ‘ANA’.

05 FILLER PIC X(11) VALUE ‘AILTON’.

____________________________________________________________________________________________

Versão 1 84

Page 85: Cobol - Politec

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

03 TAB-NOM REDEFINES TABELA-NOMES

OCCURS 14 INDEXED BY IND.

05 NOME PIC X(11).

01 AUX-NOME PIC X(11) VALUE SPACES.

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

PROCEDURE DIVISION.

DAR-DISPL.

DISPLAY ‘TECLE O NOME A SER PESQUISADO’ UPON CONSOLE.

ACCEPT AUX-NOME FROM CONSOLE.

SET IND TO 1.

SEARCH TAB-NOM

AT END

GO TO DAR-DISPL

WHEN

NOME (IND) EQUAL AUX-NOME

PERFORM ROT-ACHOU-NOME.

ROT-ACHOU-NOME.

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

Exemplo 2, utilizando “SEARCH ALL”:

DATA DIVISION.

____________________________________________________________________________________________

Versão 1 85

Page 86: Cobol - Politec

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

05 FILLER PIC X(11) VALUE ‘1DESPREZADO’.

05 FILLER PIC X(11) VALUE ‘2DUPLICADO’.

05 FILLER PIC X(11) VALUE ‘3EXCLUIDO’.

05 FILLER PIC X(11) VALUE ‘4INCLUIDO’.

05 FILLER PIC X(11) VALUE ‘5ALTERADO’.

03 FILLER REDEFINES TAB-MSG.

05 TAB-2 OCCURS 5 TIMES

ASCENDING KEY IS TAB-CODIGO

INDEXED BY IND.

07 TAB-CODIGO PIC 9(01).

07 TAB-MENSAG PIC X(10).

.........

PROCEDURE DIVISION.

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

SEARCH ALL TAB-2

AT END

MOVE ALL ‘*’ TO LIN-MSG

GO TO SAIDA

WHEN

TAB-CODIGO (IND) EQUAL CHAVE-COD

MOVE TAB-MENSAG(IND) TO LIN-MSG.

____________________________________________________________________________________________

Versão 1 86

Page 87: Cobol - Politec

Cobol

OBS: Não é necessário setar o indexador quando utilizar “SEARCH ALL”.

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 87

Page 88: Cobol - Politec

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 RECORD IS TRAB.

01 TRAB.

02 NOME PIC X(40).

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

02 ENDERECO PIC X(30).

2 - Comando de Sort:

O comando de sort é um item 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.

____________________________________________________________________________________________

Versão 1 88

Page 89: Cobol - Politec

Cobol

Exemplo:

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.

____________________________________________________________________________________________

Versão 1 89

Page 90: Cobol - Politec

Cobol

10.1CLÁUSULA SELECT (SORT)

Esta cláusula fica na “ENVIRONMENT DIVISION” e “DATA DIVISION”, na

descrição dos arquivos.

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.

____________________________________________________________________________________________

Versão 1 90

Page 91: Cobol - Politec

Cobol

10.2CLÁUSULA RELEASE

Release é um verbo de liberação.

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) INTO (AREA)

AT END

(COMANDO IMPERATIVO).

10.4CLÁUSULA SORT

A função do comando SORT é determinar o arquivo a ser classificado, os

campos de classificação, sua ordem (ascendente e/ou descendente) e se devem ser

executados procedimentos de “ entrada” e/ou “saída”.

Formato:

SORT (NOME-ARQ-CLASSIF) ASCENDING KEY / DESCENDING KEY

____________________________________________________________________________________________

Versão 1 91

Page 92: Cobol - Politec

Cobol

(NOME-CAMPO-1...)

USING (NOME-ARQUIVO-1)

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.

____________________________________________________________________________________________

Versão 1 92

Page 93: Cobol - Politec

Cobol

........

ENVIRONMENT DIVISION.

.....

SELECT ARQENT ASSIGN TO UT-S-ARQENT.

SELECT ARQSORT ASSIGN TO UT-S-ARQSORT.

........

DATA DIVISION.

SD ARQSORT.

01 SRT-REGISTRO.

03 SRT-TIPO PIC X(02).

03 SRT-CODIGO PIC 9(07) COMP-3.

03 SRT-NOME PIC X(30).

FD ARQENT

LABEL STANDARD

RECORDING F

BLOCK 0.

01 ENT-REGISTRO.

03 FILLER PIC X(20).

03 ENT-TIPO PIC X(02).

03 FILLER PIC X(01).

03 ENT-CODIGO PIC 9(07) COMP-3.

03 FILLER PIC X(10).

03 ENT-NOME PIC X(30).

..........

PROCEDURE DIVISION.

..........

PRINCIPAL SECTION.

OPEN INPUT ARQENT.

SORT ARQSORT ASCENDING KEY SRT-TIPO

DESCENDING KEY SRT-CODIGO

INPUT PROCEDURE CLASSIFICA

OUTPUT PROCEDURE CLASSIFICADO.

____________________________________________________________________________________________

Versão 1 93

Page 94: Cobol - Politec

Cobol

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.

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.

........

____________________________________________________________________________________________

Versão 1 94

Page 95: Cobol - Politec

Cobol

DATA DIVISION.

SD ARQSORT.

01 SRT-REGISTRO.

03 SRT-TIPO PIC X(02).

03 SRT-CODIGO PIC 9(07) COMP-3.

03 SRT-NOME PIC X(30).

FD ARQENT

LABEL STANDARD

RECORDING F

BLOCK 0.

01 ENT-REGISTRO.

03 ENT-TIPO PIC X(02).

03 ENT-CODIGO PIC 9(07) COMP-3.

03 ENT-NOME PIC X(30).

..........

PROCEDURE DIVISION.

.....

PRINCIPAL SECTION.

SORT ARQSORT ASCENDING KEY SRT-TIPO

DESCENDING KEY SRT-CODIGO

USING ARQENT

OUTPUT PROCEDURE CLASSIFICADO.

STOP RUN.

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

CLASSIFICADO SECTION.

RETURN ARQSORT AT END

GO TO FIM-CLASSIFICADO.

..........

.........

____________________________________________________________________________________________

Versão 1 95

Page 96: Cobol - Politec

Cobol

FIM-CLASSIFICADO.

EXIT.

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

01 SRT-REGISTRO.

03 SRT-TIPO PIC X(02).

03 SRT-CODIGO PIC 9(07) COMP-3.

03 SRT-NOME PIC X(30).

FD ARQENT

LABEL STANDARD

RECORDING F

BLOCK 0.

____________________________________________________________________________________________

Versão 1 96

Page 97: Cobol - Politec

Cobol

01 ENT-REGISTRO.

03 FILLER PIC X(20).

03 ENT-TIPO PIC X(02).

03 FILLER PIC X(01).

03 ENT-CODIGO PIC 9(07) COMP-3.

03 FILLER PIC X(10).

03 ENT-NOME PIC X(30).

FD ARQSAI

LABEL STANDARD

RECORDING F

BLOCK 0.

01 SAI-REGISTRO.

03 FILLER PIC X(36).

..........

PROCEDURE DIVISION.

PRINCIPAL SECTION.

OPEN INPUT ARQENT

SORT ARQSORT ASCENDING KEY SRT-TIPO

DESCENDING KEY SRT-CODIGO

INPUT PROCEDURE CLASSIFICA

GIVING ARQSAI.

STOP RUN.

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

CLASSIFICA SECTION.

READ ARQENT AT END

CLOSE ARQENT

GO TO FIM-CLASSIFICA.

MOVE ENT-TIPO TO SRT-TIPO

MOVE ENT-CODIGO TO SRT-CODIGO

MOVE ENT-NOME TO SRT-NOME

____________________________________________________________________________________________

Versão 1 97

Page 98: Cobol - Politec

Cobol

RELEASE SRT-REGISTRO

GO TO CLASSIFICA.

FIM-CLASSIFICA.

EXIT.

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

03 SRT-TIPO PIC X(02).

03 SRT-CODIGO PIC 9(07) COMP-3.

03 SRT-NOME PIC X(30).

FD ARQENT

LABEL STANDARD

RECORDING F

BLOCK 0.

____________________________________________________________________________________________

Versão 1 98

Page 99: Cobol - Politec

Cobol

01 ENT-REGISTRO.

03 ENT-REG PIC X(36).

FD ARQSAI

LABEL STANDARD

RECORDING F

BLOCK 0.

01 SAI-REGISTRO.

03 FILLER PIC X(36).

..........

PROCEDURE DIVISION.

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

PRINCIPAL SECTION.

SORT ARQSORT ASCENDING KEY TIPO

DESCENDING KEY CODIGO

USING ARQENT

GIVING ARQSAI.

STOP RUN.

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.

____________________________________________________________________________________________

Versão 1 99

Page 100: Cobol - Politec

Cobol

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)

//’’’’’’03’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

//’’’’’’04’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

//’’’’’’05’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

//’’’’’’06’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

____________________________________________________________________________________________

Versão 1 100

Page 101: Cobol - Politec

Cobol

11. OUTRAS CLÁUSULAS

____________________________________________________________________________________________

Versão 1 101

Page 102: Cobol - Politec

Cobol

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.

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;

____________________________________________________________________________________________

Versão 1 102

Page 103: Cobol - Politec

Cobol

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

- 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

____________________________________________________________________________________________

Versão 1 103

Page 104: Cobol - Politec

Cobol

CAMPO-B depois = 00 05 72

- 4)

EXAMINE CAMPO-A REPLACING FIRST 7 BY ZERO.

CAMPO-A antes = 44 75 72

CAMPO-A depois = 44 05 72

- 5)

EXAMINE IMPORTANCIA TALLYING ALL ‘,’.

IMPORTANCIA antes = $3 ,4 11 ,2 2. 15

TALLY antes = 00 32

TALLY depois = 00 02

- 6)

EXAMINE INDICACAO TALLYING ALL ‘A’ REPLACING ‘B’.

INDICACAO antes = A8 66 AC

TALLY antes = 00 13

INDICACAO depois = B8 66 BC

TALLY depois = 00 02

- 7)

EXAMINE CONTROLE TALLYING LEADING ZEROS.

CONTROLE antes = 00 08 44

TALLY antes = 00 32

TALLY depois = 00 03

- 8)

EXAMINE NOME TALLYING UNTIL FIRST ‘X’.

NOME antes = ID AX XX BX

TALLY antes = 00 13

____________________________________________________________________________________________

Versão 1 104

Page 105: Cobol - Politec

Cobol

TALLY depois = 00 03

11.2CLÁUSULA TRANSFORM

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)

(LITERAL NÃO NUMERICO-1) (LITERAL NÃO NUMERICO-2)

(NOME-DADO-1) (NOME-DADO-2)

11.2.1 Regras para o TRANSFORM

1- NOME-DADO-3 -> tem que ser um item elementar 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.

____________________________________________________________________________________________

Versão 1 105

Page 106: Cobol - Politec

Cobol

11.2.2 Exempos de TRANSFORM

- 1)

TRANSFORM CAMPO-A CHARACTERS FROM ZEROS TO QUOTE.

CAMPO-A antes = 10 70 0A BC

CAMPO-A depois = 1’ 7’ ‘A BC

- 2)

TRANSFORM CAMPO-B CHARACTERS FROM ‘17CB’ TO ‘QRXT’.

CAMPO-B antes = 1X 7X XA BC

CAMPO-B depois = QX RX XA TX

- 3)

TRANSFORM CAMPO-C CHARACTERS FROM CAMPO-X TO CAMPO-Y.

CAMPO-X = X1 7A BC

CAMPO-Y = CB A7 1X

CAMPO-C antes = 1X 7X XA BC

CAMPO-C depois = BC AC C7 1X

11.3CLÁUSULA EXHIBIT

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

campos.

Formato:

____________________________________________________________________________________________

Versão 1 106

Page 107: Cobol - Politec

Cobol

EXHIBIT NAMED (IDENTIFICADOR-1) (IDENTIFICADOR-2)...

CHANGED NAMED (LITERAL NÃO NUMERICA)

CHANGED

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

____________________________________________________________________________________________

Versão 1 107

Page 108: Cobol - Politec

Cobol

O READY tem a finalidade de mostrar os passos do

programa assinalando os parágrafos pelo qual já passou.

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.

____________________________________________________________________________________________

Versão 1 108

Page 109: Cobol - Politec

Cobol

11.5CLÁUSULA STRING

Formato:

STRING IDENT-1 IDENT-2... DELIMITED BY SIZE

INTO IDENT-7 COMANDO-IMPERATIVO ON OVERFLOW

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.

____________________________________________________________________________________________

Versão 1 109

Page 110: Cobol - Politec

Cobol

11.5.2 Exemplos de STRING

FD ARQENTRA

.........

.........

01 REG-ENTRA.

03 DATA-HOJE.

05 DIA-HOJE PIC 99.

05 MES-HOJE PIC 99.

05 ANO-HOJE PIC 99.

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

WORKING-STORAGE SECTION.

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

01 LIN-IMPRIME.

03 FILLER PIC X(20) VALUE SPACES.

03 LIN-DATA.

05 LIN-DIA PIC 9(02)B.

05 LIN-DATA-EXT PIC X(40).

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

01 TABELA-MESEXT.

03 FILLER PIC X(20) VALUE ‘DE JANEIRO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE FEVEREIRO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE MARCO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE ABRIL DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE MAIO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE JUNHO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE JULHO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE AGOSTO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE SETEMBRO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE OUTUBRO DE 19*’.

____________________________________________________________________________________________

Versão 1 110

Page 111: Cobol - Politec

Cobol

03 FILLER PIC X(20) VALUE ‘DE NOVEMBRO DE 19*’.

03 FILLER PIC X(20) VALUE ‘DE DEZEMBRO DE 19*’.

01 FILLER REDEFINES TABELA-MESEXT.

03 MÊS-EXT PIC X(20) OCCURS 12 TIMES.

PROCEDURE DIVISION.

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

MOVE DIA-HOJE TO LIN-DIA

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

INTO LIN-DATA-EXT.

O resultado acima será:

DATA-HOJE = 150897

LIN-DATA-EXT = 15 DE AGOSTO DE 1997

ou

DATA-HOJE = 010497

LIN-DATA-EXT = 01 DE ABRIL DE 1997

11.6CLÁUSULA UNSTRING

Formato:

UNSTRING IDENT-1 INTO IDENT-2 IDENT-3...

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

____________________________________________________________________________________________

Versão 1 111

Page 112: Cobol - Politec

Cobol

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.

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.

____________________________________________________________________________________________

Versão 1 112

Page 113: Cobol - Politec

Cobol

READ ARQTESTE AT END

MOVE +020 TO RETURN-CODE

CLOSE ARQTESTE

STOP RUN.

IF TIPO EQUAL 1

MOVE +010 TO RETURN-CODE

CLOSE ARQTESTE

STOP RUN.

Deve-se procurar enviar o RETURN-CODE valorizado

sempre ao final do processamento, isto é, antes do STOP RUN ou

GOBACK.

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

____________________________________________________________________________________________

Versão 1 113

Page 114: Cobol - Politec

Cobol

IF TIPO-TESTE EQUAL 3

DISPLAY ‘ERRO REGISTRO DE ENTRADA ARQTESTE’

DISPLAY ‘0 PROGRAMA AFGT0904 SERÁ CANCELADO’

CALL ‘ILBOABN0’ USING WRK-ABEND.

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.

____________________________________________________________________________________________

Versão 1 114

Page 115: Cobol - Politec

Cobol

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

SELECT ARQ-IN ASSING TO UT-S-ENTRADA

FILE STATUS IS WS-ARQ-IN.

SELECT ARQ-OUT ASSING TO UT-S-SAIDA

FILE STATUS IS WS-ARQ-OUT.

..........

WORKING-STORAGE SECTION.

......

77 WS-ARQ-IN PIC X(02).

77 WS-ARQ-OUT PIC X(02).

77 WS-OPERACAO PIC X(05).

77 WS-FILE-STATUS PIC X(02).

77 WS-ARQUIVO PIC X(07).

77 WS-FIM PIC X(01) VALUE ‘N’.

........

PROCEDURE DIVISION.

PERFORM INICIO

PERFORM PROCESSA UNTIL WS-FIM EQUAL ‘S’

PERFORM FINAL.

INICIO SECTION.

OPEN INPUT ARQ-IN

OUTPUT ARQ-OUT.

IF WS-ARQ-IN NOT EQUAL ‘00’

MOVE ‘OPEN’ TO WS-OPERACAO

MOVE WS-ARQ-IN TO WS-FILE-STATUS

MOVE ‘ARQ-IN’ TO WS-ARQUIVO

GO TO DISPLAY-ERROS.

IF WS-ARQ-OUT NOT EQUAL ‘00’

MOVE ‘OPEN’ TO WS-OPERACAO

____________________________________________________________________________________________

Versão 1 115

Page 116: Cobol - Politec

Cobol

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.

IF WS-ARQ-IN EQUAL ‘10’

MOVE ‘S’ TO WS-FIM

GO TO FIM-PROCESSA

ELSE

IF WS-ARQ-IN NOT EQUAL ‘00’

MOVE ‘READ’ TO WS-OPERACAO

MOVE WS-ARQ-INT TO WS-FILE-STATUS

MOVE ‘ARQ-IN’ TO WS-ARQUIVO

GO TO DISPLAY-ERROS.

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

WRITE REG-OUT.

IF WS-ARQ-OUT NOT EQUAL ‘00’

MOVE ‘WRITE’ TO WS-OPERACAO

MOVE WS-ARQ-OUT TO WS-FILE-STATUS

MOVE ‘ARQ-OUT’ TO WS-ARQUIVO

GO TO DISPLAY-ERROS.

FIM-PROCESSA.

EXIT.

DISPLAY-ERROS SECTION.

DISPLAY ‘* ERRO ‘ WS-OPERACAO ‘ ‘ WS-ARQUIVO

DISPLAY ‘* FILE STATUS = ‘ WS-FILE-STATUS

STOP RUN.

FIM-DISPLAYS-ERROS.

EXIT.

____________________________________________________________________________________________

Versão 1 116

Page 117: Cobol - Politec

Cobol

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

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 117

Page 118: Cobol - Politec

Cobol

____________________________________________________________________________________________

Versão 1 118

Page 119: Cobol - Politec

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

____________________________________________________________________________________________

Versão 1 119

EXERC001

CADAS

TRO

MOVI

MENT

O

PARM

DD/MM/AAAA

Page 120: Cobol - Politec

Cobol

12.1.3 Layout dos arquivos

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

Numérico Numérico Alfanum. Alfanumérico Num. Compactado

Tam. 04 Tam. 06 Tam. 01 Tam. 40 Tam. 15 inteiros,

2 decimais, com sinal

Relatório RELINCL:

12.1.4 Procedimentos:

1) Ler os arquivos de entrada CADASTRO e MOVIMENTO.

2) Processar até o final dos arquivos de entrada

2.1) Efetuar 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

____________________________________________________________________________________________

Versão 1 120

CAD

ATURELINCL

AGENCIA CONTA DÍGITO NOME VALOR

Page 121: Cobol - Politec

Cobol

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

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

____________________________________________________________________________________________

Versão 1 121