Você está na página 1de 0

CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe

ndice ndice ndice ndice Pgina Pgina Pgina Pgina


Accept 23
Add 30
Book 21
Call 56
Compute 36
Configurao da Folha de Programao 8
Configuration Section 10
Data Division 13
Definindo um arquivo SORT 64
Divide 32
Environment Division 10
Estrutura Lgica do Cobol 4
Execcio com Perform 47
Executando um arquivo SORT 65
Exerccio com Call 58
Exerccio com Evaluate 48
Exerccio com Search 55
File Section 13
COBOL COBOL COBOL COBOL
CO CO CO COmmonB BB BusinessO OO OrientedL LL Language
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
File Section 13
File Status 74
Go To 49
Identification Division 9
IF 42
Initialize 8
Input-Output Section 11
inspect 40
Linkage Section 13
Move 25
Multiply 35
Nmeros de Nveis 15
O Cobol 2
O Nascimento do Cobol 1
Open 60
Palavras Reservadas 69
Palavras 8
Perform 43
Picture 17
Procedure Division 23
StudentGuide StudentGuide StudentGuide StudentGuide
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
ndice ndice ndice ndice Pgina Pgina Pgina Pgina
Read 61
Redefines 21
Regravao do VSAM 63
Search 51
Select de um arquivo VSAM 62
Set 52
Stop 29
Subtract 31
Tabela Monodimensional 22
Tabela Multidimensional 22
Working-Storage Secion 13
Write 61
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
ONascimentodoCobol ONascimentodoCobol ONascimentodoCobol ONascimentodoCobol
1 2
O COBOL foi criado em 1959 pelo CODASYL CODASYL CODASYL CODASYL ( (( (Conference Conference Conference Conference on on on on Data Data Data Data Systems Systems Systems Systems
Language Language Language Language), ), ), ), um dos trs comits propostos numa reunio no Pentgono em
maio de 1959, organizado por Charles Phillips do Departamento de Defesa dos
USA. O CODASYL foi formado para recomendar as diretrizes de uma linguagem
para negcios. Foi constitudo por membros representantes de seis fabricantes de
computadores e trs rgos governamentais, a saber:
Burroughs Burroughs Burroughs Burroughs Corporation Corporation Corporation Corporation , ,, , IBM IBM IBM IBM Honeywell, Honeywell, Honeywell, Honeywell, RCA RCA RCA RCA Sperry Sperry Sperry Sperry Rand Rand Rand Rand e ee e Sylvania Sylvania Sylvania Sylvania Eletric Eletric Eletric Eletric
Products Products Products Products e ee e a aa a Fora Fora Fora Fora Area Area Area Area dos dos dos dos USA, USA, USA, USA, David David David David Taylor Taylor Taylor Taylor Model Model Model Model Basin Basin Basin Basin e ee e a aa a Agncia Agncia Agncia Agncia
Nacional Nacional Nacional Nacional de de de de Padres(National Padres(National Padres(National Padres(National Bureau Bureau Bureau Bureau of of of of Standards Standards Standards Standards ou ou ou ou NBS) NBS) NBS) NBS). .. . Este comit foi
presidido por um membro do NBS. Um comit de Mdio Prazo e outro de longo
prazo foram tambm propostos na reunio do Pentgono. Entretanto, embora tenha
sido formado, o Comit de Mdio Prazo nunca chegou a funcionar; e o Comit de
Longo Prazo nem chegou a ser formado. Por fim, um subcomit do Comit de Curto
Prazo desenvolveu as especificaes da linguagem COBOL. Este subcomit era
formado por seis pessoas: Willian Willian Willian Willian Selden Selden Selden Selden e ee e Gertrude Gertrude Gertrude Gertrude Tiernev Tiernev Tiernev Tiernev da da da da IBM, IBM, IBM, IBM, Howard Howard Howard Howard
Bromberg Bromberg Bromberg Bromberg e ee e Howard Howard Howard Howard Discount Discount Discount Discount da da da da RCA RCA RCA RCA e ee e Vernon Vernon Vernon Vernon Reeves Reeves Reeves Reeves e ee e Jean Jean Jean Jean E EE E. .. . Sammet Sammet Sammet Sammet da da da da
Sylvania Sylvania Sylvania Sylvania Eletric Eletric Eletric Eletric este subcomit completou as especificaes para o COBOL no fim
Uma linguagem de alto nvel, que pode ser executada em vrias plataformas de
computadores pessoais at mainframes, sua codificao estrutural
assemelhando a um livro onde temos divises, sees, pargrafos e sentenas.
Seus comandos so de fcil entendimento humano para isso no escrito em
linguagem de mquina, necessitando de um compilador para transformar seus
cdigos em comandos executveis. Embora o COBOL tenha sido proposto
originalmente como soluo para resolver problemas de programao do governo
e das foras armadas americanas, programas COBOL COBOL COBOL COBOL
1 11 1
continuam em uso na
maioria das empresas comerciais em todo o mundo, notadamente nas instituies
financeiras, e em praticamente todos os sistemas operacionais, incluindo o IBM
z/OS z/OS z/OS z/OS
2 22 2
, o Microsoft Windows Windows Windows Windows e a famlia Unix/Linux Unix/Linux Unix/Linux Unix/Linux. A base global de cdigo
imensa e os aplicativos, de tempos em tempos, so sujeitos a manuteno. O
custo de reescrever um aplicativo COBOL, j depurado, em uma nova linguagem
no justifica os benefcios que possa eventualmente trazer. No fim dos anos 90 o
Gartner Group, uma empresa de pesquisa na rea de processamento de dados,
estimou que dos 300 bilhes de linhas de cdigo-fonte existentes no mundo, 80%
- ou cerca de 240 bilhes de linhas - eram em COBOL. Eles tambm reportaram
OCobol OCobol OCobol OCobol
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
Sylvania Sylvania Sylvania Sylvania Eletric Eletric Eletric Eletric este subcomit completou as especificaes para o COBOL no fim
do ano de 1959. Elas foram inspiradas em grande parte pela linguagem FLOW FLOW FLOW FLOW- -- -
MATIC MATIC MATIC MATIC inventada por Grace Murray Hopper , e pela linguagem COMTRAN COMTRAN COMTRAN COMTRAN da IBM
inventada por Bob Bemer. As especificaes foram aprovadas pelo CODASYL. A
partir da foram aprovadas pelo Comit Executivo em janeiro de 1960, e enviadas
grfica do governo, que as editou e imprimiu com o nome de Cobol 60. O
COBOL foi desenvolvido num perodo de seis meses, e continua ainda em uso
depois de mais de 40 anos
Grace Grace Grace Grace Murray Murray Murray Murray Hopper Hopper Hopper Hopper, (Nascida em New York, 10 de dezembro
de 1906 Arlington -Virginia - Falecida em 01 de janeiro de
1992), foi uma Analista de sistemas da marinha americana nas
dcadas de 1940 e 1950. Foi ela que criou a linguagem de
programao FLOW LOW LOW LOW- -- -MATIC MATIC MATIC MATIC hoje extinta. Esta linguagem serviu
como base para a criao do COBOL COBOL COBOL COBOL. .. .
- ou cerca de 240 bilhes de linhas - eram em COBOL. Eles tambm reportaram
que mais de metade dos novos aplicativos de misso crtica ainda estavam sendo
desenvolvidos usando o COBOL. Ao se aproximar o fim do sculo XX houve uma
febre de atividade de programadores COBOL para corrigir os efeitos do bug bug bug bug do do do do
milnio milnio milnio milnio
3 33 3
, em certos casos em sistemas desenvolvidos por estes mesmos
programadores h dcadas. Este problema foi mais crtico no cdigo COBOL
porque as datas so primordiais em aplicativos comerciais, e a maioria dos
aplicativos comerciais foram escritos em COBOL. Algumas pessoas acreditam
que o uso de aritmtica decimal codificada em binrio fez com que programas
desenvolvidos sem a previso de datas com ano de 4 dgitos ficassem
particularmente vulnerveis a falhas com o problema do ano 2000; entretanto
difcil justificar esta opinio. Outros argumentam que a aritmtica BCD do COBOL
evitou muitos outros problemas que poderiam ocorrer com o uso ingnuo do
ponto ponto ponto ponto flutuante flutuante flutuante flutuante em clculos financeiros. O COBOL provou ser durvel e
adaptvel. O padro atual do COBOL o COBOL2002. O COBOL2002 suporta
agora convenincias modernas como Unicode Unicode Unicode Unicode
4 44 4
, gerao de XML XML XML XML
5 55 5
e conveno de
chamadas de/para linguagens como
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
OCobol OCobol OCobol OCobol- -- - Continuao Continuao Continuao Continuao
3 4
o C CC C, incluso como linguagem de primeira classe em ambientes de
desenvolvimento como o . .. .NET NET NET NET da Microsoft e a capacidade de operar em
ambientes fechados como Java (incluindo COBOL em instncias de EJB EJB EJB EJB
6 66 6
) e
acesso a qualquer base SQL.
EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol
LEGENDA LEGENDA LEGENDA LEGENDA
1 11 1)Cobol )Cobol )Cobol )Cobol (CO CO CO COmmon B BB Business O OO Oriented L LL Language ) - Linguagem de
programao de alto nvel.
2 22 2) )) ) z/OS z/OS z/OS z/OS: :: : (z Operational System) Sistema operacional utilizado nas mquinas
Mainframe srie Z
3 33 3) )) ) Bug Bug Bug Bug do do do do milnio milnio milnio milnio: :: : Campos que continham datas com dois dgitos para do
Ano, na virada do sculo este campo passaria a obter o valor zero, alguns
clculos ou indexao de dados causariam um erro no programa, uma das
solues foi converter este campo para 4 posies contendo o sculo e ano.
4 44 4) )) ) Unicode Unicode Unicode Unicode: um padro que permite aos computadores representar e
Como falamos anteriormente que o Cobol foi elaborado como se fosse um livro, o
Cobol composto de 4 divises nos quais algumas possuem sees e nestas
sees podero conter vrios pargrafos:
IDENTIFICATION IDENTIFICATION IDENTIFICATION IDENTIFICATION DIVISION DIVISION DIVISION DIVISION
Serve para identificar o programa no computador e tambm proporciona
informaes documentais que so de suma importncia para pessoas que no
entendem nada de processamento e queiram analisar superficialmente o
programa.
ENVIRONMENT ENVIRONMENT ENVIRONMENT ENVIRONMENT DIVISION DIVISION DIVISION DIVISION
Far a ligao com o ambiente operacional onde o programa ser executado, faz
a interface dos arquivos lgicos que o programa usar com os arquivos fsicos.
CONFIGURATION CONFIGURATION CONFIGURATION CONFIGURATION SECTION SECTION SECTION SECTION
Esta seo destina-se a configurao do ambiente, ela composta por trs
partes: SOURCE-COMPUTER e OBJECT-COMPUTER.
Uma identifica o computador onde foi confeccionado o programa e a segunda
identifica o computador do ambiente de produo, ambas servem apenas para
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
4 44 4) )) ) Unicode Unicode Unicode Unicode: um padro que permite aos computadores representar e
manipular, de forma
consistente, texto de qualquer sistema de escrita existente.
5 55 5) )) ) XML XML XML XML: :: : (eXtensible Markup Language) uma recomendao da W3C para
gerar linguagens de marcao para necessidades especiais.
6 66 6) )) ) EJB EJB EJB EJB: :: : ( (( (Extensible Java Profiler) so componentes Java distribudos, que
rodam em um servidor de aplicaes. Uma aplicao Java cliente pode
se conectar remotamente a um servidor de aplicaes, instanciar um EJB e
trabalhar com ele como se fosse uma classe local.
identifica o computador do ambiente de produo, ambas servem apenas para
comentrios haja visto que ambas deixaram de ser obrigatrias mas caso o
programador opte em utiliza-las deve escrever sua sintaxe corretamente para
no causar erros de compilao.
SPECIAL-NAMES especfica o sinal monetrio, escolhe o tipo de ponto decimal,
especfica caracteres simblicos e possibilitar adaptar o programa para se
comunicar com programas de outras linguagens e tambm constantes regionais.
INPUT INPUT INPUT INPUT- -- -OUTPUT OUTPUT OUTPUT OUTPUT SECTION SECTION SECTION SECTION
Esta seo destina-se a configurao do ambiente de Leitura e Gravao, ela
possui duas partes:
FILE-CONTROL e I-O-CONTROL.
A primeira destina-se a especificao dos arquivos que o programa ir acessar. A
segunda foi descontinuada nas verses mais atuais do compilador, valendo
apenas para os ambientes de Mainframe.
DATA DATA DATA DATA DIVISION DIVISION DIVISION DIVISION
voltada nica e exclusivamente definio de estruturas de registros, variveis
e constantes do programa, ou seja, uma rea de alocao de memria para todo
o espao necessrio ao seu programa. As duas principais sees so: a FILE
SECTION e a WORKING-STORAGE SECTION.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol
5 6
FILE FILE FILE FILE SECTION SECTION SECTION SECTION
Descreve o contedo e a organizao dos arquivos
FILE-DESCRIPTION (FD) descreve os registro de dados dos arquivos.
SORT-MERGE-FILE-DESCRIPTION (SD) descreve os registros de dados que
sero classificados.
WORKING WORKING WORKING WORKING- -- -STORAGE STORAGE STORAGE STORAGE SECTION SECTION SECTION SECTION
rea para campos que no sejam parte da entrada e sada mas que sero exigidos
no transcorrer do processamento. Incluem constantes, indicadores e reas de
trabalho. Procure utilizar o mnimo de nveis 01 (zero hum) nesta seo, agrupando
o mximo suas variveis. Os nomes associados a itens de grupo ou elementares
devem respeitar as regras de formao de nomes de dados ou seja procure
realmente colocar nomes significativos nestas variveis.
LOCAL LOCAL LOCAL LOCAL- -- -STORAGE STORAGE STORAGE STORAGE SECTION SECTION SECTION SECTION
Nesta seo procure definir todos os INCLUDE das tabelas (SQLCA, DCLGEN's) e
seus CURSORES, tambm podemos ter variveis de todos os nveis, constantes e
book de dados.
COMMUNICATION COMMUNICATION COMMUNICATION COMMUNICATION SECTION SECTION SECTION SECTION
EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol
6 - Quando se faz a ligao entre programas o programa chamado deve conter a
clausula 'LINKAGE SECTION', e seus referidos campos de definio, quanto ao
programa chamador este deve conter os mesmos campos da 'LINKAGE' na
'WORKING-STORAGE' sendo obrigatrio os campos a serem passados estarem
na mesma ordem do programa chamador.
PROCEDURE PROCEDURE PROCEDURE PROCEDURE
Seqncia de instrues que sero executadas no programa, as sees sees sees sees da da da da
procedure procedure procedure procedure division, division, division, division, n nn nesta diviso no existem sees pr-definidas, o
programador poder informar um nmero ilimitados de sees, para isso basta
indicar logo aps uma rotina a palavra SECTION.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
COMMUNICATION COMMUNICATION COMMUNICATION COMMUNICATION SECTION SECTION SECTION SECTION
Estabelece ligaes entre o programa COBOL e programas de controle de
teleprocessamento
REPORT REPORT REPORT REPORT SECTION SECTION SECTION SECTION
Descreve os relatrios a serem gerados. A descrio de cada relatrio comea com
um RD (REPORT DESCRIPTION) e seguido por um ou mais grupo de descrio
dos mesmos
LINKAGE LINKAGE LINKAGE LINKAGE- -- -STORAGE STORAGE STORAGE STORAGE SECTION SECTION SECTION SECTION
utilizada para aceitar dados pelo JCL ou ligar o programa principal a outros
programas.
1 - So validas as regras referentes as apresentadas na 'WORKING-STORAGE
SECTION'.
2 - A clausula 'VALUE' somente pode ser especificada para itens de nvel '88'.
3 - Assume-se que para cada item passado tem que ser de nvel '01' ou nvel '77'
(Limite de full-word).
4 - Pelo 'PARM' pode ser passado at 100 caracteres (Bytes).
5 - Para definio da 'LINKAGE SECTION' quando recebe algum dado pelo 'PARM'
os dois primeiros bytes devem ser definidos como binrio, pois estes bytes contero
o tamanho do 'PARM'.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol EstruturaLgicadoCobol
7 8
ConfiguraodaFolhadeProgramao ConfiguraodaFolhadeProgramao ConfiguraodaFolhadeProgramao ConfiguraodaFolhadeProgramao
COBOL COBOL COBOL COBOL
IDENTIFICATION ENVIRONMENT DATA PROCEDURE
CONFIGURATION
INPUT-OUTPUT
FILE
WORKING-STORAGE
REPORT
VRIAS
SOURCE
COMPUTER
OBJCT
COMPUTER
SPECIAL
NAMES
FILE
CONTROL
I-O
FILE
DESCRIPTION(FD)
SORTMERGE
DESCRIPTION(SD)
SORTMERGE
DESCRIPTION(SD)
O compilador COBOL possui caractersticas posicionais, isto , se de um lado
necessitarmos ordenao de palavras. Divises e sees, de outro necessrio
usar uma estrutura definida da maneira de escrever:
1 - Coluna de 1 a 6 - usadas para numerar as linhas de um programa. a
numerao em uma ordem crescente. opcionalmente podem deixar de ser
preenchidos.
2 - Coluna 7 Pode ser usada para indicar continuao utilizando o (-) hfen, ou
(*) usado para indicar comentrios e a barra (/) usada para salto de pagina qdo
na impresso do fonte.
3 - Colunas 8 a 72 Usadas para os comandos (palavras ou literais) do programa
estas colunas esto agrupadas em duas margens "A" (coluna 8 a 11) e margem
"B" (colunas 12 a 72). Entradas da margem "A" ttulos das divises, das sees,
dos pargrafos. Descries de arquivos ttulos essenciais na Procedure
Division. Os nmeros de nvel como '77' Entradas da margem "B" Espaos entre
as entradas (com o objetivo de comunicao visual) Continuao das entradas.
VRIOS
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
I-O
CONTROL
Divises Sees Pargrafos
Legenda Legenda Legenda Legenda
Palavras Palavras Palavras Palavras
Criadas Criadas Criadas Criadas pelo pelo pelo pelo programador programador programador programador
Palavra uma composio de caracteres escolhidos do conjunto de caracteres
do COBOL. Em comprimento uma palavra no deve exceder a '30' caracteres.
O espao em branco no um caractere permitido para a formao de
palavras. Uma palavra no pode comear nem terminar com um hfen '-,
existem 3 tipos de palavras no COBOL, Exemplo: ROTINA-DE-CALCULO,
VALOR-DO-ITEM
Palavras Palavras Palavras Palavras reservadas reservadas reservadas reservadas
Verbos Verbos Verbos Verbos: :: : ADD, READ, ENTER e etc...
Conectores Conectores Conectores Conectores: :: : BY, FROM, TO e etc.
Palavras Palavras Palavras Palavras de de de de significado significado significado significado especial especial especial especial: :: : NEGATIVE, ZERO e etc.
Conjunto Conjunto Conjunto Conjunto de de de de caracteres caracteres caracteres caracteres validos validos validos validos do do do do COBOL COBOL COBOL COBOL: :: : De '0' ate '9' de 'A' ate 'Z' espaos,
parnteses ( ), menor que(<), maior que(>), ponto, sinal de adio, hfen,
dlar($), arroba(@), igual(=), virgula, barra(/), asterisco(*), apostrofes. (Veja Veja Veja Veja
Anexo Anexo Anexo Anexo I) I) I) I)
1.....7 8...2...6...0...4...8...2...6...0...4...8...2...6...0...4...8...2
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
Divises Divises Divises Divises
9 10
IDENTIFICATION IDENTIFICATION IDENTIFICATION IDENTIFICATION
a primeira das quatro divises, sendo utilizado para identificar o programa, os
dados introduzidos pela 'IDENTIFICATION DIVISION', so tratados pelo
compilador COBOL como comentrios, no sendo traduzidos em linguagem de
maquina, seu formato :
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. NOME DO PROGRAMA.
[AUTHOR. NOME DO PROGRAMADOR.]
[INSTALLATION. LOCAL DE USO OU GERAO DO PROGRAMA.]
[DATE-WRITTEN. DATA EM QUE FOI ESCRITO O PROGRAMA.]
[DATE-COMPILED. DATA EM QUE FOI COMPILADO O PROGRAMA.]
[SECURITY. COMENTARIOS SOBRE A SEGURANA EM GERAL.]
[REMARKS. COMENTARIOS SOBRE O PROGRAMA.]
Algumas Algumas Algumas Algumas normas normas normas normas devem devem devem devem ser ser ser ser observadas observadas observadas observadas:
1 - DIVISION dever comear na coluna 8 (Margem A) e termina num ponto.
2 - PARGRAFOS (PROGRAM-ID, AUTHOR e Etc) dever comea na coluna 8
ENVIRONMENT ENVIRONMENT ENVIRONMENT ENVIRONMENT
Identifica a maquina que esta sendo usada. Contm a descrio do computador
e a designao dos arquivos para as respectivas unidades de configurao do
computador. dividida em duas sees: CONFIGURATION SECTION. e
INPUT-OUTPUT SECTION.
CONFIGURATION CONFIGURATION CONFIGURATION CONFIGURATION SECTION SECTION SECTION SECTION
utilizada para fornecer informaes sobre o computador. dividida em 3
pargrafos:
SOURCE SOURCE SOURCE SOURCE- -- -COMPUTER COMPUTER COMPUTER COMPUTER . Nome do computador que ir compilar o programa,
havia muita importncia nos primrdios do COBOL, pois os computadores que
compilava no era o mesmo que executava, hoje somente um comentrio.
OBJECT OBJECT OBJECT OBJECT- -- -COMPUTER COMPUTER COMPUTER COMPUTER. Nome do computador que ir executar o programa , ,, , os
demais comentrios do pargrafo SOURCE se aplica a este tambm.
SPECIAL SPECIAL SPECIAL SPECIAL- -- -NAMES NAMES NAMES NAMES: :: : Podemos associar nomes de funes alguns dispositivos
COBOL, como por exemplo o nome simblico referente a impressora, segue
abaixo alguns nomes-de-funes:
SYSLST SYSLST SYSLST SYSLST: :: : Relacionada impressora
CONSOLE CONSOLE CONSOLE CONSOLE: :: : Relacionada console do operador
C CC C01 01 01 01 a aa a C CC C12 12 12 12: :: : Canal de salto associada a impressora. Sempre que o nome
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
2 - PARGRAFOS (PROGRAM-ID, AUTHOR e Etc) dever comea na coluna 8
(Margem A) e termina num ponto.
3 - Nome de pargrafo (NOME DO PROGRAMA, NOME DO PROGRAMADOR
e Etc, dever comear pelos menos na coluna 12 (Margem B)
4- As chaves ( [ ] ) so usada para indicao de opcionalidade de clusulas do
Cobol no faz parte da codificao.
5- Nome do programa: Conjunto de 8 caracteres comeando por letra, no
podendo usar caracteres especiais (@$&*# Etc)
6 - A opo DATE-COMPILED no deve ser preenchida, pois o compilador que
far isso.
7- Exemplo:
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
000010 IDENTIFICATION DIVISIO.
000020 PROGRAM-ID. PROGR001.
000030 AUTHOR. BIRA.
000040 INSTALLATION. MFS TREINAMENTOS.
000050 DATE-WRITTEN. 12/03/2013.
000060 DATE-COMPILED.
000070 SECURITY. ESTE PGM SERA UTILIZANDO POR PESSOAS DE NIVEL 7.
000080 REMARKS. NO ESQUECER DE SALVAR O CAD.ATUAL COMO ANTIGO.
C CC C01 01 01 01 a aa a C CC C12 12 12 12: :: : Canal de salto associada a impressora. Sempre que o nome
SALTO-DE-PAGINA for utilizado na PROCEDURE DIVISION, o computador
executar um salto de pgina na impressora. O nome SALTO-DE-PAGINA,
um nome-simblico.
Exemplo: SPECIAL-NAMES. C01 IS SALTO-DE-PAGINA.
DECIMAL DECIMAL DECIMAL DECIMAL- -- -POINT POINT POINT POINT IS IS IS IS COMMA COMMA COMMA COMMA: :: : Tm como objetivo, substituir ponto por
vrgula e vice-versa devido nossa tradicional conotao no anglo-saxnica.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
11 12
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 ORGANIZACAO-DO-ARQUIVO]
[ACCESS MODE IS ACESSO-DO-ARQUIVO]
[FILE STATUS IS FILE-STATUS-DO-ARQUIVO].
CLASS CLASS CLASS CLASS : :: : Este conceito muito til, pois podemos comparar rea de dados com o
contedo das classes.
Exemplo : CLASS APROVADO 'A' THRU 'C'.
No programa podemos perguntar se um contedo de um campo igual a
APROVADO, automaticamente ser comparado com 'A' ,'B' e 'C', podemos
tambm usar a forma: CLASS REPROVADO 'D' 'E.
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.
CONFIGURATION SECTION.
[SOURCE-COMPUTER. NOME-DO-COMPUTADOR.]
[OBJECT-COMPUTER. NOME-DO-COMPUTADOR.]
[SPECIAL-NAMES. [NOME-DE-FUNCAO IS NOME-SIMBLICO]
[DECIMAL-POINT IS COMMA]
[CLASS NOME-DA-CLASSE IS VLR-DA-CLASSE].]
Exemplo Exemplo Exemplo Exemplo: :: :
NOME NOME NOME NOME- -- -DO DO DO DO- -- -ARQUIVO ARQUIVO ARQUIVO ARQUIVO: :: : Nome associado ao arquivo para ser manipulado no
programa.
NOME NOME NOME NOME- -- -EXTERNO EXTERNO EXTERNO EXTERNO: :: : Nome associado ao arquivo fsico no JCL de execuo do
programa.
ORGANIZATION ORGANIZATION ORGANIZATION ORGANIZATION: :: : Ordem em que os registros do arquivo estaro organizados, a
organizao ser: SEQUENTIAL, o arquivo no contm ndice de pesquisa,
acessado sequencialmente, INDEXED arquivo com ndice de pesquisa pode ser
acessado sequencialmente ou randomicamente dependendo do ACCESS
MODE..
ACCESS ACCESS ACCESS ACCESS MODE MODE MODE MODE: :: : Especifica como os registros sero pesquisados (acessados),
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
INPUT INPUT INPUT INPUT- -- -OUTPUT OUTPUT OUTPUT OUTPUT SECTION SECTION SECTION SECTION
Define arquivos utilizados pelo programa efetuando ligaes com o equipamento
da maquina. Est dividida em 2 pargrafos.
FILE FILE FILE FILE- -- -CONTROL CONTROL CONTROL CONTROL e I II I- -- -O OO O- -- -CONTROL CONTROL CONTROL CONTROL. .. .
FILE FILE FILE FILE- -- -CONTROL CONTROL CONTROL CONTROL
Neste pargrafo definiremos os arquivos que iremos usar no programa, para isso
usaremos a clusula SELECT, sua sintaxe :
Exemplo Exemplo Exemplo Exemplo: :: :
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.
CONFIGURATION SECTION.
SPECIAL-NAMES. C01 IS SALTO-DE-PAGINA
DECIMAL-POINT IS COMMA
CLASS APROVADO IS A THRU C.
Exemplo Exemplo Exemplo Exemplo: :: :
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 ARQINPUT ASSIGN TO ENTRADA
ORGANIZATION IS INDEXED
ACCESS MODE IS SEQUENTIAL
FILE STATUS IS FS-ARQINPUT.
ACCESS ACCESS ACCESS ACCESS MODE MODE MODE MODE: :: : Especifica como os registros sero pesquisados (acessados),
o acesso deve ser: SEQUENTIAL, os registros sero acessados do incio ao fim
do arquivo, um aps o outro, RAMDOM os registros so acessados de modo
aleatrios ou DYNAMIC os registros so acessados sequencialmente ou
randomicamente..
FILE FILE FILE FILE STATUS STATUS STATUS STATUS: :: : Situao do arquivo logo aps a execuo de um comando
executado no mesmo, dever ser um campo numrico zonado de duas posies
definido na WORKING-STORAGE SECTION.
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
13 14
Parmetros Parmetros Parmetros Parmetros da da da da FILE FILE FILE FILE SECTION SECTION SECTION SECTION: :: :
FILE FILE FILE FILE DESCRIPTION DESCRIPTION DESCRIPTION DESCRIPTION (FD) (FD) (FD) (FD)
NOME NOME NOME NOME- -- -DO DO DO DO- -- -ARQUIVO ARQUIVO ARQUIVO ARQUIVO: :: : Nome associado ao arquivo declarado na clusula
SELECT
BLOCK BLOCK BLOCK BLOCK CONTAINS CONTAINS CONTAINS CONTAINS: :: : Quantidade de registros por bloco, pois o COBOL l e grava
arquivos agrupando os registros.
RECORD RECORD RECORD RECORD CONTAINS CONTAINS CONTAINS CONTAINS: :: : Quantidade de caracteres contidos em um registro.
LABEL LABEL LABEL LABEL RECORD RECORD RECORD RECORD: :: : Todos os arquivos contem informaes padres (standard)
para seu uso ou estas informaes so omitidas (ommited).
RECORDING RECORDING RECORDING RECORDING MODE MODE MODE MODE: :: :Tipo do registro que poder ser:
F = Fixo, todos os registros do arquivo tem o mesmo tamanho
V = Varivel, os registros do arquivo tem tamanhos distintos.
DATA DATA DATA DATA RECORDS RECORDS RECORDS RECORDS: :: : Nome do registro de dados do arquivo, nome dado ao nvel 01
do layout do registro, esta e outras clusulas deveremos ver o captulo seguinte
de nmero nmero nmero nmero de de de de nvel nvel nvel nvel.
Parmetros Parmetros Parmetros Parmetros da da da da WORKING WORKING WORKING WORKING- -- -STORAGE STORAGE STORAGE STORAGE SECTION SECTION SECTION SECTION: :: :
definimos todas as variveis necessrias para o programa, na definio de uma
varivel, informamos a estrutura, o nome o tamanho e se necessrio um valor
DATA DATA DATA DATA DIVISION DIVISION DIVISION DIVISION - -- - D DD Define os dados do programa, e contm 3 sees:
FILE FILE FILE FILE SECTION SECTION SECTION SECTION : :: : Descreve os arquivos e seus respectivos registros
WORKING WORKING WORKING WORKING- -- -STORAGE STORAGE STORAGE STORAGE SECTION SECTION SECTION SECTION : Define todas as reas de trabalho para o
processamento.
LINKAGE LINKAGE LINKAGE LINKAGE SECTION SECTION SECTION SECTION: uma seo responsvel pela comunicao entre programas
(rea de ligao).
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 [OMITTED] ou [STANDARD]
[RECORDING MODE IS [F] ou [V]
[DATA RECORDS IS NOME-DO-REGISTRO ou
ARE NOME-DO-REGISTRO1 NOME-DO-REGISTRO-2.]...].
01 NOME-DO-REGISTRO.
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
varivel, informamos a estrutura, o nome o tamanho e se necessrio um valor
inicial.
Parmetros Parmetros Parmetros Parmetros da da da da LINKAGE LINKAGE LINKAGE LINKAGE SECTION SECTION SECTION SECTION:
Definimos todas as variveis de comunicao entre programas na definio de
uma varivel na LINKAGE SECTION, informamos a estrutura, o nome e o
tamanho. Note que no informamos um valor inicial, para no limparmos essa
reas de comunicao.
01 NOME-DO-REGISTRO.
05 NOME-DO-CAMPO1 PIC X(35).
05 NOME-DO-CAMPO2.
10 NOME-DO-CAMPO3 PIC 9(02).
10 NOME-DO-CAMPO4 PIC 9(02).
10 NOME-DO-CAMPO5 PIC 9(04).
WORKING-STORAGE SECTION.
77 WK-CONTADOR PIC 9(03) VALUE ZEROS.
01 WK-LINHA.
05 FILLER PIC X(10) VALUE 'CURSO'.
05 WK-ALUNO PIC X(35) VALUE SPACES.
LINKAGE SECTION.
01 LK-PARAMETRO.
05 LK-ALUNO PIC X(35).
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
15 16
Nmeros Nmeros Nmeros Nmeros de de de de Nveis Nveis Nveis Nveis
Os nmeros de nveis definem a hierarquia dos campos dentro do registro ou a
hierarquia nas reas auxiliares criadas pelo programador. O registro tambm deve
ser numerado, pois ele um item de grupo, A numerao para itens de grupo
01, por definio todos itens de grupo sero itens alfanumricos.
Dentro dos itens de grupo esto os itens elementares, e estes podem receber uma
numerao entre 02 e 49. Exemplo de codificao de um layout de um registro.
LAYOUT LAYOUT LAYOUT LAYOUT do do do do registro registro registro registro do do do do ALUNO ALUNO ALUNO ALUNO
1 1 2 2 3 3 3 4 5
1...5....0....5....0...5....0....5 6...0....5
NOME NASCIMENTO
1-------------------------------35 1.......10
DD/MM/AAAA
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
Representao no COBOL Nmero de nvel de 1 a 49
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 WK-LIDOS PIC 9(03).
01 WK-ESTADO-CIVIL PIC 9(01).
88 SOLTEIRO VALUE 1.
88 CASADO VALUE 2.
Representao no COBOL Nmero de nvel de 77 e 88
Nota Nota Nota Nota
Nvel Nvel Nvel Nvel 88 88 88 88 : :: : Podemos fazer a verificao do campo WK-ESTADO-CIVIL se
SOLTEIRO ou CASADO, exemplo:
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
*----------------------------------------------------------------*
* O exemplo abaixo seria de uma codificao normal para checar o *
* estrado civil de uma pessoa *
*----------------------------------------------------------------*
IF WK-ESTADO-CIVIL = 1
DISPLAY SOLTEIRO
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
01 REGISTRO-ALUNO.
05 NOME PIC X(35).
05 NASCIMENTO.
10 DD PIC 9(02).
10 FILLER PIC X(01).
10 MM PIC 9(02).
10 FILLER PIC X(01).
10 AAAA PIC 9(04).
Nveis Nveis Nveis Nveis Especiais Especiais Especiais Especiais 77 77 77 77 e ee e 88 88 88 88
O nvel 77 77 77 77 define reas auxiliares independentes, onde estes no so
subdivididos e no possuem subdivises. So comumente usados para
contadores, acumuladores e indexadores.
O nvel 88 88 88 88 define nomes de condies que devem ser associados valores
definidos do contedo de um campo determinado do registro, pois podemos
associar um valor a um nome fantasia.
DISPLAY SOLTEIRO
ELSE
DISPLAY CASADO
END-IF
*----------------------------------------------------------------*
* O exemplo abaixo uma codificao perguntando pelo NOME DE *
* CONDIO *
*----------------------------------------------------------------*
IF WK-ESTADO-CIVIL IS SOLTEIRO
DISPLAY SOLTEIRO
ELSE
DISPLAY CASADO
END-IF
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
17 18
Picture Picture Picture Picture
PICTURE ou PIC uma clusula que define o tipo e o tamanho do campo. O tipo
pode ser: numrico, alfanumrico, alfabtico e de edio.
NUMRICO NUMRICO NUMRICO NUMRICO : :: : representado pelo nmero 9 e seu universo consiste nos dgitos
de 0 9. Na representao de um campo numrico podem aparecer caracteres
como V e/ou S, V: indicar onde ser iniciada as casas decimais. S indicar
que esse campo ter sinal, alinhado no campo receptor da direita para
esquerda. truncando os dados a esquerda.
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-LIDOS PIC 9(03).
77 WK-VALORES PIC 9(09)V99.
7 WK-SALDO PIC S9(07)V99.
77 WK-CONTADOR PIC S9(07)V99 COMP-3.
77 INDICE PIC S9(04) COMP.
ALFANUMRICO ALFANUMRICO ALFANUMRICO ALFANUMRICO : :: : representado pela letra X e seu universo consiste em letras
EDIO EDIO EDIO EDIO : :: : Esta picture utilizada na apresentao de dados na impressora ou
no terminal num formato mascarado. Existem dois tipos de picture de edio:
Picture Picture Picture Picture de de de de edio edio edio edio alfanumrica alfanumrica alfanumrica alfanumrica: :: : neste tipo de edio podero ser utilizado
letras:
X = Representa a Picture alfanumrica
B = Permite a incluso de um espao em branco no campo
0 = Inclui zeros na posio definida na Picture
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-X1 PIC 0X(02).
77 WK-X2 PIC 0X(05)BX(02).
77 WK-X3 PIC BBBX(05).
RESULTADO DE MOVIMENTAES
MOVE 'SP TO WK-X1 0SP
MOVE '8829950 TO WK-X2 088299 50
COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda COBOL COBOL COBOL COBOL- TodosdireitosreservadosparaMainframeSchool TreinamentosLtda
ALFANUMRICO ALFANUMRICO ALFANUMRICO ALFANUMRICO : :: : representado pela letra X e seu universo consiste em letras
do alfabeto, dgitos de 0 9 e caracteres especiais. Apesar de nmeros serem
aceitos neste tipo de campo, no podemos efetuar clculos no mesmo, seu
alinhamento no campo receptor e da esquerda para a direita, truncando os dados
a direita.
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-ENDERECO PIC X(45).
77 WK-NOME PIC X(30).
ALFABTICO ALFABTICO ALFABTICO ALFABTICO : :: : representado pela letra A e seu universo consiste em letras do
alfabeto, ponto, vrgula e o caractere branco.
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-ENDERECO PIC A(45).
77 WK-NOME PIC A(30).
MOVE 'CASA TO WK-X3 CASA (PS: 3 casas em branco
CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe CobolparaMainframe
19 20
Picture Picture Picture Picture
Picture Picture Picture Picture de de de de edio edio edio edio numrica numrica numrica numrica: :: : Este tipo de edio permite a utilizao de vrias
mscaras de edio de valores numricos, as mais comuns so:
9 99 9 = Mostra o dgito na posio definida independente de ser zero.
Z ZZ Z = == = Troca o digito ZERO pelo caractere BRANCO.
B BB B = Insere o caractere BRANCO na posio definida na Picture.
0 00 0 = Coloca o dgito ZERO na posio definida na Picture.
, ,, , = Insere uma (vrgula) na posio definida na Picture.
. .. . = Insere um (ponto) na posio definida na Picture.
+ ++ + = Insere um sinal + ou - direita ou a esquerda do contedo editado.
- -- - = Insere um sinal - direita ou a esquerda do contedo editado.
* ** * = Troca o 0 no significativo por * (asterisco).
$ $$ $ = Este caractere pode aparecer na extremidade esquerda da picture.
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. MOVE RESULTADO
77 WK-V1 PIC ZZZ. 1234 234
77 WK-V2 PIC Z.ZZ9. 00120 120
77 WK-V3 PIC Z.ZZ9,99. 1703V89 1.703,89

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.