Escolar Documentos
Profissional Documentos
Cultura Documentos
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 FILLER PIC X(10) VALUE 'VTA'.
01 WK-ITEM-GRUPO.
05 FILLER PIC X(10) VALUE 'VTA.
05 WK-NOME PIC X(35) VALUE SPACES.
Nota Nota Nota Nota
No podemos manipular o item 77, pois no podemos emitir qualquer comando
para o FILLER, mas podemos manipular o item de grupo WK-ITEM-GRUPO,
alterando assim o valor do FILLER ele subordinado.
Exemplo: MOVE SPACES TO FILLER (Errado) (Errado) (Errado) (Errado)
MOVE SPACES TO WK-ITEM-GRUPO (Correto) (Correto) (Correto) (Correto)
Value Value Value Value
Atribui valores iniciais as reas de trabalho definidas no programa, devemos
respeitar as configuraes das PICTURES.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
77 WK-V4 PIC 99/99/9999. 19022008 19/02/2008
77 WK-V5 PIC *99,99. 077V77 *77,77
77 WK-V6 PIC 9B9. 79 7 9
77 WK-V7 PIC 99,00. 777 77,00
77 WK-V8 PIC +ZZ9. 456 +456
77 WK-V9 PIC 99-. -79 79-
77 WK-V10 PIC 99+. +71 71+
77 WK-V11 PIC -99. +71 71
77 WK-V12 PIC $9.999,99. 410V71 $0.410,71
77 WK-V13 PIC $Z.ZZ9,99. 410V71 $410,71
77 WK-V14 PIC --.---,--. -410V71 -410,71
77 WK-V15 PIC ++.+++,++. -410V71 -410,71
77 WK-V16 PIC **.***,**. 410V71 ***410,71
77 WK-V16 PIC $$.$$$,$$. -410V71 -$410,71
respeitar as configuraes das PICTURES.
Filler Filler Filler Filler
Palavra reservada que preenche determinados espaos definidos na Picture,
sendo que no temos acesso ao item elementar, somente quando manipulamos o
item de grupo que ele esteja subordinado. Eles so usados frequentemente para
no poluirmos o cdigo fonte com nomes desnecessrios de variveis.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 WK-CONTADOR PIC 9(03) VALUE 54.
77 WK-NOME PIC X(35) VALUE 'JOSE'.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
21 22
Redefines Redefines Redefines Redefines
Existe a possibilidade no COBOL II de mudarmos os atributos de um campo, tais
como, PICTURE, ESTRUTUTA-DE-DADOS (Layout), para que possamos mover
valores diferentes conforme nossas necessidades, podendo assim um campo ser
numrico, alfanumrico ou parte alfanumrico e parte numrico. Podemos redefinir
um item com tamanho menor que o original, mas devemos ter certeza que
estamos fazendo isto com um propsito especfico.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 ESTRUTURA1.
05 ITEM1 PIC 9(05).
01 ESTRUTURA2 REDEFINES ESTRUTURA1.
05 ITEM2 PIC X(05).
01 ESTRUTURA3 REDEFINES ESTRUTURA2.
05 ITEM1 PIC X(02).
05 ITEM2 PIC 9(03).
Nota Nota Nota Nota
Parmetros Parmetros Parmetros Parmetros
NOME NOME NOME NOME- -- -DA DA DA DA- -- -AREA AREA AREA AREA: :: : Indica o nome do BOOK que ser incorporado ao programa
na compilao.
REPLACING REPLACING REPLACING REPLACING: :: : Pesquisa todas as constantes WK do BOOK e troca por LK,
na compilao e somente para o programa que acionou o COPY.
Nota Nota Nota Nota
Tanto na FILE SECTION, quanto na WORKING-STORAGE SECTION, o COPY
pode ser dado na coluna 8, j na PROCEDURE DIVISION deve-se utilizar o
COPY na coluna 12, devido a interpretao do comando.
Ocorrncias Ocorrncias Ocorrncias Ocorrncias
Podemos definir ocorrncias de campos, que chamamos de TABELA. Estes campos so
definidos somente uma vez com indicao de um determinado nmero de repeties,
estas tabelas podem ser classificadas em dimenses (nveis), podemos ter tabelas
indexadas para pesquisas mais rpidas. Podem ser usadas em todas as sees do
programa que definimos as variveis (FILE, WORKING-STORAGE, LINKAGE
SECTION), no nosso caso nos referenciaremos na WORKING-STORAGE SECTION.
Tabela Tabela Tabela Tabela Monodimensional Monodimensional Monodimensional Monodimensional
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Nota Nota Nota Nota
Os campos ESTRUTURA1, 2 e 3 ocupam o mesmo endereo na memria do
programa, apenas tem atributos diferentes, isto dar vrios nomes ao mesmo
campo na memria do programa.
BOOK BOOK BOOK BOOK
Este comando permite que certas variveis ou procedimentos (BOOK) sejam
incorporados ao programa na compilao, facilitando e diminuindo a redundncia
de reas de trabalho e cdigos nos programas fontes. O comando COPY pode ser
codificado em todas as divises e sees do programa.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
FILE SECTION.
COPY NOME-DO-ARQUIVO.
WORKING-STORAGE SECTION.
COPY NOME-DA-AREA REPLACING ==WK== BY ==LK==.
PROCEDURE DIVISION.
COPY NOME-DA-ROTINA.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 ESTRUTURA-DE-DADOS.
05 ITEM PIC 9(05) OCCURS 15 TIMES.
Nota Nota Nota Nota
Chamamos de MONO-DIMENSIONAL a tabela que tem em sua estrutura
somente uma clusula OCCURS.
Tabela Tabela Tabela Tabela Multidimensional Multidimensional Multidimensional Multidimensional
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 ESTRUTURA-DE-DADOS.
05 FILLER OCCURS 100 TIMES.
10 ITEM1 PIC 9(05).
10 ITEM2 PIC X(07) OCCURS 20 TIMES.
Nota Nota Nota Nota
Chamamos de BIDIMENSIONAL a tabela que tem em sua estrutura dois
OCCURS, multidimensionais so tabelas com vrios OCCURS.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
23 24
PROCEDURE PROCEDURE PROCEDURE PROCEDURE DIVISION DIVISION DIVISION DIVISION
A quarta e ltima diviso do COBOL onde definimos os procedimentos
(comandos e instrues) que sero a resoluo de problemas de processamentos,
composta por sees e/ou pargrafos e sentenas que orientaro o fluxo de
execuo das informaes.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION [USING AREA-1, AREA-2 ...].
Parmetros Parmetros Parmetros Parmetros
Onde Onde Onde Onde: :: : O parmetro USING se refere a rea de comunicao entre programas,
normalmente entre programas principais e subprogramas.
Importante Importante Importante Importante: :: : AREA-1, AREA-2 so variveis de trabalho definidas na LINKAGE
SECTION do subprograma e na WORKING-STORAGE SECTION do
programa principal.
Accept Accept Accept Accept
O comando ACCEPT recebe uma informao de dados, dependendo das
clusulas que completam o comando podero ser: ESTRUTURA DE DADOS,
Recebendo Recebendo Recebendo Recebendo data data data data do do do do sistema sistema sistema sistema
Este comando recebe a data do sistema no formato de AAMMDD, onde o DD
o dia, MM o ms e AA o ano da data corrente do sistema.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 DATA-DO-SISTEMA.
05 ANO-DA-DATA PIC 9(02) VALUE ZEROS.
05 MES-DA-DATA PIC 9(02) VALUE ZEROS.
05 DIA-DA-DATA PIC 9(02) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT DATA-DO-SISTEMA FROM DATE.
Recebendo Recebendo Recebendo Recebendo quantidade quantidade quantidade quantidade de de de de dias dias dias dias do do do do ano ano ano ano
Este comando recebe a data do sistema no formato de AADDD, onde o AA o
ano corrente, e DDD a quantidade de dias decorridos no ano.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 DIAS-DO-ANO.
05 ANO-DA-DATA PIC 9(02) VALUE SEROS.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
DATA DO SISTEMA, DIAS DO ANO, DIA DA SEMANA e TEMPO.
Recebendo Recebendo Recebendo Recebendo dados dados dados dados do do do do JCL JCL JCL JCL
Esta comando recebe uma rea de dados da SYSIN do JOB de execuo do
programa, no COBOL II do MAINFRAME este comando NO recebe dados
digitados na tela, devemos assinalar uma rea de entrada no JCL.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 ESTRUTURA-DE-DADOS.
05 ITEM-DE-DADO1 PIC X(05) VALUE SPACES.
05 ITEM-DE-DADO2 PIC 9(03) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT ESTRUTURA-DE-DADOS.
05 ANO-DA-DATA PIC 9(02) VALUE SEROS.
05 DIAS-DA-DATA PIC 9(03) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT DIAS-DO-ANO FROM DAY.
Recebendo Recebendo Recebendo Recebendodiadasemana diadasemana diadasemana diadasemana
EstecomandorecebeodiadasemananocampoDIA-DA-SEMANAqueum
camponumricode1posio.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 DIA-DA-SEMANA PIC 9(01) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT DIA-DA-SEMANA FROM DAY-OF-WEEK.
DIA-DA_SEMANAconterosvalores:
1=SEGUNDA;2=TERA;3=QUARTA;4=QUINTA;5=SEXTA-FEIRA
6=SBADO;7=DOMINGO.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
25 26
Recebendo Recebendo Recebendo Recebendo a aa a hora hora hora hora
Esta opo recebe o tempo corrente do sistema no formato de HHMMSSCC, onde
o HH so as horas, MM so os minutos, SS so os segundos e CC so os
centsimos de segundos correntes.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 HORA-DO-SISTEMA.
05 HORAS PIC 9(02) VALUE ZEROS.
05 MINUTOS PIC 9(02) VALUE ZEROS.
05 SEGUNDOS PIC 9(02) VALUE ZEROS.
05 CENTESIMOS PIC 9(02) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT HORA-DO-SISTEMA FROM TIME.
Movimentao Movimentao Movimentao Movimentao correspondente correspondente correspondente correspondente
Este comando copia o contedo de um determinado campo em uma estrutura
para outro campo de mesmo nome em outra estrutura.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
01 ESTRUTURA1.
05 VARIAVEL1 PIC X(10).
05 VARIAVEL2 PIC 9(07).
01 ESTRUTURA2.
05 VARIAVEL2 PIC 9(04).
05 VARIAVEL1 PIC X(03).
PROCEDURE DIVISION.
MOVE CORRESPONDING ESTRUTURA1 TO ESTRUTURA2.
Resultado Resultado Resultado Resultado da da da da movimentao movimentao movimentao movimentao: :: :
CAMPO CAMPO CAMPO CAMPO ESTRUTURA ESTRUTURA ESTRUTURA ESTRUTURA1 11 1 ESTRUTURA ESTRUTURA ESTRUTURA ESTRUTURA2 22 2
-- -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - -- -- -- -- - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- -
Move Move Move Move
Este comando copia o contedo de um determinado campo para outro campo
definido no mesmo programa.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
MOVE VARIAVEL1 TO VARIAVEL2
MOVE CONSTANTE-FIGURATIVA TO VARIAVEL1
MOVE LITERAL TO VARIAVEL1.
-- -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - -- -- -- -- - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- -
Campo Campo Campo Campo 1 11 1 CASA CASA CASA CASA 0057 0057 0057 0057
Campo Campo Campo Campo 2 22 2 0000057 0000057 0000057 0000057 CAS CAS CAS CAS
Nota Nota Nota Nota
Os campos devem conter as mesmas caractersticas, mas no necessitam ter o
mesmo tamanho.
definido no mesmo programa.
Nota Nota Nota Nota
VARIAVEL1: VARIAVEL1: VARIAVEL1: VARIAVEL1:VariveldefinidanaFILESECTION,naWORKING-STORAGE
SECTIONounaLINKAGESECTION.
VARIAVEL2: VARIAVEL2: VARIAVEL2: VARIAVEL2: Idemacima
CONSTANTE CONSTANTE CONSTANTE CONSTANTE- -- -FIGURATIVA:L FIGURATIVA:L FIGURATIVA:L FIGURATIVA:LOW-VALUES,HIGH-VALUES,SPACE(S),
ZERO(S),ALL.
LITERAL: LITERAL: LITERAL: LITERAL: 'ABC','A','*',1,...9
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
27 28
Regras Regras Regras Regras de de de de movimentaes movimentaes movimentaes movimentaes
Existem algumas regras de movimentaes entre os campos numa programao
COBOL, de modo geral elas se aplicam entre campos de configuraes diferentes.
As regras so:
CASO CASO CASO CASO 1 11 1
Campo Campo Campo Campo emissor emissor emissor emissor: :: : ALFANUMRICO
Campo Campo Campo Campo receptor receptor receptor receptor: :: : ALFANUMRICO
Resultado Resultado Resultado Resultado: :: : Sem restries, atentando somente se o campo receptor for menor que
o campo emissor os dados sero truncados direita, caso seja maior ser
completado com espaos direita.
CASO CASO CASO CASO 2 22 2
Campo Campo Campo Campo emissor emissor emissor emissor: :: : ALFANUMRICO
Campo Campo Campo Campo receptor receptor receptor receptor: :: : NUMRICO zonado sem casas decimais
Resultado Resultado Resultado Resultado: :: : Se o campo emissor for do mesmo tamanho e o contedo for numrico
a movimentao ter sucesso, caso contrrio os resultados sero inesperados.
CASO CASO CASO CASO 3 33 3
Campo Campo Campo Campo emissor emissor emissor emissor: :: : ALFANUMRICO
Campo Campo Campo Campo receptor receptor receptor receptor: :: : NUMRICO zonado com casas decimais
Resultado Resultado Resultado Resultado: :: : No Permitido.
CASO CASO CASO CASO 7 77 7
Campo Campo Campo Campo emissor emissor emissor emissor: :: : NUMRICO zonado com casas decimais
Campo Campo Campo Campo receptor receptor receptor receptor: :: : ALFANUMRICO
Resultado Resultado Resultado Resultado: :: : No Permitido.
CASO CASO CASO CASO 8 88 8
Campo Campo Campo Campo emissor emissor emissor emissor: :: : NUMRICO compactado com ou sem casas decimais
Campo Campo Campo Campo receptor receptor receptor receptor: :: : ALFANUMRICO
Resultado Resultado Resultado Resultado: :: : No Permitido.
Display Display Display Display
Exibe o contedo de uma varivel podendo ser concatenada com uma literal, o
contedo da varivel ser exibida num dispositivo de sada.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
DISPLAY LITERAL1 VARIAVEL1 VARIAVEL2
Parmetros Parmetros Parmetros Parmetros
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Resultado Resultado Resultado Resultado: :: : No Permitido.
CASO CASO CASO CASO 4 44 4
Campo Campo Campo Campo emissor emissor emissor emissor: :: : ALFANUMRICO
Campo Campo Campo Campo receptor receptor receptor receptor: :: : NUMRICO COMPACTADO
Resultado Resultado Resultado Resultado: :: : No Permitido.
CASO CASO CASO CASO 5 55 5
Campo Campo Campo Campo emissor emissor emissor emissor: :: : NUMRICO
Campo Campo Campo Campo receptor receptor receptor receptor: :: : NUMRICO
Resultado Resultado Resultado Resultado: :: : Sem restries, atentando somente se o campo receptor for menor que
o campo emissor os dados sero truncados esquerda, caso seja maior ser
completado com zeros esquerda.
CASO CASO CASO CASO 6 66 6
Campo Campo Campo Campo emissor emissor emissor emissor: :: : NUMRICO zonado sem casas decimais
Campo Campo Campo Campo receptor receptor receptor receptor: :: : ALFANUMRICO
Resultado Resultado Resultado Resultado: :: : Sem restries, atentando somente se o campo zonado receptor for
menor que o campo emissor, os dados sero truncados direita, caso seja maior
ser completado com espaos direita.
Parmetros Parmetros Parmetros Parmetros
VARIAVEL VARIAVEL VARIAVEL VARIAVEL1 11 1/ // /2 22 2: Varivel que ser exibida num dispositivo de sada (SYSOUT)
LITERAL LITERAL LITERAL LITERAL1 11 1: :: : Constante no numrica (entre aspas)
Exemplo Exemplo Exemplo Exemplo
DISPLAY NOME DO ALUNO = WK-NOME-ALUNO
DISPLAY NOTA DO ALUNO = WK-NOTA-ALUNO
Resultado Resultado Resultado Resultado
NOME DO ALUNO = JOSE DA SILVA NOTA DO ALUNO = 10
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
29 30
Stop Stop Stop Stop
Usado para encerrar um programa em execuo ou causar uma parada
temporria, passamos o controle ao sistema operacional ou ao operador do
sistema..
Add Add Add Add
O comando ADD adicionar valores numricos ou campos numricos em outros
campos numricos que ficaro armazenados na memria do programa, no
ser permitido a somatria de campos cuja a definio (PICTURE) seja
alfabtica ou alfanumrica.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
ADD VARIAVEL1 TO VARIAVEL2 VARIAVEL3
[ON SIZE ERROR Comandos...]
END-ADD
Parmetros Parmetros Parmetros Parmetros
VARIAVEL VARIAVEL VARIAVEL VARIAVEL1 11 1 : :: : Item de dado que ser adicionado
TO TO TO TO: :: : Indica qual(ais) o(s) campo(s) que acumular(o) o valor do campo
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
STOP LITERAL1.
STOP RUN.
Nota Nota Nota Nota
H dois tipos de parada de programa, a parada temporria informando o operador
de alguma anomalia ou aviso (LITERAL1), neste caso o programa continuar
executando aps a interveno do operador, ou a parada definitiva do programa
que ser ocasionada pelo parmetro RUN.
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL usando os comandos:
ACCEPT(receber), MOVE(mover), DISPLAY(exibir) e STOP RUN (parar
processamento).
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
NOME-DO-DADO1.
VARIAVEL VARIAVEL VARIAVEL VARIAVEL2 22 2, ,, ,3 33 3 : :: : Item de dado que receber(o) o valor doa VARIAVEL1
ON ON ON ON SIZE SIZE SIZE SIZE ERROR ERROR ERROR ERROR: :: : Trata da condio de estouro de campo, isto ocorre
quando o tamanho do(s) campo(s) receptor(es) no comporta(m) o resultado
da somatria, com a omisso desta clusula o(s) resultado(s) ser(o)
truncado(s) a esquerda .
END END END END- -- -ADD ADD ADD ADD : :: : Encerra o comando ADD, quando a clusula ON SIZE ERROR for
especificada.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROGRAM-ID. PRGB??1.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
WORKING-STORAGE SECTION.
77 WK-NOME PIC X(35) VALUE SPACES.
77 WK-IDADE PIC 9(02) VALUE ZEROS.
*-------------------------------------------------------*
PROCEDURE DIVISION.
000-00-ROTINA-INICIAL.
ACCEPT WK-NOM
MOVE 27 TO WK-IDADE
DISPLAY 'O NOME INFORMADO FOI : ' WK-NOME ' '
' E A IDADE INFORMADA FOI DE : ' WK-IDADE ANOS!'
STOP RUN.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
31 32
Subtract Subtract Subtract Subtract
Esta instruo subtrai um ou mais itens numricos de outros itens numricos.
Existem 3 formatos deste comando, como veremos abaixo.
CASO CASO CASO CASO 1 11 1: :: :
Parmetros Parmetros Parmetros Parmetros
CASO CASO CASO CASO 1 11 1: :: : Ser subtrado o primeiro operando do segundo operando, o resultado
ser armazenado no primeiro operando
CASO CASO CASO CASO 2 22 2: :: : O resultado da subtrao ser armazenado nos campos da clusula
GIVING
CASO CASO CASO CASO 3 33 3: :: : Numa estrutura de item de grupo somente sero subtrados os
campos que contenham correspondentes entre as duas estruturas, o resultado
ser armazenado nos itens correspondentes da primeira estrutura.
ROUNDED ROUNDED ROUNDED ROUNDED: :: : Os resultados sero arredondados pelo sistema 5/4
ON ON ON ON SIZE SIZE SIZE SIZE ERROR ERROR ERROR ERROR: :: : Caso o tamanho do campo receptor no comportar o
resultado da operao, os comandos desta clusula sero executados.
Divide Divide Divide Divide
Efetua a diviso de um dado numrico por outro obtendo o quociente e o resto,
podendo arredondar o resultado.
CASO CASO CASO CASO 1 11 1: :: :
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SUBTRACT VARIAVEL1 FROM VARIAVEL2 [ROUNDED]
[ON SIZE ERROR Comandos...]
END-SUBTRACT
OU
SUBTRACT LITERAL1 FROM VARIAVEL2 [ROUNDED]
[ON SIZE ERROR Comandos...]
END-SUBTRACT
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
CASO CASO CASO CASO 2 22 2: :: :
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
PROCEDURE DIVISION.
SUBTRACT VARIAVEL1 FROM VARIAVEL2
GIVING VARIAVEL3 [ROUNDED]
[ON SIZE ERROR Comandos...]
END-SUBTRACT
OU
SUBTRACT LITERAL1 FROM VARIAVEL2 [ROUNDED]
GIVING VARIAVEL3 [ROUNDED]
[ON SIZE ERROR Comandos...]
END-SUBTRACT
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SUBTRACT CORRESPONDING ITEM-GRUPO1 FROM ITEM-GRUPO2 [ROUNDED]
[ON SIZE ERROR Comandos...]
END-SUBTRACT
CASO CASO CASO CASO 3 33 3: :: :
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
DIVIDE VARIAVEL1 INTO VARIAVEL2 [ROUNDED]
[ON SIZE ERROR Comandos...]
[END-DIVIDE]
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
DIVIDE VARIAVEL1 INTO VARIAVEL2 [ROUNDED]
[ON SIZE ERROR Comandos...]
[END-DIVIDE]
CASO CASO CASO CASO 2 22 2: :: :
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
33 34
CASO 3:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
DIVIDE VARIAVEL1 INTO VARIAVEL2
GIVING VARIAVEL3 [ROUNDED]
[REMAINDER VARIAVEL4]
[ON SIZE ERROR Comandos...]
[END-DIVIDE]
CASO 4:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
CASO CASO CASO CASO 1 11 1 : :: : O resultado da diviso de VARIAVEL2 por VARIAVEL1 ser
armazenado em VARIAVEL2.
CASO CASO CASO CASO 2 22 2 : :: : O resultado da diviso de VARIAVEL2 pela LITERAL1 ser
armazenado em VARIAVEL2, neste caso a LITERAL1 dever ser um nmero
inteiro.
CASO CASO CASO CASO 3 33 3 : :: : O resultado da diviso de VARIAVEL2 por VARIAVEL1 ser
armazenado em VARIAVEL3, neste caso aparece a clusula REMAINDER que
serve para armazenar o resto desta operao na VARIAVEL4.
CASO CASO CASO CASO 4 44 4 : :: : O resultado da diviso da VARIAVEL2 pela LITERAL ser
armazenado no VARIAVEL3, neste caso aparece a clusula REMAINDER que
serve para armazenar os inteiros restantes desta operao no campo
VARIAVEL4, como no CASO2 a LITERAL1 dever ter um nmero diferente de
zero.
ON ON ON ON SIZE SIZE SIZE SIZE ERROR ERROR ERROR ERROR : :: : Ser acionada se o campo receptor no suportar o resultado
da diviso (estouro de campo)
ROUNDED ROUNDED ROUNDED ROUNDED : :: : Ser usado o sistema de 5/4 de arredondamento.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
DIVIDE VARIAVEL2 BY LITERAL1
GIVING VARIAVEL3 [ROUNDED]
[REMAINDER VARIAVEL4]
[ON SIZE ERROR Comandos...]
[END-DIVIDE]
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
35 36
Multiply Multiply Multiply Multiply
Esta instruo multiplica itens numricos e coloca o resultado num identificador
dependendo do formato usado.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
MULTIPLY VARIAVEL1 BY VARIAVEL2
[GIVING VARIAVEL3 [ROUNDED]]
[ON SIZE ERROR Comandos... ]
[END-MULTIPLY]
OU
MULTIPLY LITERAL1 BY VARIAVEL2
[GIVING VARIAVEL3 [ROUNDED]]
[ON SIZE ERROR Comandos... ]
[END-MULTIPLY]
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
WORKING-STORAGE SECTION.
77 VARIAVEL1 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL2 PIC 9(07)V99 VALUE ZEROS.
77 VARIAVEL... PIC 9(07)V99 VALUE ZEROS.
PROCEDURE DIVISION.
COMPUTE VARIAVEL1 VARIAVEL2 ... [ROUNDED]
= (VARIAVEL3 - VARIAVEL4 )
/ (VARIAVEL5 + VARIAVEL6 )
Compute Compute Compute Compute
Este comando serve para fazer as operaes aritmticas de vrios campos
numricos e o resultado ficar armazenado em uma nica varivel tambm
numrica. As expresses aritmticas usadas neste comando so: Soma (+),
Subtrao (-), Diviso (/), Multiplicao (*) e Exponenciao (**), bem como as
combinaes de parnteses ( ), dando uma sequencia de execuo nos
clculos aritmticos
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Parmetros Parmetros Parmetros Parmetros
GIVING GIVING GIVING GIVING : :: : O resultado ser armazenado na varivel indicada por este parmetro,
se este parmetro for omitido o resultado ser armazenado no primeiro
parmetro do comando, exceto se este for uma literal.
ROUNDED ROUNDED ROUNDED ROUNDED : :: : O resultado ser arredondado pelo sistema 5/4
ON ON ON ON SIZE SIZE SIZE SIZE ERROR ERROR ERROR ERROR : :: : Os comandos desta clausula sero acionados caso o campo
receptor (VARIAVEL3) no comportar o resultado da multiplicao
[END-MULTIPLY]
* (VARIAVEL7 ** 2)
[ON SIZE ERROR Comandos...]
END-COMPUTE.
Parmetros Parmetros Parmetros Parmetros
ROUNDED: ROUNDED: ROUNDED: ROUNDED: IndicaoresultadodaexpressoaritmticanoVARIAVEL1,ser
arredondadopelosistemade5/4.
ON ON ON ON SIZE SIZE SIZE SIZE ERROR ERROR ERROR ERROR: :: : Caso o resultado exceder o tamanho mximo do campo
VARIAVEL1 os comandos deste parmetro sero acionados.
.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
37 38
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL usando os comandos:
ADD (somar), SUBTRACT (subtrair), DIVIDE (dividir), MULTIPLY (multiplicar) e
COMPUTE (Computar).
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??2.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
ENVIRONMENT DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
WORKING-STORAGE SECTION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
77 VAR-1 PIC 9(02) VALUE 1.
77 VAR-2 PIC 9(02) VALUE 7.
77 VAR-3 PIC 9(02) VALUE ZEROS.
77 VAR-4 PIC 9(02) VALUE ZEROS.
Initialize Initialize Initialize Initialize
Este comando inicializa uma rea de dados, podendo mover espao para os
itens alfanumricos e zeros para os itens numricos, ou se for necessrio
valores diferentes de zeros e espao.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
INITIALIZE VARIAVEL1 VARIAVEL2
CASO CASO CASO CASO 1 11 1: :: :
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
INITIALIZE VARIAVEL1 VARIAVEL2
REPLACING [ ALPHABETIC / ALPHANUMERIC /
NUMERIC / VARIAVEL3 ]
DATA BY [ CONSTANTE / LITERAL ]
END-INITIALIZE
CASO CASO CASO CASO 2 22 2: :: :
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
77 VAR-4 PIC 9(02) VALUE ZEROS.
77 VAR-5 PIC 9(02) VALUE ZEROS.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
000-00-ROTINA-CALCULAR.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
ADD 5 TO VAR-1
DISPLAY 'RESULTADO DA ADICAO = ' VAR-1
SUBTRACT 2 FROM VAR-2
DISPLAY 'RESULTADO DA SUBTRACAO = ' VAR-2
DIVIDE VAR-1 BY 2 GIVING VAR-3
DISPLAY 'RESULTADO DA DIVISAO = ' VAR-3
MULTIPLY 3 BY VAR-1 GIVING VAR-4
DISPLAY 'RESULTADO DA MULTIPLICACAO = ' VAR-4
COMPUTE VAR-5 = VAR-3 + 10 5
DISPLAY 'RESULTADO DA EXPRESSAO = ' VAR-5
STOP RUN.
Parmetros Parmetros Parmetros Parmetros
CASO CASO CASO CASO 1 11 1: :: : VARIAVEL1/2 - Sero inicializadas segundo suas PIC's, os campos
alfanumricos sero inicializados com espao, e os numricos com zeros. Se
for um item grupo, tudo que for elementar a ele ser limpo
CASO CASO CASO CASO 2 22 2: :: : VARIAVEL1/2 - Dever ser um item de grupo (Nvel 01), as
inicializaes dos campos pertencentes a esta estrutura sero: REPLACING
selecionar somente os campos da estrutura:
ALPHABETIC = Campos com PICTURE A(nn)
ALPHANUMERIC = Campos com PICTURE X(nn)
NUMERIC = Campos com PICTURE 9(nn) com ou sem sinal
DATA BY = Trocar os campos selecionados pela clusula
REPLACING pelo contedo do campo VARIAVEL3, por uma literal ou por uma
constante figurativa com exceo do ALL.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
39 40
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL utilizando o comando
INITIALIZE (inicializar), que tem por funo atribuir valores iniciais variveis.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??3.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* USANDO NESTE MODULO - LIMPANDO AREAS DE TRABALHO INITIALIZE*
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
WORKING-STORAGE SECTION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
01 WK-AREA.
05 AREA-1 PIC 9(02) VALUE 03.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-2 PIC X(03) VALUE 'ABC'.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-3 PIC X(02) VALUE 'SP'.
05 FILLER PIC X(01) VALUE '*'.
05 AREA-4 PIC 9(02) VALUE 01.
Inspect Inspect Inspect Inspect
Esta instruo especifica que caracteres em um item de dados sero contados
TALLYING (CASO 1), substitudos REPLACING (CASO 2) ou ambos, podendo
ser contado a ocorrncia de um caractere especfico (zeros, spaces, asterisco,
etc.) em uma varivel, podendo tambm ser preenchido o todo ou parte desta
varivel com zeros ou spaces.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
INSPECT VARIAVEL1 TALLYING VARIAVEL2
FOR [ALL / LEADING / CHARACTERS]
[LITERAL1 / CONSTANTE]
[AFTER / BEFORE] INITIAL
[LITERAL2 / CONSTANTE / VARIAVEL3]
CASO CASO CASO CASO 1 11 1: :: :
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
CASO CASO CASO CASO 2 22 2: :: :
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
05 AREA-4 PIC 9(02) VALUE 01.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-5 PIC X(01) OCCURS 3 TIMES
VALUE '#'.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
000-00-INICIO.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DISPLAY 'CONTEUDO INICIAL DA AREA = ' WK-AREA
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
INITIALIZE WK-AREA REPLACING NUMERIC DATA BY 7
DISPLAY 'TROCANDO OS CAMPO NUMERICOS POR 7 = ' WK-AREA
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
INITIALIZE WK-AREA REPLACING ALPHANUMERIC DATA BY '%'
DISPLAY 'TROCANDO OS CAMPO ALFA POR %% = ' WK-AREA
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
INITIALIZE WK-AREA
DISPLAY 'LIMPANDO OS CAMPOS PELO DEFAULT = ' WK-AREA.
STOP RUN.
Parmetros Parmetros Parmetros Parmetros
CASO CASO CASO CASO 1 11 1: :: : A contagem que a inspeo far na VARIAVEL1 ser armazenada na
VARIAVEL2, as condies de contagem ser dada pela clusula FOR que
poder ser:
FIRST = Somente o primeiro caractere da VARIAVEL1.
ALL = Todos os caracteres da VARIAVEL1.
LEADING = Os primeiros caracteres do VARIAVEL1 at que seja encontrado
um caractere igual ao informado no segundo parmetro desta clusula.
AFTER = A contagem somente comear a ter incio aps o caractere
mencionado no segundo parmetro.
BEFORE = A contagem ter efeito at encontrar o caractere mencionado no
segundo parmetro.
PROCEDURE DIVISION.
INSPECT VARIAVEL1 REPLACING [LEADING / FIRST]
[VARIAVEL2 / LITERAL1 / CONSTANTE]
BY [VARIAVEL3 / LITERAL2 / CONSTANTE]
INITIAL [VARIAVEL4 / LITERAL3 / CONSTANTE]
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
41 42
Parmetros Parmetros Parmetros Parmetros Continuao Continuao Continuao Continuao do do do do INSPECT INSPECT INSPECT INSPECT
CASO CASO CASO CASO 2 22 2: :: : A troca que a inspeo far na VARIAVEL1 ser comandada pelas
condies do primeiro parmetro da clusula REPLACING, trocando os dados que
forem iguais ao segundo pelo terceiro parmetro, as condies do primeiro
parmetros so:
FIRST = Somente o primeiro caractere da VARIAVEL1.
ALL = Todos os caracteres da VARIAVEL1.
LEADING = Os primeiros caracteres da VARIAVEL1 at que seja encontrado
um caractere igual ao informado no segundo parmetro desta clusula.
AFTER = A troca somente comear a ter incio aps o caractere mencionado
no segundo parmetro.
BEFORE = A troca ter efeito at encontrar o caractere mencionado no
segundo parmetro.
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL utilizando o comando
INSPECT (inspecionar), que tem por funo avaliar / trocar dados de variveis.
IF IF IF IF
Este comando avalia uma ou mais condies e prove aes alternativas na
execuo do programa, dependendo do resultado da(s) avaliao(es).
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
IF [VARIAVEL1 / LITERAL1 / CONSTANTE]
[NOT] LESS / GREATER / EQUAL CONSTANTE
[NEXT SENTENCE] ou [Comandos1... ]
[ELSE]
[NEXT SENTENCE] ou [Comandos2... ]
END-IF
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??3.
Parmetros Parmetros Parmetros Parmetros
LESS LESS LESS LESS: :: : Se o primeiro operando for menor que o segundo, sero executado(s)
o(s), (Comandos1), se no forem, os comandos depois do ELSE sero
executados (Comandos2).
GREATER GREATER GREATER GREATER: :: : Se o primeiro operando for maior que o segundo, sero
executado(s) o(s), (Comandos1), se no forem, os comandos depois do ELSE
sero executados (Comandos2).
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
PROGRAM-ID. PRGB??3.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* USANDO NESTE MODULO - INSPECIONADO UMA AREA DE TRABALHO *
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WK-AREA.
05 AREA-1 PIC X(02) VALUE SPACES.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-2 PIC X(03) VALUE 'ABC'.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-3 PIC X(02) VALUE 'SP'.
05 FILLER PIC X(01) VALUE '*'.
05 AREA-4 PIC 9(02) VALUE 01.
05 FILLER PIC X(01) VALUE SPACES.
05 AREA-5 PIC X(01) OCCURS 3 TIMES VALUE '#'.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
000-00-INICIO.
DISPLAY 'CONTEUDO INICIAL DA AREA = WK-AREA
INSPECT WK-AREA REPLACING LEADING ' ' BY '$'
DISPLAY 'INSPECIONANDO OS PRIMEIROS ESPACOS = ' WK-AREA
INSPECT WK-AREA REPLACING ALL ' ' BY '$'
DISPLAY 'INSPECIONANDO TODOS OS ESPACOS = WK-AREA
STOP RUN.
sero executados (Comandos2).
EQUAL EQUAL EQUAL EQUAL: :: : Se o primeiro operando for igual ao segundo sero executado(s) o(s),
(Comandos1), se no forem, os comandos depois do ELSE sero executados
(Comandos2).
NEXT NEXT NEXT NEXT SENTENCE SENTENCE SENTENCE SENTENCE: :: : Esta clusula faz com que o desvio de procedimentos do
IF seja direcionado aps o primeiro perodo (ponto) abaixo do mesmo.
Evaluate Evaluate Evaluate Evaluate
Este comando permite que possamos substituir uma estrutura de IF's pelo uso
de uma estrutura CASE, pois neste caso quando uma condio de seleo for
satisfatria as demais no sero executada
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
EVALUATE VARIAVEL1 = VARIAVEL2
ALSO VARIAVEL3 = LITERAL1
WHEN TRUE ALSO FALSE Comandos...
WHEN FALSE ALSO ANY Comandos...
END-EVALUATE
CASO CASO CASO CASO 1 11 1: :: :
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
43 44
CASO 2: Formato Formato Formato Formato: :: : BSICO:Somente ser executado uma vez as instrues do
pargrafo, seo ou instrues ao PERFORM.
A clusula THRU indicar a sada da rotina, quando ela especificada toda vez
que o controle passar pelo NOME-DA-ROTINA2 o PEFORM ser encerrado,
retornando para a instruo logo aps o PERFORM.
Podemos usar tambm a clausula TIMES TIMES TIMES TIMES tanto no OUT-LINE quanto no
IN-LINE, veja exemplo abaixo:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
PERFORM NOME-DE-ROTINA1 [THRU NOME-DE-ROTINA2]
LITERAL-NUMERICA TIMES
PERFORM LITERAL-NUMERICA TIMES
[Comandos... ]
END-PERFORM
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
EVALUATE VARIAVEL1
WHEN '1 Comandos...
[WHEN OTHER] Comandos...
END-EVALUATE
CASO CASO CASO CASO 1 11 1: :: : As clusulas TRUE / FALSE / ANY esto diretamente relacionados com
a comparao do EVALUATE, pois podemos verificar se as comparaes so
respectivamente verdadeiras / falsas ou nenhuma.
CASO CASO CASO CASO 2 22 2: :: : Este exemplo usado para substituir IF's no programa. A clusula
OTHER ser acionada somente se nenhuma condio anterior for satisfeita.
Perform Perform Perform Perform
A instruo PERFORM transfere explicitamente o controle a um ou mais
procedimentos, este procedimentos podem ser uma instruo ou um conjunto de
instrues num pargrafo ou seo do programa (rotinas), aps a execuo
desta(s) instruo(es) o controle do programa volta a instruo seguinte a
Nota Nota Nota Nota
Formato Formato Formato Formato: :: : Com a opo TIMES sero executadas as instrues do PERFORM o
nmero de vezes indicada pela literal-numrica, tambm podemos especificar
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
instruo PERFORM. H dois tipos e quatro formatos desta instruo.
PERFORM PERFORM PERFORM PERFORM OUT OUT OUT OUT- -- -LINE LINE LINE LINE
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
PERFORM NOME-DE-ROTINA1 [THRU NOME-DE-ROTINA2]
PERFORM IN-LINE
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
PERFORM
[Comandos... ]
END-PERFORM
OUT OUT OUT OUT- -- -LINE LINE LINE LINE: Sero executados as instrues de uma rotina
IN IN IN IN- -- -LINE LINE LINE LINE :Sero executados as instrues que estiverem entre a clusula
PERFORM e seu respectivo END-PERFORM.
Cadeias de PERFORM's podero ser combinados, importante saber que no
devemos usar ponto final nas instrues que estiverem entre o PERFORM e o
END-PERFORM
nmero de vezes indicada pela literal-numrica, tambm podemos especificar
uma varivel nmerica com um determinado vcalor prdefinido.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
45 46
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PERFORM [WITH TEST [BEFORE / AFTER ]
VARYING [VARIAVEL1 / INDEX1 / LITERAL1]
FROM [VARIAVEL2 / INDEX2 / LITERAL2]
BY [VARIAVEL3 / VARIAVEL4]
UNTIL [CONDIO1 / LITERAL3]
AFTER INDEX3 FROM VARIAVEL5
BY [VARIAVEL6 / VARIAVEL4]
UNTIL [INDEX3 / CONDIO2]
[Comandos... ]
END-PERFORM.
Usando a clausula UNTIL tanto no OUT-LINE quanto no IN-LINE a sintaxe ficar:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
PERFORM NOME-DE-ROTINA1 [THRU NOME-DE-ROTINA2]
[WITH TEST [BEFORE / AFTER ]
UNTIL CONDIO1 [NOT] EQUAL/LESS/GREATER CONDIO2
PERFORM [WITH TEST [BEFORE / AFTER ]
UNTIL CONDIO1
[NOT] EQUAL / LESS / GREATER CONDIO2 [Comandos... ]
END-PERFORM
Nota Nota Nota Nota
Formato Formato Formato Formato : :: : Com a opo UNTIL sero executadas as instrues do pargrafo, ao
PERFORM, at que a CONDICAO1 seja satisfeita, a CONDICAO1 poder ser
uma VARIAVEL (numrica ou alfanumrica), LITERAL ou CONSTANTE-
FIGURATIVA (exceto ALL) o mesmo acontece com a CONDICAO2.
Obs Obs Obs Obs: A clausula UNTIL segue o mesmo formato da clausula IF, podendo usar OR,
Nota Nota Nota Nota
Formato Formato Formato Formato: :: : Com a opo VARYING sero executadas as instrues do pargrafo
ao PERFORM, a VARIAVEL1 / INDEX1 sero incrementados com o valor da
LITERAL2 / VARIAVEL2 ou INDEX2 automaticamente at que a CONDICAO1
seja satisfeita, no caso de uma pesquisa em uma tabela bidimensional a
clusula AFTER valer para evoluir automaticamente a pesquisa do segundo
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Obs Obs Obs Obs: A clausula UNTIL segue o mesmo formato da clausula IF, podendo usar OR,
AND.
Podemos tambm utilizar a clausula VARYING VARYING VARYING VARYING para fazermos incrementaes
automticas em variveis numricas.
clusula AFTER valer para evoluir automaticamente a pesquisa do segundo
nvel.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
PERFORM NOME-DE-ROTINA1 [THRU NOME-DE-ROTINA2]
[WITH TEST [BEFORE / AFTER ]
VARYING [VARIAVEL1 / INDEX1 / LITERAL1]
FROM [VARIAVEL2 / INDEX2 / LITERAL2]
BY [VARIAVEL3 / VARIAVEL4]
UNTIL [CONDIO1 / LITERAL3]
AFTER INDEX3 FROM VARIAVEL5
BY [VARIAVEL6 / VARIAVEL4]
UNTIL [INDEX3 / CONDIO2]
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
47 48
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL utilizando uma tabela e
sua pesquisa est sendo feita sob controle de um looping. Estamos usando os
comandos PERFORM UNTIL (processar at) e IF (se).
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??5.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* USANDO NESTE MODULO - TABELA INTERNA (OCCURS) *
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
WORKING-STORAGE SECTION.
77 WK-MES PIC 9(02) VALUE ZEROS.
77 I PIC S9(02) COMP VALUE ZEROS.
01 MESES.
05 FILLER PIC X(11) VALUE '01JANEIRO'.
05 FILLER PIC X(11) VALUE '02FEVEREIRO'.
05 FILLER PIC X(11) VALUE '03MARCO'.
05 FILLER PIC X(11) VALUE '04ABRIL'.
05 FILLER PIC X(11) VALUE '05MAIO'.
05 FILLER PIC X(11) VALUE '06JUNHO'.
05 FILLER PIC X(11) VALUE '07JULHO'.
05 FILLER PIC X(11) VALUE '08AGOSTO'.
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL utilizando uma tabela e
sua pesquisa est sendo feita sob controle de um looping. Estamos usando o
comando EVALUATE.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??5.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* USANDO NESTE MODULO - TABELA INTERNA (OCCURS) *
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DATA DIVISION.
WORKING-STORAGE SECTION.
77 WK-MES PIC 9(02) VALUE ZEROS.
77 I PIC S9(02) COMP VALUE ZEROS.
01 MESES.
05 FILLER PIC X(11) VALUE '01JANEIRO'.
05 FILLER PIC X(11) VALUE '02FEVEREIRO'.
05 FILLER PIC X(11) VALUE '03MARCO'.
05 FILLER PIC X(11) VALUE '04ABRIL'.
05 FILLER PIC X(11) VALUE '05MAIO'.
05 FILLER PIC X(11) VALUE '06JUNHO'.
05 FILLER PIC X(11) VALUE '07JULHO'.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
05 FILLER PIC X(11) VALUE '08AGOSTO'.
05 FILLER PIC X(11) VALUE '09SETEMBRO'.
05 FILLER PIC X(11) VALUE '10OUTUBRO'.
05 FILLER PIC X(11) VALUE '11NOVEMBRO'.
05 FILLER PIC X(11) VALUE '12DEZEMBRO'.
01 AREA-MESES REDEFINES MESES.
05 TABELA-MESES OCCURS 12.
10 TAB-MES PIC 9(02).
10 TAB-DESCRICAO-MES PIC X(09).
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
000-00-INICIO.
MOVE 07 TO WK-MES
MOVE 01 TO I
PERFORM UNTIL I GREATER 12
IF TAB-MES(I) EQUAL WK-MES
DISPLAY ' MES = ' TAB-DESCRICAO-MES(I)
MOVE 99 TO I
END-IF
ADD 1 TO I
END-PERFORM.
IF I EQUAL 13
DISPLAY ' MES = ' WK-MES ' NAO ENCONTRADO'
END-IF
STOP RUN.
05 FILLER PIC X(11) VALUE '07JULHO'.
05 FILLER PIC X(11) VALUE '08AGOSTO'.
05 FILLER PIC X(11) VALUE '09SETEMBRO'.
05 FILLER PIC X(11) VALUE '10OUTUBRO'.
05 FILLER PIC X(11) VALUE '11NOVEMBRO'.
05 FILLER PIC X(11) VALUE '12DEZEMBRO'.
01 AREA-MESES REDEFINES MESES.
05 TABELA-MESES OCCURS 12.
10 TAB-MES PIC 9(02).
10 TAB-DESCRICAO-MES PIC X(09).
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
49 50
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
000-00-INICIO.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
DISPLAY ' *------------------------------* '
DISPLAY ' * INICIO DO PROGRAMA PROG002 * '
DISPLAY ' *------------------------------* '
MOVE 01 TO I
PERFORM UNTIL I GREATER 12
EVALUATE TAB-MES(I)
WHEN 01
DISPLAY TAB-MES(I) ' ' TAB-DESCRICAO-MES(I)
WHEN 12
DISPLAY TAB-MES(I) ' ' TAB-DESCRICAO-MES(I)
WHEN OTHER
DISPLAY TAB-MES(I) ' OUTROS MESES '
END-EVALUATE
ADD 1 TO I
END-PERFORM
DISPLAY ' *------------------------------* '
DISPLAY ' * FIM DO PROGRAMA PROG002 * '
DISPLAY ' *------------------------------* '
STOP RUN.
Parmetros Parmetros Parmetros Parmetros
NOME-DA-ROTINA : Endereo no programa onde desviado o controle do
processamento. A clausula DEPENDING DEPENDING DEPENDING DEPENDING ON ON ON ON executa um desvio na sequencia
lgica do programa, podendo desviar para vrios pargrafos, dependendo do
contedo numrico de um campo X XX X, se o contedo de for 1 o controle ser
transferido para NOME-DA-ROTINA-1. Se o contedo do for 2 o controle ser
transferido para NOME-DA-ROTINA-2 e assim sucessivamente.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
IDENTIFICATION DIVISION.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROGRAM-ID. PRGB??7.
ENVIRONMENT DIVISION.
*-------------------------------------------------------*
* USANDO NESTE MODULO - DESVIO INCONDICIONAL (GO TO) *
*-------------------------------------------------------*
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*-------------------------------------------------------*
DATA DIVISION.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
STOP RUN.
GO GO GO GO TO TO TO TO
Este comando executa um desvio na sequencia lgica do programa, passando o
controle do programa para outro pargrafo, porem possui maior utilizao em
programas lineares e modulares. Na programao estruturada o uso deste
comando no necessrio.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
IF WK-X GREATER WK-Y GO TO NOME-DA-ROTINA.
...
NOME-DA-ROTINA.
[Comandos... ]
IF WK-X GREATER WK-Y
GO TO NOME-DA-ROTINA-1 NOME-DA-ROTINA-2 DEPENDING ON X.
NOME-DA-ROTINA-1.
[Comandos... ]
NOME-DA-ROTINA-2.
[Comandos... ]
DATA DIVISION.
*-------------------------------------------------------*
WORKING-STORAGE SECTION.
01 PARAMETRO PIC 9(02) VALUE ZEROS.
*-------------------------------------------------------*
PROCEDURE DIVISION.
*-------------------------------------------------------*
000-00-INICIO.
DISPLAY '*----------------------------------------*'
DISPLAY '* INICIO DO PROGRAMA - PROG014 *'
DISPLAY '*----------------------------------------*'
ACCEPT PARAMETRO
PERFORM UNTIL PARAMETRO = 99
IF PARAMETRO EQUAL 01
GO TO 100-00-UM
ELSE
IF PARAMETRO EQUAL 02
GO TO 200-00-DOIS
ELSE
DISPLAY 'NAO HOUVE DESVIO PARA ' PARAMETRO
END-IF
END-IF
ACCEPT PARAMETRO
END-PERFORM.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
51 52
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*--------------------------------------------------------
100-00-UM.
DISPLAY
'O FLUXO DO PROGRAMA FOI DESVIADO PARA 100-00-UM'
GO TO 300-00-TESTE-DEPENDING-ON.
*--------------------------------------------------------
200-00-DOIS.
DISPLAY
'O FLUXO DO PROGRAMA FOI DESVIADO PARA 200-00-DOIS'
GO TO 300-00-TESTE-DEPENDING-ON.
*--------------------------------------------------------
300-00-TESTE-DEPENDING-ON.
GO TO 300-10-UM
300-20-DOIS
DEPENDING ON PARAMETRO.
*--------------------------------------------------------
300-10-UM.
DISPLAY
'O FLUXO DO PROGRAMA FOI DESVIADO PARA 300-10-UM'
GO TO 999-99-FIM.
*--------------------------------------------------------
300-20-DOIS.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
SET INDICE TO [VARIAVEL/LITERAL NUMERICA]
SET INDICE DOWN BY [VARIAVEL/LITERAL NUMERICA]
SET INDICE UP BY [VARIAVEL/LITERAL NUMERICA]
Set Set Set Set
Usado para posicionar, decrementar ou incrementar um ndice de uma tabela
indexada. Respectivamente so: SET, SET DOWN BY, SET UP BY.
Parmetros Parmetros Parmetros Parmetros
Search Search Search Search
Este comando utilizado para fazer uma pesquisa sequencial em uma tabela
interna, iniciando onde o indexador da tabela estiver apontando.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
SEARCH OCORRENCIAS [VARYING INDICE1/VARIAVEL1]
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
300-20-DOIS.
DISPLAY
'O FLUXO DO PROGRAMA FOI DESVIADO PARA 300-20-DOIS'
GO TO 999-99-FIM.
*--------------------------------------------------------
999-99-FIM.
DISPLAY '*----------------------------------------*'
DISPLAY '* FIM DO PROGRAMA - PROG014 *'
DISPLAY '*----------------------------------------*'
STOP RUN.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
WORKING-STORAGE SECTION.
01 ESTRUTURA-DE-DADOS.
05 ITEM1 PIC 9(05) OCCURS 100
ASCENDING KEY ITEM1
INDEXED BY INDICE1.
Search Search Search Search
Este comando utilizado para fazer uma pesquisa binria em uma tabela
(ARRAY) , iniciando onde o indexador da tabela estiver apontando, tabela
indexada pelo ndice indicado na clusula INDEXED BY.
SEARCH OCORRENCIAS [VARYING INDICE1/VARIAVEL1]
AT END
[Comandos... ]
WHEN [ITEM1 / LITERAL / VARIAVEL2
[NOT] LESS / EQUAL / GREATER
[LITERAL / VARIAVEL3 / CONSTANTE]
[Comandos... ]
WHEN [ITEM2 / LITERAL / VARIAVEL4
[NOT] LESS / EQUAL / GREATER
[LITERAL / VARIAVEL4 / CONSTANTE]
[Comandos... ]
END-SEARCH
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
53 54
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
PROCEDURE DIVISION.
SEARCH ALL OCORRENCIAS
AT END
[Comandos... ]
WHEN [ITEM1 / LITERAL / VARIAVEL1
[NOT] LESS / EQUAL / GREATER
[LITERAL / VARIAVEL2 / CONSTANTE]
[Comandos... ]
WHEN [ITEM2 / LITERAL / VARIAVEL3
[NOT] LESS / EQUAL / GREATER
[LITERAL / VARIAVEL4 / CONSTANTE]
[Comandos... ]
END-SEARCH
Parmetros Parmetros Parmetros Parmetros
OCORRENCIAS OCORRENCIAS OCORRENCIAS OCORRENCIAS: :: : Pode ser um item subordinado a outro item que contenha a
clusula OCCURS, isto , ele pode ser parte de uma tabela bi ou multidimensional.
Neste caso a entrada da descrio dos dados deve especificar a opo INDEXED
BY para cada dimenso da tabela. O OCORRENCIAS deve se referir a todas as
ocorrncias dentro da tabela, isto , ele no pode ser subscrito ou indexado,
dever conter a clusula OCCURS com a opo INDEXED BY. Portanto, para
pesquisar inteiramente uma tabela bi ou multidimensional, necessrio executar
uma instruo SEARCH para cada dimenso. Antes de cada execuo, a
instruo SET deve ser executada para reinicializar os ndices associados.
Pesquisando Pesquisando Pesquisando Pesquisando uma uma uma uma tabela tabela tabela tabela
VARYING VARYING VARYING VARYING: :: : Durante a execuo, a instruo SEARCH modificar os valores do
INDICE1 ou a VARIAVEL1.
AT AT AT AT END END END END: :: : Esta clusula ser acionada quando o elemento da pesquisa no for
encontrado, o controle do processamento ser passado para os comandos
especificados nela. Se esta clusula no for especificada, o controle ser passado
para a prxima instruo aps o end-search.
WHEN WHEN WHEN WHEN: :: : A(s) condio(es) na opo desta clusula so avaliadas na ordem em
Esta instruo executa uma pesquisa binria. O ndice de pesquisa no
necessita ser inicializado pela instruo SET, porque seu posicionamento
variado durante a operao de pesquisa, de forma que seu valor em nenhum
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
WHEN WHEN WHEN WHEN: :: : A(s) condio(es) na opo desta clusula so avaliadas na ordem em
que foram codificadas, se nenhuma condio for satisfeita, o ndice para o
identifier-1 incrementado para apontar o prximo elemento da tabela e o
processo repetido novamente, se aps a avaliao, uma das condies do
WHEN for satisfeita, a pesquisa terminada e os comandos associados aquela
condio executado. O ndice aponta para o elemento da tabela que satisfez a
condio. Se NEXT SETENCE foi especificado, o controle ser passado para a
prxima instruo aps o END-SEARCH.
IMPORTANTE IMPORTANTE IMPORTANTE IMPORTANTE: As combinaes de OR e AND so vlidas nesta clusula.
variado durante a operao de pesquisa, de forma que seu valor em nenhum
momento menor do que o primeiro elemento e nem maior que o ltimo
elemento. Quando uma tabela com muitos elementos tiver a chave classificada
em ordem ascendente ou descendente, e no consecutiva, recomendado o
uso da instruo SEARCH ALL. Nesse processo a tabela dividida ao meio e
verificado em qual das metades poder estar a chave. Essa metade dividida
em duas novamente, e assim sucessivamente at encontrar o elemento ou
concluir que ele no existe. O ndice usado sempre aquele associado ao
primeiro ndice especificado na clusula OCCURS.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
55 56
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*-------------------------------------------------------*
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGB??8.
*-------------------------------------------------------*
* PESQUISA DE TABELA DE UMA DIMENSO *
* USANDO NESTE MODULO - TABELA INTERNA (OCCURS) *
* REDEFINICAO (REDEFINES) *
* PESQUISA NA TABELA (SEARCH) *
*-------------------------------------------------------*
DATA DIVISION.
*-------------------------------------------------------*
WORKING-STORAGE SECTION.
*-------------------------------------------------------*
77 WK-MES PIC 9(02) VALUE ZEROS.
*-------------------------------------------------------*
01 MESES.
05 FILLER PIC X(11) VALUE '01JANEIRO'.
05 FILLER PIC X(11) VALUE '02FEVEREIRO'.
05 FILLER PIC X(11) VALUE '03MARCO'.
05 FILLER PIC X(11) VALUE '04ABRIL'.
05 FILLER PIC X(11) VALUE '05MAIO'.
05 FILLER PIC X(11) VALUE '06JUNHO'.
Chamando Chamando Chamando Chamando um um um um Subprograma Subprograma Subprograma Subprograma
O comando CALL usado para incorporar ao programa principal (LINK) um
subprograma. A sua principal funo a redundncia de cdigos em vrios
programas, podendo assim, vrios programas usarem a mesma sub-rotina
(subprograma), no necessitando reescrever os cdigos a cada novo programa.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
WORKING-STORAGE SECTION.
01 VARIAVEL1 PIC X(08) VALUE 'PRGS011'.
01 VARIAVEL2.
05 NOME-ITEM-1 PIC X(10) VALUE SPACES.
05 NOME-ITEM-2 PIC 9(05) VALUE ZEROS.
PROCEDURE DIVISION.
CALL 'SUBPRG1' USING VARIAVEL2
OU
CALL VARIAVEL1 USING VARIAVEL2
Parmetros Parmetros Parmetros Parmetros
USING USING USING USING : :: : Indica a rea que servir de comunicao entre o programa principal e
CASO 1
CASO 2
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
05 FILLER PIC X(11) VALUE '06JUNHO'.
05 FILLER PIC X(11) VALUE '07JULHO'.
05 FILLER PIC X(11) VALUE '08AGOSTO'.
05 FILLER PIC X(11) VALUE '09SETEMBRO'.
05 FILLER PIC X(11) VALUE '10OUTUBRO'.
05 FILLER PIC X(11) VALUE '11NOVEMBRO'.
05 FILLER PIC X(11) VALUE '12DEZEMBRO'.
01 AREA-MESES REDEFINES MESES.
05 TABELA-MESES OCCURS 12 INDEXED BY I.
10 TAB-MES PIC 9(02).
10 TAB-DESCRICAO-MES PIC X(09).
*------------------------------------------------------*
PROCEDURE DIVISION.
*------------------------------------------------------*
000-00-INICIO.
MOVE 07 TO WK-MES
SET I TO 1
SEARCH TABELA-MESES AT END
DISPLAY 'MES = ' WK-MES ' NAO ENCONTRADO '
WHEN TAB-MES(I) = WK-MES
DISPLAY 'MES = ' TAB-DESCRICAO-MES(I)
END-SEARCH
STOP RUN.
o subprograma, definida na WORKING-STORAGE SECTION
CASO CASO CASO CASO 1 11 1: :: : Chamada esttica, esta chamada incorpora na linkedio do programa
principal o executvel do subprograma, a desvantagem dessa modalidade que
se houver alteraes no subprograma, devemos compilar todos os programas
principais que usarem o subprograma. CASO CASO CASO CASO 2 22 2: :: : Chamada dinmica, esta
chamada incorpora o executvel do subprograma ao programa principal em
tempo de execuo do mesmo, tornando assim, disponvel a ltima verso do
subprograma, se este sofreu modificaes.
Procedimentos Procedimentos Procedimentos Procedimentos no no no no Subprograma Subprograma Subprograma Subprograma
Esta instruo usada para subprogramas (programas chamados por CALL
num programa principal) para devolver o controle (retornar) ao programa
principal, logo aps a instruo CALL.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
57 58
Procedimentos Procedimentos Procedimentos Procedimentos no no no no Subprograma Subprograma Subprograma Subprograma
Esta instruo usada para subprogramas (programas chamados por CALL num
programa principal) para devolver o controle (retornar) ao programa principal, logo
aps a instruo CALL.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
LINKAGE SECTION.
01 VARIAVEL.
05 NOME-ITEM-1 PIC X(10).
05 NOME-ITEM-2 PIC 9(05).
PROCEDURE DIVISION USING VARIAVEL.
Comandos...
EXIT PROGRAM. ou GOBACK.
Parmetros Parmetros Parmetros Parmetros
USING USING USING USING: :: : Indica a rea que servir de comunicao entre o subprograma e o
principal, ser definida na LINKAGE SECTION e referenciada na PROCEDURE
DIVISION, note que a rea tem que ter o mesmo formato da WORKING-
STORAGE SECTION do programa principal, podendo ter nomes diferentes.
EXIT/GOBACK EXIT/GOBACK EXIT/GOBACK EXIT/GOBACK: :: : Retorna para o programa que chamou, passando a rea da
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL, programa principal
(CHAMADOR) que chama um subprograma (CHAMADO) para pesquisa em uma
tabela.Usando o comando CALL.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*--------------------------------------------------------*
IDENTIFICATION DIVISION.
*--------------------------------------------------------*
PROGRAM-ID. PRGB??9P.
ENVIRONMENT DIVISION.
*--------------------------------------------------------*
* PROGRAMA PRINCIPAL - PASSARA O NUMERO DO MES *
* SUB-PROGRAMA - ENVIARA O NOME DO MES *
* USANDO NESTE MODULO - CHAMADA A SUB-PROGRAMA (CALL) *
*--------------------------------------------------------*
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*--------------------------------------------------------*
DATA DIVISION.
*--------------------------------------------------------*
WORKING-STORAGE SECTION.
*--------------------------------------------------------*
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
EXIT/GOBACK EXIT/GOBACK EXIT/GOBACK EXIT/GOBACK: :: : Retorna para o programa que chamou, passando a rea da
LINKAGE SECTION.
*--------------------------------------------------------*
01 WK-PARAMETRO.
05 WK-MES PIC 9(02) VALUE ZEROS.
05 WK-DESCRICAO-MES PIC X(30) VALUE SPACES.
*--------------------------------------------------------*
PROCEDURE DIVISION.
*--------------------------------------------------------*
000-00-INICIO.
DISPLAY '*--------------------------------------*'
DISPLAY '* INICIO DO PROGRAMA PRGB??9P *'
DISPLAY '*--------------------------------------*'
ACCEPT WK-PARAMETRO
PERFORM UNTIL MES = 99
CALL 'PRGB??9S' USING WK-PARAMETRO
DISPLAY WK-MES ' ' WK-DESCRICAO-MES
ACCEPT WK-PARAMETRO
END-PERFORM
DISPLAY '*--------------------------------------*'
DISPLAY '* FIM DO PROGRAMA PRGB??9P *'
DISPLAY '*--------------------------------------*'
STOP RUN.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
59 60
Abaixo Abaixo Abaixo Abaixo veremos o exemplo de um programa em COBOL, do subprograma, que
pesquisa a tabela e retorna para o programa principal o nome do ms.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
*-------------------------------------------------------*
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG??9S.
*-------------------------------------------------------*
* PROGRAMA PRINCIPAL - PASSARA O NUMERO DO MES *
* SUB-PROGRAMA - ENVIARA O NOME DO MES *
* USANDO NESTE MODULO - CHAMADA A SUB-PROGRAMA (CALL) *
*-------------------------------------------------------*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MESES.
05 FILLER PIC X(11) VALUE '01JANEIRO'.
05 FILLER PIC X(11) VALUE '02FEVEREIRO'.
05 FILLER PIC X(11) VALUE '03MARCO'.
05 FILLER PIC X(11) VALUE '04ABRIL'.
05 FILLER PIC X(11) VALUE '05MAIO'.
05 FILLER PIC X(11) VALUE '06JUNHO'.
05 FILLER PIC X(11) VALUE '07JULHO'.
05 FILLER PIC X(11) VALUE '08AGOSTO'.
Abrindo Abrindo Abrindo Abrindo um um um um arquivo arquivo arquivo arquivo
O comando OPEN abre os arquivos que foram declarados na clusula SELECT da
INPUT-OUTPUT SECTION, pois devemos tratar todos os arquivos declarados no
programa como se fossem um LIVRO, que para ler ou escrever alguma pgina
temos que inicialmente abri-los.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
OPEN INPUT NOME-DO-ARQUIVO.
OPEN OUTPUT NOME-DO-ARQUIVO.
OPEN EXTEND NOME-DO-ARQUIVO.
OPEN I-O NOME-DO-ARQUIVO.
Parmetros Parmetros Parmetros Parmetros
INPUT INPUT INPUT INPUT: :: : O arquivo ser somente aberto para leitura dos registros
OUTPUT OUTPUT OUTPUT OUTPUT: :: : O arquivo ser somente aberto gravao dos registros.
EXTEND EXTEND EXTEND EXTEND: :: : O arquivo ser aberto somente para gravao e os dados sero
gravados aps o ltimo registro existente no arquivo, este comando somente
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
05 FILLER PIC X(11) VALUE '09SETEMBRO'.
05 FILLER PIC X(11) VALUE '10OUTUBRO'.
05 FILLER PIC X(11) VALUE '11NOVEMBRO'.
05 FILLER PIC X(11) VALUE '12DEZEMBRO'.
01 AREA-MESES REDEFINES MESES.
05 TABELA-MESES OCCURS 12 ASCENDING KEY TAB-MES
INDEXED BY I.
10 TAB-MES PIC 9(02).
10 TAB-DESCRICAO-MES PIC X(09).
*-------------------------------------------------------*
LINKAGE SECTION.
01 LK-PARAMETRO.
05 LK-MES PIC 9(02).
05 LK-DESCRICAO-MES PIC X(30).
*-------------------------------------------------------*
PROCEDURE DIVISION USING LK-PARAMETRO.
000-00-INICIO.
SEARCH ALL TABELA-MESES
AT END
MOVE 'MES NAO ENCONTRADO ' TO LK-DESCRICAO-MES
WHEN TAB-MES(I) = LK-MES
MOVE TAB-DESCRICAO-MES(I) TO LK-DESCRICAO-MES
END-SEARCH
GOBACK.
gravados aps o ltimo registro existente no arquivo, este comando somente
valido para arquivos sequencias.
I II I- -- -O OO O: :: : O arquivo ser aberto para leitura, gravao e excluso de registros, este
comando somente poder ser usado em arquivos indexados (VSAM).
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
61 62
Parmetros Parmetros Parmetros Parmetros
INTO INTO INTO INTO : :: : utilizado quando definimos a estrutura (layout do arquivo) na WORKING-
STORAGE SECTION, os definidos na FD no necessitam desta clusula.
AT AT AT AT END END END END: :: : Trata da condio de FIM DE ARQUIVO, executando os comandos que
esto entre este parmetro at o END-READ.
Lendo Lendo Lendo Lendo um um um um arquivo arquivo arquivo arquivo
O comando READ READ READ READ executa a leitura do arquivo j aberto pelo comando OPEN.
Somente aps executarmos a leitura, que teremos acesso s informaes
contidas nos registros dos arquivos. Na leitura sequencial de um arquivo, os
registros sero lidos do primeiro ao ltimo, sem pular nenhum registro.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
READ NOME-DO-ARQUIVO [INTO VARIAVEL]
[AT END... Comandos... ]
[INVALID KEY ... Comando...]
[END-READ]
Parmetros Parmetros Parmetros Parmetros
FROM: FROM: FROM: FROM: GravaocontedodavarivelVARIAVEL-1noregistro doarquivo,
movendoocontedodadiretaparaaesquerda.
PAGE: PAGE: PAGE: PAGE: Indicarumsaldodepgina,obedecendoaclusulaAFTERou
BEFOREADVANCING,poderemostambmindicarosaltodepginadeclarada
noSPECIAL-NAMES,Ex:C01ISSALTO-DE-PAGINA
WRITELINHAFROMCAB1AFTERSALTO-DE-PAGINA
AFTERADVANCING: AFTERADVANCING: AFTERADVANCING: AFTERADVANCING: Antesdeimprimirumalinhadorelatrio,saltaronmero
delinhasindicadosnaVARIAVEL-2ounaLITERAL-NUMERICA(de01a99).
BEFOREADVANCING: BEFOREADVANCING: BEFOREADVANCING: BEFOREADVANCING: Depoisdeimprimirumalinhadorelatrio,saltaro
nmerodelinhasindicadonaVARIAVEL-2ounaLITERAL-NUMERICA.
INVALIDKEY: INVALIDKEY: INVALIDKEY: INVALIDKEY: Usadodetectarqualquererrodegravao(faltadeespao,errode
I-O),oscomandosdestaclausulaseroacionados.
Fechando Fechando Fechando Fechando um um um um arquivo arquivo arquivo arquivo
O comando CLOSE fecha os arquivos que foram declarados na clusula SELECT
da INPUT-OUTPUT SECTION e ABERTOS (OPEN) no incio do programa, este
comando comumente usado no final do processamento do programa.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
esto entre este parmetro at o END-READ.
INVALIDF KJEY: Registro no encontrado numa leitura direta num arquivo VSAM
indexado.
END END END END- -- -READ READ READ READ: :: : Encerra o comando READ, quando a clusula AT END for
especificada.
Nota Nota Nota Nota
Esta leitura ser para arquivos abertos como INPUT de acesso SEQUENCIAL.
Gravando um arquivo
O comando WRITRE utilizado para gravar ou imprimir registros de informaes,
um arquivo aberto com OUTPUT ou I-O.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
WRITE NOME-REGISTRO [FROM VARIAVEL-1]
[INVALID KEY... Comandos... ]
END-WRITE
WRITE NOME-REGISTRO FROM VARIAVEL-1
[AFTER / BEFORE] PAGE
WRITE NOME-REGISTRO [FROM VARIAVEL-1]
AFTER [ADVANCING] VARIAVEL-2 LINES
BEFORE [ADVANCING] LITERAL-NUMERICA LINES
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
CLOSE NOME-DO-ARQUIVO1 NOME-DO-ARQUIVO2 ... .
Nota Nota Nota Nota
O fechamento dos arquivos independe do tipo de abertura.
Selecionando Selecionando Selecionando Selecionando um um um um VSAM VSAM VSAM VSAM
A clausula SELECT do COBOL para um VSAM sofre algumas modificaes,
conforme descritas abaixo:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT NOME-DO-ARQUIVO ASSIGN TO NOME-EXTERNO
ORGANIZATION IS INDEXED
ACCESS MODE [SEQUENTIAL/RANDOM/DYNAMIC]
RECORD KEY CHAVE-DO-REGISTRO
[FILE STATUS IS FILE-STATUS-DO-ARQUIVO].
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
63 64
Parmetros Parmetros Parmetros Parmetros
ACCESS ACCESS ACCESS ACCESS MODE MODE MODE MODE: :: :
SEQUENTIAL : O arquivo s poder ser lido sequencialmente.
RANDOM : O arquivo s poder ser lido diretamente pela chave especificada.
DYMANIC : Ambos acessos acima.
RECORD RECORD RECORD RECORD KEY KEY KEY KEY : :: : Indica qual ser a chave de acesso do arquivo, normalmente a
FD contm estas informaes.
Nota Nota Nota Nota
Somente os arquivos de organizao indexada podero conter as clusulas
RANDOM, DYMANIC e RECORD KEY.
Regravao Regravao Regravao Regravao do do do do VSAM VSAM VSAM VSAM
Este comando utilizado para regravar registros de informaes, um dispositivo
de entrada e sada (I-O).
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
REWRITE NOME-DE-REGISTRO [FROM VARIAVEL1]
Parmetros Parmetros Parmetros Parmetros
INVALIDKEY: INVALIDKEY: INVALIDKEY: INVALIDKEY:TratadacondiodeNOENCONTRADO,executandoos
comandosqueestoentreesteparmetroatoEND-DELETE.
END END END END- -- -DELETE: DELETE: DELETE: DELETE:EncerraocomandoDELETE,quandoaclusulaINVALIDKEYfor
especificada.
Nota Nota Nota Nota
EstecomandoserparaarquivosABERTOScomoI-OdeacessoSEQUENCIAL,
RANDOMICOouDINMICO,serexcludooregistrocujoovalorserinformado
naRECORDKEY.
Selecionando Selecionando Selecionando Selecionando um um um um SORT SORT SORT SORT
A definio de um arquivo para classificao poder ser feita via JCL usando o
utilitrio SORT, ou internamente a um programa definindo-o como qualquer
arquivo no COBOL, comeando na FILE-CONTROL como veremos abaixo:
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
[INVALID KEY... Comandos... ]
[END-REWRITE]
Excluso Excluso Excluso Excluso de de de de um um um um registro registro registro registro do do do do VSAM VSAM VSAM VSAM indexado
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
DELETE NOME-DE-ARQUIVO RECORD
[INVALID KEY... Comandos... ]
[END-DELETE]
Parmetros Parmetros Parmetros Parmetros
FROM: FROM: FROM: FROM:RegravaocontedodavarivelVARIAVEL1no registrodoarquivo,
movendoocontedodadireitaparaaesquerda.
INVALIDKEY: INVALIDKEY: INVALIDKEY: INVALIDKEY:Usadoparacontroledeerrodegravao,seocorreralgumerroos
comandosdestaclusulaseroacionados.
Nota Nota Nota Nota
EstecomandoserparaarquivosABERTOScomoI-OdeacessoRANDOMICO,
SEQUENCIALouDINMICO.
FILE-CONTROL.
SELECT NOME-DO-ARQUIVO ASSIGN TO NOME-EXTERNO.
DefinindoumarquivoSORT DefinindoumarquivoSORT DefinindoumarquivoSORT DefinindoumarquivoSORT
Na definio do arquivo de classificao onde, para um arquivo normal
colocaramos FD (FILE DESCRIPTION) colocamos SD (SORT DESCRIPTION),
isto informar ao compilador que este arquivo ser classificado internamente ao
programa.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
DATA DIVISION.
FILE SECTION.
FD NOME-DO-ARQUIVO
[BLOCK CONTAINS nn CHARACTERS ou RECORDS]
[RECORD CONTAINS nn CHARACTERS]
[LABEL RECORD IS STANDARD]
[DATA RECORDS IS NOME-DO-REGISTRO].
01 NOME-DO-REGISTRO.
05 NOME-DO-CAMPO1 PIC 9(05).
05 NOME-DO-CAMPO2 PIC X(30).
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
65 66
Executando Executando Executando Executando um um um um SORT SORT SORT SORT
O comando para classificar o arquivo SORT definido no SD estar na
PROCEDURE DIVISION, este comandos so: SORT, RELEASE e RETURN.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SORT NOME-DO-ARQUIVO
ON [ASCENDING / DESCENDING]
KEY IS NOME-DO-CAMPO1, NOME-DO-CAMPO2
USING NOME-DO-ARQUIVO-ENTRADA
GIVING NOME-DO-ARQUIVO-SAIDA
CASO2: CASO2: CASO2: CASO2:
Com seleo na entrada: O arquivo de entrada ser classificado pelas chaves da
clusula ON (ASCENDING / DESCENDING KEY) podendo haver seleo nos
registros de entrada dependendo das rotinas especificadas na INPUT
PROCEDURE, esta rotina ser uma SECTION.
Parmetros Parmetros Parmetros Parmetros
ON ON ON ON ASCENDING ASCENDING ASCENDING ASCENDING : :: : Chaves de classificao do arquivo SORT do menor para o
maior valor.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SORT NOME-DO-ARQUIVO
ON [ASCENDING / DESCENDING]
KEY NOME-DO-CAMPO1, NOME-DO-CAMPO2
INPUT PROCEDURE IS NOME-DA-ROTINA-ENTRADA
GIVING NOME-DO-ARQUIVO-SAIDA
STOP RUN.
NOME-DA-ROTINA-ENTRADA SECTION.
READ NOME-DO-ARQUIVO-ENTRADA
IF CAMPO-DO-ARQUIVO-DE-ENTRADA ....
...
CASO CASO CASO CASO 1 11 1: :: :
Sem seleo: O arquivo de entrada ser classificado pelas chaves da clusula ON
(ASCENDING / DESCENDING KEY) e ser gerado o arquivo de sada. Para
selecionarmos os registros de entrada e sada temos que ter a clusula
INPUT/OUTPUT PROCEDURE, no caso 1 estas clusulas no esto presente.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
maior valor.
DESCENDING DESCENDING DESCENDING DESCENDING : :: : Chaves de classificao do arquivo SORT do maior para o menor
valor.
USING USING USING USING : :: : Assinalao do arquivo de entrada, este arquivo no precisar ser aberto
ou fechado via comando no programa.
GIVING GIVING GIVING GIVING : :: : Assinalao do arquivo de sada que ser gerado automaticamente aps
os dados serem classificados pelo SORT.
...
RELEASE REG-ARQUIVO-SORT [FROM AREA-DE-TRABALHO].
Parmetros Parmetros Parmetros Parmetros
RELEASE RELEASE RELEASE RELEASE: :: : Comando de gravao do SORT (aps ser classificado) no sendo
necessrio abri-lo ou fech-lo no programa.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
67 68
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SORT NOME-DO-ARQUIVO
ON [ASCENDING / DESCENDING]
KEY NOME-DO-CAMPO1, NOME-DO-CAMPO2
USING NOME-DO-ARQUIVO-ENTRADA
OUTPUT PROCEDURE IS NOME-DA-ROTINA-SAIDA
STOP RUN.
NOME-DA-ROTINA-SAIDA SECTION.
RETURN NOME-DO-ARQUIVO [INTO AREA-DE-TRABALHO]
[AT END ... Comandos]
END-RETURN.
1 1 2 2 2 3 3 4 4 4 5 5 6 6 6 7
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
PROCEDURE DIVISION.
SORT NOME-DO-ARQUIVO
ON [ASCENDING / DESCENDING]
KEY NOME-DO-CAMPO1, NOME-DO-CAMPO2
INPUT PROCEDURE IS NOME-DA-ROTINA-ENTRADA
OUTPUT PROCEDURE IS NOME-DA-ROTINA-SAIDA
STOP RUN.
NOME-DA-ROTINA-ENTRADA SECTION.
READ NOME-DO-ARQUIVO-ENTRADA
IF CAMPO-DO-ARQUIVO-DE-ENTRADA ....
RELEASE REG-ARQUIVO-SORT [FROM AREA-DE-TRABALHO].
CASO CASO CASO CASO 3 33 3: :: :
Com seleo na sada: O arquivo de entrada ser classificado pelas chaves da
clusula ON (ASCENDING / DESCENDING KEY) e ser gerado o arquivo de
sada, que depender da rotina especificada na OUTPUT PROCEDURE, esta
rotina dever ser uma SECTION.
CASO CASO CASO CASO 4 44 4: :: :
Com seleo na entrada e sada: O arquivo de entrada ser classificado pelas
chaves da clusula ON (ASCENDING / DESCENDING KEY) podendo haver
seleo nos registros de entrada dependendo das rotinas especificadas na INPUT
PROCEDURE, e podendo haver seleo nos registros de sada, dependendo das
rotinas especificadas na OUTPUT PROCEDURE, ambas sero SECTIONs.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
END-RETURN.
IF CAMPO-DO-ARQUIVO ...
...
WRITE REG-ARQUIVO-SAIDA
Parmetros Parmetros Parmetros Parmetros
RETURN RETURN RETURN RETURN : :: : Comando de leitura do SORT (aps ser classificado) no necessrio
abri-lo ou fech-lo no programa.
RELEASE REG-ARQUIVO-SORT [FROM AREA-DE-TRABALHO].
END-IF
NOME-DA-ROTINA-SAIDA SECTION.
RETURN NOME-DO-ARQUIVO [INTO AREA-DE-TRABALHO]
[AT END ... Comandos]
END-RETURN.
IF CAMPO-DO-ARQUIVO ...
WRITE REG-ARQUIVO-SAIDA
END-IF
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
69 70
Anexo Anexo Anexo Anexo I II I Palavras Palavras Palavras Palavras Reservadas Reservadas Reservadas Reservadas
SUBSTANTIVOS SUBSTANTIVOS SUBSTANTIVOS SUBSTANTIVOS
ACCESS ACTUAL ADVANCING
ALL ALPHABETIC ALPHANUMERIC
ALTER ALTERNATE AFTER
AND APPLY ARE
AREA AREAS ASCENDING
ASSIGN AT AUTHOR
BEFORE COMMUN COMMA
CHARACTERS COMP COMP-1
COMP-2 COMP-3 COMPUTATIONAL
CONTROL COMPUTATIONAL-1 COMPUTATIONAL-2
COMPUTATIONAL-3 CONSOLE CONFIGURATION
CONSOLE CONTAINS CONTROLS
COPY CORE-INDEX CURRENT-DATE
C01...C12 DATA DATE-WRITTEN
DATE-COMPILED DATE DAY
DECIMAL-POINT DEBUGGING DEBUG
AnexoI AnexoI AnexoI AnexoI PalavrasReservadas PalavrasReservadas PalavrasReservadas PalavrasReservadas
SUBSTANTIVOS SUBSTANTIVOS SUBSTANTIVOS SUBSTANTIVOS
QUOTE QUOTES RANDOM
READY RECORDING RECORD
RECORDS REDEFINES REFERENCE
REMAINDER REEL REMARKS
RENAMES REPLACING RESERVE
RESET RETRUN REWIND
ROUNDED SAME SD
SECTION SECURIT SEEK
SEGMENT-LIMIT SENTENCE SIZE
SKIP1 SKIP2 SKIP3
STANDARD SOURCE-COMPUTER SOURCE
SPACE SPACES SPECIAL-NAMES
START STATUS STOP
SYNC SYCRONIZED SYSIN
SYSIPT SYSLST SYSOUT
SYSPCH SYSPUNCH S01S02
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
DECIMAL-POINT DEBUGGING DEBUG
DECLARATIVES DEPENDING DESCENDING
DIVISION END-IF ERROR
FILE-CONTROL FD FILE-LIMIT
FILE-LIMITS FILLER FINAL
END FIRST GIVING
GREATER HIGH-VALUE HIGH-VALUES
I-OCONTROL I-O ID
IDENTIFICATION INDEX INDEXED
INPUT INPUT-OUTPUT INSTALLATION
INVALID JUST JUSTFIELD
KEY KEYS LABEL
LEFT LESS LIMIT
LIMITS LINKAGE LOCK
MULTIPLE LOW-VALUE LOW-VALUES
MEMORY MODE NEXT
NOTE NUMERIC OUTPUT
OBJECT-COMPUTER OCCURS OMITTED
PAGE PROCEDURE PICTURE
PROCESSING PIC PROGRAM-ID
SYSPCH SYSPUNCH S01S02
TALLY TALLYING TAPE
THAN THEN THRU
TIMES TIME-OF-DAY TRACE
TRACK TRACKS TRANCK-AREA
TRACK-LIMIT TRANSFORM USAGE
UPSI-0...UPSI-7 USE USING
VALUE VALUES VARYING
WHEN WORK
WORKING-STORAGE WITH ZERO
ZEROS
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
71 72
Anexo Anexo Anexo Anexo I II I Palavras Palavras Palavras Palavras Reservadas Reservadas Reservadas Reservadas
COMANDOS COMANDOS COMANDOS COMANDOS
ACCEPT ADD CALL
CANCEL COMPUTE CLOSE
COPY OPEN DISPLAY
DIVIDE INSPECT GOTO
IF INITIALIZE MOVE
MULTIPLY SORT PERFORM
READ RELEASE RETURN
REWRITE RUN SEARCH
STOP SUBTRACT STRING
WRITE TRANSFORM UNSTRING
EVALUATE
CONECTORES CONECTORES CONECTORES CONECTORES
AND ARE AT
BY CORR CORRESPONDING
DOWN ELSE FROM
IN INTO IS
AnexoI AnexoI AnexoI AnexoI NomesdeRotinas NomesdeRotinas NomesdeRotinas NomesdeRotinas
Um nome de rotina um conjunto de no mnimo 1 e no mximo 30 caracteres
que representaro um LABEL (endereo) no programa.
Anexo Anexo Anexo Anexo I II I Sentena Sentena Sentena Sentena das das das das Rotinas Rotinas Rotinas Rotinas
Uma sentena um conjunto de instrues que executaro um servio, uma
sentena composta por comandos, conectores e variveis.
Anexo Anexo Anexo Anexo I II I Caracteres Caracteres Caracteres Caracteres
A codificao COBOL formada por um conjunto bsicos de caracteres:
26 LETRAS (A ~ Z)
10 DGITOS (0 ~ 9)
CARACTERE BRANCO (ESPAO)
PONTO E VRGULA
ASPA OU APSTROFE
PARNTESES
PONTO
VRGULA
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
IN INTO IS
NOT OF OFF
ON OR TO
UNTIL UP
VRGULA
MAIS
MENOS
ASTERISCO
BARRA
IGUAL
CIFRO
MAIOR QUE
MENOR QUE
Anexo Anexo Anexo Anexo I II I Regras Regras Regras Regras de de de de Formao Formao Formao Formao
Existem palavras reservadas do COBOL que veremos no decorrer do curso, e
existem palavras atribudas pelo programador. Na criao delas, o programador
deve obedecer certas regras como:
Tamanho mximo de 30 caracteres, e estes podem ser letras, nmeros e
caracteres especiais;
Iniciar a palavra com uma letra.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
73
Anexo Anexo Anexo Anexo I II I - -- - Literais Literais Literais Literais
So valores constantes utilizados em um programa, existem 2 tipos de literais:
Numrica: composta pelos dgitos de 0 a 9, sinal positivo ou negativo ( + /
) , e seu tamanho mximo de 18 dgitos sem contar os sinais aritmticos nem
vrgula em caso de campos com casas decimais.
Exemplos: 123456789
No numrica: composta por um conjunto de caracteres, esto entre aspas
ou apstrofes e seu tamanho mximo de 120 caracteres excluindo-se as
aspas ou apstrofes:
Exemplos: MFS.SCHOOL' '&*%$#' '097@3'
Anexo Anexo Anexo Anexo I II I - -- - Regras Regras Regras Regras de de de de Pontuao Pontuao Pontuao Pontuao
O compilador COBOL detalhista quanto pontuao utilizada na codificao
de um programa, as regras a seguir so bem parecidas com nossa escrita:
Ao finalizar uma sentena devemos usar um ponto final.
Entre uma palavra e outra devemos usar no mnimo um espao em branco.
Caracteres de clculo ou de comparao devero ser separados por no
mnimo um espao em branco.
Obs: Podemos usar vrgula mas no ter efeito nenhum na execuo da
74
File File File File Ststus Ststus Ststus Ststus
00 Operao realizada com sucesso
02 Operao realizada com sucesso, existe chave duplicada mas a opo
WITH DUPLICATE foi definida
04 READ realizado com sucesso, entretanto, o tamanho do registro lido no
tem o mesmo tamanho descrito na FD do arquivo no programa
10 Fim de arquivo encontrado
22 Tentativa de incluir um registro cuja a chave j existe no arquivo Indexado
23 Tentativa de ler um registro cuja a chave no existe no arquivo Indexado
24 No existe espao no arquivo para mais inseres de registros para
arquivos indexados
30 Erro permanente - normalmente o erro est no JCL
34 No existe espao no arquivo para mais inseres de registros para
arquivos sequenciais
35 Arquivo no existente para o abertura INPUT, EXTEND ou I-O
37 Tipo de abertura no permitido para o arquivo
41 Abertura de um arquivo que j se encontra aberto no mesmo programa
43 Um DELETE ou REWRITE foi executado sem que o arquivo esteja aberto
para I-O, ou, um comando de leitura executado anteriormente no obteve
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Obs: Podemos usar vrgula mas no ter efeito nenhum na execuo da
sentena, ser somente para melhorar o entendimento da sintaxe.
Anexo Anexo Anexo Anexo I II I - -- - Constantes Constantes Constantes Constantes Figurativas Figurativas Figurativas Figurativas
Fazem parte das palavras reservadas do COBOL e possuem um valor.
LOW-VALUES : Menor valor alfanumrico
HIGH-VALUES: Maior valor alfanumrico
SPACE ou SPACES: Caractere branco
ZERO ou ZEROS: Nmero zero
ALL: Transforma uma literal alfanumrica em constante figurativa
(preenche todo contedo de uma varivel com uma constante).
para I-O, ou, um comando de leitura executado anteriormente no obteve
sucesso.
44 Um comando REWRITE foi executado com tamanho diferente ao j
gravado no arquivo.
46 Tentativa de ler um arquivo que no est aberto para INPUT ou I-O ou, o
arquivo encontrou o fim
47 Tentativa de ler um arquivo que no aberto para INPUT ou I-O
48 Tentativa de gravar um registro num arquivo que no foi aberto como
OUTPUT ou I-O
49 Tentativa de excluir ou gravar um registro num arquivo que no foi aberto
como I-O ou OUTPUT respectivamente.
92 Arquivo especificado no JOB e assinalado no programa no existe
93 Falta de memria para executar o programa ou para abrir um arquivo ou o
mesmo est sendo executado em outro programa.