Escolar Documentos
Profissional Documentos
Cultura Documentos
COBOL
____________________________________________________________________________________________
Versão 1 1
COBOL
1. O QUE É COBOL?............................................................................................................ 6
1.3 Palavras................................................................................................................ 7
1.3.1 Constante figurativa.......................................................................................7
1.3.2 Palavras opcionais.........................................................................................8
1.3.3 Palavras-chave..............................................................................................8
1.4 Caracteres............................................................................................................ 8
2. IDENTIFICATION DIVISION.............................................................................................9
3. ENVIRONMENT DIVISION.............................................................................................10
4. DATA DIVISION..............................................................................................................12
____________________________________________________________________________________________
Versão 1 2
COBOL
4.1.4 CLÁUSULA FILLER.....................................................................................18
4.1.5 CLÁUSULA VALUE.....................................................................................18
5. PROCEDURE DIVISION.................................................................................................21
____________________________________________________________________________________________
Versão 1 3
COBOL
5.14 CLÁUSULA DISPLAY....................................................................................35
7. TABELAS........................................................................................................................ 54
8. CLASSIFICAÇÃO DE DADOS........................................................................................62
____________________________________________________________________________________________
Versão 1 4
COBOL
8.1 CLÁUSULA SELECT (SORT)............................................................................63
8.11 RETURN-CODE..............................................................................................80
____________________________________________________________________________________________
Versão 1 5
COBOL
1. O que é COBOL?
COBOL significa Common Business Oriented Language, isto é, Linguagem
Comum Orientada para o Comércio.
Coluna de 1 a 6
Coluna 7
Coluna de 8 a 72
____________________________________________________________________________________________
Versão 1 6
COBOL
1.3 Palavras
Em comprimento, uma palavra não deve exceder a 30 caracteres. O
espaço em branco não é um caractere permitido para a formação de palavras.
Uma palavra não pode começar nem terminar com hífen (-).
Exemplo: IMPOSTO-DE-RENDA.
____________________________________________________________________________________________
Versão 1 7
COBOL
LOW-VALUE, LOW-VALUES menor valor (hexa 00)
1.3.3 Palavras-chave
1.4 Caracteres
Há um conjunto de caracteres válidos no Cobol, como:
- De ‘0’ a ‘9’;
- De ‘A’ a ‘Z’;
- Espaço, 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.
1.5.1 Divisões
____________________________________________________________________________________________
Versão 1 8
COBOL
- Divisão de identificação (IDENTIFICATION DIVISION);
1.5.2 Seções
Exemplo:
CONFIGURATION SECTION.
WORKING-STORAGE SECTION.
- na PROCEDURE DIVISION para especificar a segmentação do programa.
1.5.3 Parágrafos
Na PROCEDURE DIVISION é utilizada para agrupar sentenças, permitindo a
alteração do fluxo lógico.
1.5.4 Sentenças
As sentenças são formadas por uma ou mais cláusulas ou comandos, e
terminado por um ponto.
divisões
seções
parágrafos
sentenças
comandos cláusulas
2. IDENTIFICATION DIVISION
É a primeira das 4 divisões.
____________________________________________________________________________________________
Versão 1 9
COBOL
IDENTIFICATION DIVISION.
Exemplo:
<...+....1....+....2....+....3....+....4....+....5....+....6....+....7...
000001 IDENTIFICATION DIVISION.
000002 PROGRAM-ID. DEMPB012.
000003 AUTHOR. ANA PAULA NUNES.
000004 INSTALLATION. SAO-CENTRO.
000005 DATE-WRITTEN. 03/08/1997.
000006 DATE-COMPILED.
000007 SECURITY. ESTE PROGRAMA UTILIZA ARQUIVOS DE BACK-UP COMO
000008 SEGURANCA.
000009 REMARKS. O PROGRAMA EMITE RELATORIO A PARTIR DO ARQUIVO P-112.
000010
3. ENVIRONMENT DIVISION
É 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.
____________________________________________________________________________________________
Versão 1 10
COBOL
- SOURCE-COMPUTER. (nome-do-computador).
- OBJECT-COMPUTER. (nome-do-computador).
- SPECIAL-NAMES. (nome-da-função IS nome-simbólico).
3.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.
3.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”.
3.2.1.1 SELECT
____________________________________________________________________________________________
Versão 1 11
COBOL
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”.
3.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.
4. DATA DIVISION
A DATA DIVISION tem a função de descrever os arquivos e seus registros.
Assim como qualquer área de traballho necessária ao programa.
Essa divisão possui 5 seções que devem aparecer na ordem especificada.
Caso alguma não seja necessária, deve ser omitida:
____________________________________________________________________________________________
Versão 1 12
COBOL
1 – FILE SECTION.
2 – WORKING-STORAGE SECTION.
3 – LINKAGE SECTION.
4 – COMMUNICATION SECTION (estabelece ligações entre o programa cobol
e programa de controle de teleprocessamento).
5 – REPORT SECTION (descreve relatório que o programa deve emitir).
Indicador Uso
FD descrição de arquivos
SD descrição de “sort-files”
RD descrição de relatórios
CD descrição de comunicação
01 RECIBO.
02 IDENTIFICACAO.
03 PREFIXO PIC X(02).
03 RESTO PIC X(05).
02 NUMERO PIC 9(03).
02 FILLER PIC X(50).
(FD) indicador
(01), (02), (03) números de nível
(IDENTIFICACAO), (RECIBO) itens de grupo
(PREFIXO), (RESTO), (NUMERO), (FILLER) itens elementares
____________________________________________________________________________________________
Versão 1 13
COBOL
(77) designa itens da “WORKING-STORAGE SECTION” que não são
subdivisores de outros e por sua vez não são subdivididos. Quando aparecerem
devem ser descritos obrigatoriamente dentro da “WORKING-STORAGE SECTION”.
O item (77) serve para definir acumuladores e áreas auxiliares.
Exemplo:
WORKING-STORAGE SECTION.
77 ACU-LIDOS PIC 9(05) VALUE 0.
77 AUX-NOME PIC X(20).
(88) -> especifica condições que devem ser associadas a valores particulares.
Exemplos:
1 WRK-REG.
02 WRK-SEXO 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.
____________________________________________________________________________________________
Versão 1 14
COBOL
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”.
(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 15
COBOL
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).
É usada para descrição de informações sobre itens, tais como: tamanho, sinal,
tipo (numérico, alfanumérico ou alfabético).
Picture possíveis:
- ALFABÉTICO -> é representado por letras mais o espaço, e o carácter
usado é a letra “A”.
Exemplos:
77 DADO1 PICTURE IS AAA VALUE ‘ABC’.
77 DADO2 PIC IS AAA VALUE ‘ABC’.
77 DADO3 PIC A(3) VALUE ‘BCD’.
“9” = é utilizado para indicar a posição do campo que contém um dígito de “0” a “9”.
____________________________________________________________________________________________
Versão 1 16
COBOL
“V” = é usado para mostrar a posição da vírgula decimal. O ponto decimal, se colocado,
não faz parte do item.
- EDIÇÃO -> utiliza-se para itens que devem ser impressos ou enviados para
tela de programas on-line. São definidos na “WORKING-STORAGE
SECTION”.
O formato é representado por qualquer combinação dos seguintes
caracteres:
(9), (V), (P), (.), (Z), (*), (CR), (DB), (,), (0), (B), ($), (+), (-)
(9), (V), (P) -> são usados de maneira semelhante ao uso dos itens numéricos;
(.) -> o ponto decimal, quando usado, é inserido na posição indicada;
(Z) -> indica a supressão de zeros não significativos;
(*) -> é usado como proteção de um número impresso;
(CR), (DB) -> significam CR (crédito) e DB (débito). Usa-se somente quando o
número for negativo. Caso o número seja positivo, não aparecerá nada;
(,), (0), (B) -> são símbolos de edição que são inseridos na impressão;
($), (+), (-) -> são impressos na posição indicada.
OBS: O símbolo (-) não dever ser o próximo sinal após o ponto. Caso isso
ocorrer, definir mais um (-). Exemplo:
____________________________________________________________________________________________
Versão 1 17
COBOL
9(03) $999 $371 371
S9(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(-)
OBS: caso tenha que utilizar o caracter ‘, para se fazer entendido ao Cobol, define-se
dentro das aspas duplas.
Exemplo:
1 CABEC.
02 FILLER PIC X(10) VALUE SPACES.
02 FILLER PIC X(06) VALUE ‘FOLHAS’.
02 DATA PIC X(10) VALUE SPACES.
____________________________________________________________________________________________
Versão 1 18
COBOL
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).
____________________________________________________________________________________________
Versão 1 19
COBOL
A redefinição deverá conter a mesma quantidade de bytes do campo ou área
anterior e estar no mesmo nível.
1 REGISTRO.
03 ALPINO PIC X(06).
03 BETA.
05 LETRA PIC X(04).
05 NUM PIC 9(02).
03 ALFA REDEFINES BETA.
05 AUT PIC 9(01).
05 LIVRE PIC X(05).
03 ZUM PIC X(08).
ZERO ALFANUMÉRICAS
ZEROS OU
ZEROES NUMÉRICAS
SPACE ALFABÉTICAS
SPACES OU ALFANUMÉRICAS
____________________________________________________________________________________________
Versão 1 20
COBOL
4.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).
5. PROCEDURE DIVISION
____________________________________________________________________________________________
Versão 1 21
COBOL
5.1 CLÁUSULA OPEN
Abre arquivo de entrada e saída. 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.
____________________________________________________________________________________________
Versão 1 22
COBOL
- ADVANCING -> refere-se ao controle do posicionamento vertical de cada
linha, se não for usado o salto automático de linhas no programa. Não podem ser
usados os dois controles no mesmo programa.
- AFTER ou BEFORE -> é o controle de salto. O “AFTER” indica que primeiro
pula a quantidade de linhas especificadas ou (salta de página) para depois imprimir.
O “BEFORE” primeiro imprime para depois saltar de linhas ou (pular de página).
Exemplos:
WRITE RELATORIO FROM CABEC1 AFTER ADVANCING 2 LINES.
WRITE AREA-ATUAL.
WRITE CADASTRO FROM REG-CAD.
FILE SECTION.
01 SAIDA.
XXXXXXX
WORKING-STORAGE SECTION.
01 AREA-1.
XXXXXXXXXXXX
Se um número inteiro for usado (1 a 100) serão saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
WRITE RELATORIO FROM CABEC1 AFTER ADVANCING CANAL-1.
____________________________________________________________________________________________
Versão 1 23
COBOL
Por exemplo, na impressão do cabeçalho de um relatório:
FD IMPRESSAO
LABEL OMITTED
RECORDING F
BLOCK 0.
1 RELATORIO.
2 CARRO PIC X(01).
02 FILLER PIC X(132).
WORKING-STORAGE SECTION.
1 CABEC1.
2 FILLER PIC X(01) VALUE ‘1’.
02 DATA PIC X(10) VALUE SPACES.
02 FILLER PIC X(40) VALUE SPACES.
02 FILLER PIC X(30) VALUE
‘PROGRAMA DE INCLUSAO DE TITULOS’.
02 FILLER PIC X(44) VALUE SPACES.
02 HORA PIC X(08) VALUE SPACES.
.............
PROCEDURE DIVISION
.........
WRITE RELATORIO FROM CABEC1 AFTER POSITIONING CARRO.
____________________________________________________________________________________________
Versão 1 24
COBOL
5.7 CLÁUSULA GO TO
Permite a transferência da parte do programa que está sendo executada para
uma outra.
Formato:
LEITURA.
......... AT END
____________________________________________________________________________________________
Versão 1 25
COBOL
GO TO FIM-LEITURA.
.............................
FIM-LEITURA.
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)
____________________________________________________________________________________________
Versão 1 26
COBOL
1 CAMPO-2.
03 ENDER PIC X(10).
03 NOME PIC X(05).
....................
PROCEDURE DIVISION.
MOVE CORR CAMPO-1 TO CAMPO-2.
Exemplo com literais figurativas:
MOVE SPACES TO WS-AREA-LIVRE
MOVE ZEROS TO DATA-8
MOVE 120 TO NUMERO-FIXO
MOVE ‘CREDITO’ TO WS-CONTABIL
MOVE ‘FAVOR’ TO WS-CABEC1 CABEC2.
____________________________________________________________________________________________
Versão 1 27
COBOL
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, à 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.
____________________________________________________________________________________________
Versão 1 28
COBOL
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:
1 CAMPO-1.
03 A PIC 9(03)V(02).
03 B PIC 9(04).
1 CAMPO-2.
03 A PIC 9(03)V9(02).
03 B PIC 9(04).
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)
____________________________________________________________________________________________
Versão 1 29
COBOL
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.
Formato:
ADD CAMPO-3 TO CAMPO-4 ROUNDED.
____________________________________________________________________________________________
Versão 1 30
COBOL
5.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
Exemplo:
SUBTRACT H I J FROM L GIVING N.
____________________________________________________________________________________________
Versão 1 31
COBOL
1 A.
02 B PIC 9(04).
02 C PIC 99.
01 D.
02 B PIC 9(04).
02 C PIC 99.
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).
____________________________________________________________________________________________
Versão 1 32
COBOL
Formato 4:
MULTIPLY (IDENT-1) BY (IDENT-2) GIVING (IDENT-3)
ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
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
Formato 4:
DIVIDE (IDENT-1) BY (IDENT-2)
ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
DIVIDE (IDENT-1) INTO (IDENT-2)
____________________________________________________________________________________________
Versão 1 33
COBOL
ROUNDED ON SIZE ERROR (SENTENÇA IMPERATIVA).
Formato 5:
DIVIDE (IDENT-1) BY(ou INTO) (IDENT-2) GIVING
(IDENT-3) ROUNDED REMAINDER (IDENT-4).
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.
5.13CLÁUSULA COMPUTE
Operandos que a cláusula compute pode executar:
- Adição (+);
- Subtração (-);
- Multiplicação (*);
- Divisão (/);
- Exponenciação (**).
____________________________________________________________________________________________
Versão 1 34
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.
5.14CLÁUSULA DISPLAY
Formato 1:
DISPLAY ‘TOTAL DE REGISTROS LIDOS = ‘ TOTAL-LIDOS.
Formato 2:
DISPLAY ACUM-GRAVADOS ‘REGISTROS GRAVADOS’ UPON CONSOLE.
SYSPUNCH.
Quando for omitido “UPON” assume-se “SYSOUT” e deverá ser colocado o
cartão “//SYSOUT” no JCL.
Quantidade de caracteres (bytes) para cada tipo:
- Console = 100 bytes;
- Syspunch = 72 bytes;
- Sysout = 120 bytes.
5.15CLÁUSULA ACCEPT
Formato:
ACCEPT (IDENT) FROM SYSIN.
CONSOLE.
(NOME-MNEMONICO).
(NOME-MNEMONICO) = executa uma operação de entrada do computador
para um campo definido na “WORKING-STORAGE SECTION”.
Exemplos:
____________________________________________________________________________________________
Versão 1 35
COBOL
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.
1 DATA-DO-DIA.
03 DIA PIC 9(02).
03 FILLER PIC X(01).
03 MES PIC 9(02).
03 FILLER PIC X(01).
03 ANO PIC 9(04).
Ou
01 DATA-DO-DIA PIC X(10).
Exemplo:
01 REG-CAD.
03 CAD-NOME PIC X(40).
03 CAD-DATA PIC 9(08).
..........
ACCEPT REG-CAD FROM SYSIN.
............
O “SYSIN” é utilizado para pegar dados de um arquivo “SYSIN DD”.
//........
//SYSIN DD *
ARQUIVODT4573
Ou
//SYSIN DD DSN=V.POOL.ARQDATA(0),DISP=SHR
5.16CLÁUSULA IF
Formato:
IF (CONDIÇÃO) (SENTENÇA-1) ELSE (SENTENÇA-2)
____________________________________________________________________________________________
Versão 1 36
COBOL
Exemplo:
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.
O “NEXT SENTENCE” determina que nada será feito e deve-se continuar o processo
após o primeiro ponto final ou “END-IF” encontrado.
IF TESTE
AÇÃO VERDADEIRA
ELSE
AÇÃO FALSA.
Tipos de testes:
- teste de condição de classe;
____________________________________________________________________________________________
Versão 1 37
COBOL
- teste de nome-de-condição;
- teste de condição de relação;
- teste de sinal.
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’.
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.
____________________________________________________________________________________________
Versão 1 38
COBOL
IF HOMEM
GO TO PROCED-HOMEM.
IF MULHER
GO TO PROCED-MULHER.
IF ERRO
GO TO PROCED-ERRO.
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.
____________________________________________________________________________________________
Versão 1 39
COBOL
IF VALOR IS POSITIVE
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.
5.17CLÁUSULA PERFORM
Formato (simples):
PERFORM (PARAGRAFO-1) THRU (FIM-PARAGRAFO-1).
____________________________________________________________________________________________
Versão 1 40
COBOL
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.
PERFORM ROT-A THRU ROT-C.
..........
ROT-A.
.............
.............
ROT-B.
PERFORM ROT-D TRHU ROT-E.
ROT-C.
..........
..........
ROT-D.
.........
.........
ROT-E.
...........
____________________________________________________________________________________________
Versão 1 41
COBOL
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.
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.
____________________________________________________________________________________________
Versão 1 42
COBOL
Formato:
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.
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”.
____________________________________________________________________________________________
Versão 1 43
COBOL
Formato:
PERFORM (NOME-ROTINA-1) THRU (NOME-ROTINA-2)
UNTIL (CONDIÇÃO)
ou
PERFORM (NOME-ROTINA-1) UNTIL (CONDIÇÃO)
Exemplo:
PERFORM ROT-A THRU FIM-ROT-A
UNTIL WS-NUM IS NEGATIVE.
ROT-A.
.................
SUBTRACT 1 FROM WS-NUM.
FIM-ROT-A.
EXIT.
____________________________________________________________________________________________
Versão 1 44
COBOL
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.
1 TABELA.
02 VENDAS-PROD OCCURS 4 TIMES.
03 VALOR PIC 9(05).
.............
.............
PROCEDURE DIVISION.
.................
PERFORM ZERA-TAB
VARYING INDICE
FROM 1 BY 1
UNTIL INDICE GREATER 4.
ZERA-TAB.
MOVE ZEROS TO VALOR(INDICE).
ZERA-FIM.
EXIT.
5.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.
____________________________________________________________________________________________
Versão 1 45
COBOL
PERFORM A-1 THRU A-99.
FIM-INICIO.
EXIT.
A-1.
.........
A-99.
EXIT.
Exemplo:
1 LINHA.
2 VALOR PIC 9(05) BLANK WHEN ZERO.
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:
____________________________________________________________________________________________
Versão 1 46
COBOL
1 REGISTRO.
2 NOME PIC X(20).
02 FILLER PIC X(01).
02 A PIC S9(07) COMP.
02 CODIGO PIC 9(02).
02 B PIC S9(04) COMP.
Se usarmos a SYNCHRONIZED (SYNC), não precisamos nos preocupar com o
problema do alinhamento.
Exemplo:
1 REGISTRO.
2 NOME PIC X(20).
02 FILLER PIC X(01).
02 A PIC S9(07) COMP SYNC.
02 CODIGO PIC 9(02).
02 B PIC S9(04) COMP SYNC.
....................
ADD 10 TO A B
SUBTRACT 5 FROM B.
5.21OPERADORES LÓGICOS
Existem no Cobol 3 (três) operadores lógicos:
____________________________________________________________________________________________
Versão 1 47
COBOL
IF NOME = SPACES AND ENDERECO = SPACES
GO TO CAMPOS-BRANCO
ELSE
IF CODIGO LESS 2 OR CODIGO-2 GREATER C
MOVE 1 TO INDICE.
Exemplos:
ACCEPT CAMPO-DATA FROM DATE.
ACCEPT CAMPO-DIA FROM DAY.
ACCEPT CAMPO-HORA FROM TIME.
____________________________________________________________________________________________
Versão 1 48
COBOL
Definindo os campos acima na “WORKING-STORAGE SECTION”:
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 49
COBOL
03 CAD-NOME PIC X(40).
................
WORKING-STORAGE SECTION.
01 W-CHAVE PIC 9(06) VALUE 2456.
FILE-CONTROL.
SELECT CADASTRO ASSIGN TO DA-I-DDCADAST
ACCESS MODE IS SEQUENTIAL
RECORD KEY IS CAD-CHAVE.
..............
FD CADASTRO
LABEL STANDARD
RECORDING F
RECORD 130
BLOCK 10 RECORDS.
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.
____________________________________________________________________________________________
Versão 1 50
COBOL
6.1.1 I-O
Formato no OPEN:
No OPEN, a opção “I-O” (input-output) deve ser declarada para arquivos que
possuem organização “DIRETA”, e quanto utilizada a cláusula “REWRITE”. Caso
contrário, abrir somente com a opção “INPUT” para leitura ou “OUTPUT” para
gravação.
Formato no READ:
Exemplo:
MOVE 150190 TO WS-CHAVE. (->nominal-key)
READ CADASTRO.
Formato no WRITE:
____________________________________________________________________________________________
Versão 1 51
COBOL
Formato:
REWRITE (NOME-DO-DADO, REGISTRO) FROM (AREA-IDENTIF)
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’.
START (NOME-DO-ARQUIVO)
INVALID KEY (SENTENÇA IMPERATIVA)
____________________________________________________________________________________________
Versão 1 52
COBOL
Nota-se que o START, só posiciona e não traz para a área de leitura o registro.
Somente no primeiro READ é que acontecerá de trazer o registro.
Exemplo:
FILE-CONTROL.
SELECT CADSEQUE ASSIGN TO DA-I-DDCADSEQ
ACCESS SEQUENTIAL
RECORD KEY CAD-KEY
NOMINAL KEY WS-KEY.
.........................
FD CADSEQUE
LABEL STANDARD
RECORDING F
BLOCK 20 RECORDS.
01 CAD-REGISTRO.
03 CAD-KEY.
05 CAD-CODIGO PIC X(02).
05 CAD-NUMERO PIC 9(04)
03 CAD-NOME PIC X(40).
03 CAD-ENDER PIC X(45).
03 CAD-IDADE PIC 9(02).
..................
WORKING-STORAGE SECTION.
77 WS-KEY PIC X(06) VALUE ‘AB1437’.
....................
PROCEDURE DIVISION.
..............
START CADSEQUE
INVALID KEY
PERFORM ROTINA-NÃO-ACHADO.
LEITURA.
READ CADSEQUE
AT END
____________________________________________________________________________________________
Versão 1 53
COBOL
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.
7. TABELAS
As tabelas devem ser construídas na ‘”DATA DIVISION”.
OCCURS X TIMES
OCCURS X TO XX DEPENDING ON (CAMPO).
- TABELA SUBSCRITA;
- TABELA INDEXADA.
- 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.
____________________________________________________________________________________________
Versão 1 54
COBOL
7.2 TABELA SUBSCRITA
Pode ser considerada, tabela subscrita, a tabela que você utiliza um índice fora
dela.
Exemplo 1, definição da tabela na WORKING-STORAGE SECTION:
1 TABELA-DE-MESES.
2 TAB-MESES.
3 FILLER PIC X(09) VALUE ‘JANEIRO’.
03 FILLER PIC X(09) VALUE ‘FEVEREIRO’.
03 FILLER PIC X(09) VALUE ‘MARCO’.
03 FILLER PIC X(09) VALUE ‘ABRIL’.
03 FILLER PIC X(09) VALUE ‘MAIO’.
03 FILLER PIC X(09) VALUE ‘JUNHO’.
03 FILLER PIC X(09) VALUE ‘JULHO’.
03 FILLER PIC X(09) VALUE ‘AGOSTO’.
03 FILLER PIC X(09) VALUE ‘SETEMBRO’.
03 FILLER PIC X(09) VALUE ‘OUTUBRO’.
03 FILLER PIC X(09) VALUE ‘NOVEMBRO’.
03 FILLER PIC X(09) VALUE ‘DEZEMBRO’.
02 TAB-MESES-R REDEFINES TAB-MESES OCCURS 12 TIMES.
03 MESES PIC X(09).
1 DATA-DIA.
2 DIA PIC 9(02).
02 FILLER PIC X(01).
02 MES PIC 9(02).
02 FILLER PIC X(01).
02 ANO PIC 9(04).
1 CABEC.
03 FILLER PIC X(28) VALUE
‘RELATORIO EMITIDO EM: ‘.
03 NOME-MÊS PIC X(09).
..................
PROCEDURE DIVISION.
____________________________________________________________________________________________
Versão 1 55
COBOL
....................
DISPLAY ‘TECLE DATA – FORMATO DD/MM/AAAA’ UPON CONSOLE.
ACCEPT DATA-DIA FROM CONSOLE.
MOVE MESES (MÊS) TO NOME-MÊS.
Exemplo 2:
WORKING-STORAGE SECTION.
.............
77 IND PIC 9(02) COMP VALUE 0 SYNC.
.............
1 LINHA-DETALHE.
2 FILLER PIC X(20)
VALUE ‘TOTAL DO ESTADO DE ‘.
02 ESTADO PIC X(15).
.............
.............
1 TABELA-ESTADO.
2 TAB.
3 FILLER PIC X(17) VALUE ‘SPSAO PAULO’.
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.
____________________________________________________________________________________________
Versão 1 56
COBOL
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.
..........
Formato 1:
SET (INDEX NAME) TO (NUM-INTEIRO)
(IDENTIFICADOR) (IDENTIFICADOR)
(INDEX NAME)
____________________________________________________________________________________________
Versão 1 57
COBOL
ou
DOWN BY (LIT-2)
Formato 1:
____________________________________________________________________________________________
Versão 1 58
COBOL
(NEXT SENTENCE)
Exemplo 1:
WORKING-STORAGE SECTION.
1 TABELA1.
03 TABELA-NOMES.
05 FILLER PIC X(11) VALUE ‘JOAO’.
05 FILLER PIC X(11) VALUE ‘JOSE’.
05 FILLER PIC X(11) VALUE ‘JULIANA’.
05 FILLER PIC X(11) VALUE ‘MARIA’.
05 FILLER PIC X(11) VALUE ‘ANA’.
05 FILLER PIC X(11) VALUE ‘AILTON’.
05 FILLER PIC X(11) VALUE ‘BENEDITA’.
05 FILLER PIC X(11) VALUE ‘SERGIO’.
05 FILLER PIC X(11) VALUE ‘CAMILA’.
05 FILLER PIC X(11) VALUE ‘EVELYN’.
05 FILLER PIC X(11) VALUE ‘SERAFIM’.
____________________________________________________________________________________________
Versão 1 59
COBOL
05 FILLER PIC X(11) VALUE ‘PEDRO’.
05 FILLER PIC X(11) VALUE ‘LUCAS’.
05 FILLER PIC X(11) VALUE ‘IRACEMA’.
03 TAB-NOM REDEFINES TABELA-NOMES
OCCURS 14 INDEXED BY IND.
05 NOME PIC X(11).
SET IND TO 1.
SEARCH TAB-NOM
AT END
GO TO DAR-DISPL
WHEN
NOME (IND) EQUAL AUX-NOME
PERFORM ROT-ACHOU-NOME.
ROT-ACHOU-NOME.
.....................
____________________________________________________________________________________________
Versão 1 60
COBOL
.........
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 61
COBOL
8. 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.
1 TRAB.
2 NOME PIC X(40).
02 VALOR PIC 9(06)V(02) COMP-3.
02 ENDERECO PIC X(30).
2 - Comando de Sort:
O comando de sort é um item necessário na “PROCEDURE DIVISION”.
Determina os campos de controle para classificação e indica se
processamentos de entrada e saída devem ser usados.
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.
____________________________________________________________________________________________
Versão 1 62
COBOL
.........
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.
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):
1. não pode dar OPEN, CLOSE, READ e WRITE;
2. deve ter um SELECT;
Cláusula DATA RECORDS é obrigatória em alguns sistemas. Atualmente, é
opcional.
____________________________________________________________________________________________
Versão 1 63
COBOL
8.2 CLÁ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).
____________________________________________________________________________________________
Versão 1 64
COBOL
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”.
IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
.....
SELECT ARQENT ASSIGN TO UT-S-ARQENT.
SELECT ARQSORT ASSIGN TO UT-S-ARQSORT.
........
DATA DIVISION.
SD ARQSORT.
1 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 ENT-REGISTRO.
03 FILLER PIC X(20).
____________________________________________________________________________________________
Versão 1 65
COBOL
03 ENT-TIPO PIC X(02).
03 FILLER PIC X(01).
03 ENT-CODIGO PIC 9(07) COMP-3.
03 FILLER PIC X(10).
03 ENT-NOME PIC X(30).
..........
PROCEDURE DIVISION.
..........
PRINCIPAL SECTION.
OPEN INPUT ARQENT.
STOP RUN.
CLASSIFICA SECTION.
READ ARQENT AT END
CLOSE ARQENT
GO TO FIM-CLASSIFICA.
RELEASE SRT-REGISTRO
GO TO CLASSIFICA.
FIM-CLASSIFICA.
EXIT.
CLASSIFICADO SECTION.
RETURN ARQSORT AT END
GO TO FIM-CLASSIFICADO.
..........
FIM-CLASSIFICADO.
____________________________________________________________________________________________
Versão 1 66
COBOL
EXIT.
1 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 ENT-REGISTRO.
03 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.
____________________________________________________________________________________________
Versão 1 67
COBOL
STOP RUN.
..............
CLASSIFICADO SECTION.
RETURN ARQSORT AT END
GO TO FIM-CLASSIFICADO.
..........
.........
FIM-CLASSIFICADO.
EXIT.
FD ARQENT
LABEL STANDARD
RECORDING F
____________________________________________________________________________________________
Versão 1 68
COBOL
BLOCK 0.
1 ENT-REGISTRO.
03 FILLER PIC X(20).
03 ENT-TIPO PIC X(02).
03 FILLER PIC X(01).
03 ENT-CODIGO PIC 9(07) COMP-3.
03 FILLER PIC X(10).
03 ENT-NOME PIC X(30).
FD ARQSAI
LABEL STANDARD
RECORDING F
BLOCK 0.
01 SAI-REGISTRO.
03 FILLER PIC X(36).
..........
PROCEDURE DIVISION.
PRINCIPAL SECTION.
OPEN INPUT ARQENT
SORT ARQSORT ASCENDING KEY SRT-TIPO
DESCENDING KEY SRT-CODIGO
INPUT PROCEDURE CLASSIFICA
GIVING ARQSAI.
STOP RUN.
..............
CLASSIFICA SECTION.
READ ARQENT AT END
CLOSE ARQENT
GO TO FIM-CLASSIFICA.
____________________________________________________________________________________________
Versão 1 69
COBOL
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 pelo “OUTPUT PROCEDURE”.
IDENTIFICATION DIVISION.
........
ENVIRONMENT DIVISION.
........
SELECT ARQENT ASSIGN TO UT-S-ARQENT.
SELECT ARQSAI ASSIGN TO UT-S-ARQSAI.
SELECT ARQSORT ASSIGN TO UT-S-SORTWK01.
........
DATA DIVISION.
SD ARQSORT.
01 SRT-REGISTRO.
03 SRT-TIPO PIC X(02).
03 SRT-CODIGO PIC 9(07) COMP-3.
03 SRT-NOME PIC X(30).
FD ARQENT
LABEL STANDARD
RECORDING F
BLOCK 0.
1 ENT-REGISTRO.
03 ENT-REG PIC X(36).
FD ARQSAI
LABEL STANDARD
____________________________________________________________________________________________
Versão 1 70
COBOL
RECORDING F
BLOCK 0.
01 SAI-REGISTRO.
03 FILLER PIC X(36).
..........
PROCEDURE DIVISION.
.....................
PRINCIPAL SECTION.
*****************************
OBS: Exemplo de JCL para SORT com no máximo 6 SORTWK.
O SPACE pode ser um TRK ou CYL:
//SORTLIB DD DSN=SYS1.SORTILIB,DISP=SHR
//SORTWK01 DD UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)
//SORTWK02 DD UNIT=DISCO,SPACE=(TRK,(1,1),RLSE)
//’’’’’’03’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’04’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’05’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
//’’’’’’06’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’
____________________________________________________________________________________________
Versão 1 71
COBOL
Formato:
EXAMINE (NOME-CAMPO) REPLACING ALL (LITERAL-1) BY (LITERAL-2)
- LEADING -
- UNTIL FIRST -
- FIRST -
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 outro determinado caracter).
2- A opção TALLYING gera um número inteiro cujo valor é armazenado num item
binário denominado “TALLY”. Este número representa o seguinte:
- quantas vezes ocorre a LITERAL-3 com o uso da opção “ALL”;
- quantas vezes ocorre a LITERAL-3, antes de encontrar um campo diferente
da LITERAL-3, com o uso da opção “LEADING”;
- 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”.
____________________________________________________________________________________________
Versão 1 72
COBOL
- 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).
CAMPO-A antes = 44 75 72
CAMPO-A depois = 44 05 02
- 2)
EXAMINE/INSPECT IMPORTANCIA REPLACING LEADING ZEROS BY ‘2’.
IMPORTANCIA antes = 00 08 40
IMPORTANCIA antes = 22 28 40
- 3)
EXAMINE CAMPO-B RELACING UNTIL FIRST 5 BY ZERO.
CAMPO-B antes = 44 75 72
CAMPO-B depois = 00 05 72
- 4)
EXAMINE CAMPO-A REPLACING FIRST 7 BY ZERO.
CAMPO-A antes = 44 75 72
CAMPO-A depois = 44 05 72
- 5)
EXAMINE IMPORTANCIA TALLYING ALL ‘,’.
____________________________________________________________________________________________
Versão 1 73
COBOL
IMPORTANCIA antes = $3 ,4 11 ,2 2. 15
TALLY antes = 00 32
TALLY depois = 00 02
- 6)
EXAMINE INDICACAO TALLYING ALL ‘A’ REPLACING ‘B’.
INDICACAO antes = A8 66 AC
TALLY antes = 00 13
INDICACAO depois = B8 66 BC
TALLY depois = 00 02
- 7)
EXAMINE CONTROLE TALLYING LEADING ZEROS.
CONTROLE antes = 00 08 44
TALLY antes = 00 32
TALLY depois = 00 03
- 8)
EXAMINE NOME TALLYING UNTIL FIRST ‘X’.
NOME antes = ID AX XX BX
TALLY antes = 00 13
TALLY depois = 00 03
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)
____________________________________________________________________________________________
Versão 1 74
COBOL
8.6.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.
- 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
____________________________________________________________________________________________
Versão 1 75
COBOL
Formato:
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.
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”.
____________________________________________________________________________________________
Versão 1 76
COBOL
Exemplo:
PROCEDURE DIVISION.
A0.
READY TRACE.
.........
A1.
.........
...........
A5.
...........
A99.
EXIT.
____________________________________________________________________________________________
Versão 1 77
COBOL
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.
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.
................
1 LIN-IMPRIME.
03 FILLER PIC X(20) VALUE SPACES.
03 LIN-DATA.
05 LIN-DIA PIC 9(02)B.
05 LIN-DATA-EXT PIC X(40).
.............
1 TABELA-MESEXT.
03 FILLER PIC X(20) VALUE ‘DE JANEIRO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE FEVEREIRO DE 19*’.
____________________________________________________________________________________________
Versão 1 78
COBOL
03 FILLER PIC X(20) VALUE ‘DE MARCO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE ABRIL DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE MAIO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE JUNHO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE JULHO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE AGOSTO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE SETEMBRO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE OUTUBRO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE NOVEMBRO DE 19*’.
03 FILLER PIC X(20) VALUE ‘DE DEZEMBRO DE 19*’.
01 FILLER REDEFINES TABELA-MESEXT.
03 MÊS-EXT PIC X(20) OCCURS 12 TIMES.
PROCEDURE DIVISION.
.............
MOVE DIA-HOJE TO LIN-DIA
DATA-HOJE = 150897
LIN-DATA-EXT = 15 DE AGOSTO DE 1997
ou
DATA-HOJE = 010497
LIN-DATA-EXT = 01 DE ABRIL DE 1997
8.10CLÁUSULA UNSTRING
Formato:
____________________________________________________________________________________________
Versão 1 79
COBOL
Na cláusula UNSTRING, os caracteres são transferidos dos campos
receptores (IDENT-2, IDENT-3, ETC) para o campo emissor (IDENT-1) da esquerda
para a direita.
O campo receptor ao qual foi dado o nome primeiro (IDENT-2) é
completamente preenchido com os caracteres mais a esquerda do campo emissor.
Então, o próximo campo emissor, este processo continua até que todos os campos
estejam cheios ou o campo emissor inteiro tenha sido transferido.
Os campos receptores podem ser colocados em qualquer lugar e em qualquer ordem na
DATA DIVISION.
A ordem na qual eles estão nomeados governa a ordem da transferência de dados.
8.11RETURN-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 80
COBOL
IF TIPO EQUAL 1
MOVE +010 TO RETURN-CODE
CLOSE ARQTESTE
STOP RUN.
8.12ABENDAR PROGRAMA
Para abendar um programa da maneira que vamos definir neste subcapítulo,
deve-se definir um campo na WORKING-STORAGE SECTION com 4 bytes binários
com qualquer valor, que não ultrapasse a 4095.
Exemplo:
WORKING-STORAGE SECTION.
77 WRK-ABEND PIC S9(04) VALUE +1234 COMP.
PROCEDURE DIVISION.
OPEN INPUT ARQTESTE.
IF TIPO-TESTE EQUAL 3
DISPLAY ‘ERRO REGISTRO DE ENTRADA ARQTESTE’
DISPLAY ‘0 PROGRAMA AFGT0904 SERÁ CANCELADO’
CALL ‘ILBOABN0’ USING WRK-ABEND.
8.13FILE 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.
____________________________________________________________________________________________
Versão 1 81
COBOL
Após cada operação de I/O, o sistema move um valor para a STATUS KEY
(campo alfanumérico, com 2 caracteres definidos na WORKING-STORAGE
SECTION e especificado na ENVIRONMENT DIVISION, através do SELECT) que
acusa o sucesso ou o insucesso da operação.
Qualquer valor movido para a STATUS KEY diferente de zeros, revela que a
execução não foi bem sucedida.
Alguns exemplos de operações de I/O que podem ser testadas o FILE STATUS:
- OPEN
- START
- WRITE
- READ
- REWRITE
- CLOSE
Exemplo:
IDENTIFICATION DIVISION.
.............
ENVIRONMENT DIVISION.
............
SELECT 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
____________________________________________________________________________________________
Versão 1 82
COBOL
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.
____________________________________________________________________________________________
Versão 1 83
COBOL
FIM-PROCESSA.
EXIT.
DISPLAY-ERROS SECTION.
DISPLAY ‘* ERRO ‘ WS-OPERACAO ‘ ‘ WS-ARQUIVO
DISPLAY ‘* FILE STATUS = ‘ WS-FILE-STATUS
STOP RUN.
FIM-DISPLAYS-ERROS.
EXIT.
1) FILE STATUS = 90
DD STATEMENT MISSING (PARA ARQUIVO)
2) FILE STATUS = 92
READ APOS AT END
____________________________________________________________________________________________
Versão 1 84