Você está na página 1de 39

CobolparaMainframe CobolparaMainframe

COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
ndice 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
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

COmmonBusinessOrientedLanguage
StudentGuide
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
ndice 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
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
ONascimentodoCobol
1 2
O COBOL foi criado em 1959 pelo CODASYL (Conference on Data Systems
Language), um dos trs comits propostos numa reunio no Pentgono em
maiode1959,organizadoporCharlesPhillipsdoDepartamentodeDefesados
USA.OCODASYLfoiformadopararecomendarasdiretrizesdeumalinguagem
para negcios. Foi constitudopor membros representantes de seis fabricantes de
computadoresetrsrgosgovernamentais,asaber:
Burroughs Corporation , IBM Honeywell, RCA Sperry Rand e Sylvania Eletric
Products e a Fora Area dos USA, David Taylor Model Basin e a Agncia
Nacional de Padres(National Bureau of Standards ou NBS). Este comit foi
presidido por um membro do NBS. Um comit de Mdio Prazo e outro de longo
prazoforamtambmpropostosnareuniodoPentgono.Entretanto,emboratenha
sido formado, o Comitde Mdio Prazonunca chegoua funcionar; e o Comitde
LongoPrazonemchegouaserformado.Porfim,umsubcomitdoComitdeCurto
Prazo desenvolveu as especificaes da linguagem COBOL. Este subcomit era
formado por seis pessoas: Willian Selden e Gertrude Tiernev da IBM, Howard
Bromberg e Howard Discount da RCA e Vernon Reeves e Jean E. Sammet da
SylvaniaEletricestesubcomitcompletouasespecificaesparaoCOBOLnofim
do ano de 1959. Elas foram inspiradas em grande parte pela linguagem FLOW-
MATICinventadaporGraceMurrayHopper,epelalinguagemCOMTRANdaIBM
inventada por Bob Bemer. As especificaes foram aprovadas pelo CODASYL. A
partirdaforamaprovadaspeloComitExecutivoemjaneirode1960,eenviadas
grficadogoverno,queaseditoueimprimiucomonomedeCobol60.O
COBOL foi desenvolvido num perodo de seis meses, e continua ainda em uso
depoisdemaisde40anos
Grace Murray 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-MATIC hoje extinta. Esta linguagem serviu
comobaseparaacriaodoCOBOL.
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
originalmentecomosoluopararesolverproblemasdeprogramaodogoverno
e das foras armadas americanas, programas COBOL
1
continuam em uso na
maioriadasempresascomerciaisemtodoomundo,notadamentenasinstituies
financeiras, e em praticamente todos os sistemas operacionais, incluindo o IBM
z/OS
2
, o Microsoft Windows e a famlia Unix/Linux. A base global de cdigo
imensa e os aplicativos, de tempos em tempos, so sujeitos a manuteno. O
custodereescreverumaplicativoCOBOL,jdepurado,emumanovalinguagem
nojustificaosbenefciosquepossaeventualmentetrazer.Nofimdosanos90o
Gartner Group,uma empresade pesquisana rea deprocessamento de dados,
estimouquedos300bilhesdelinhasdecdigo-fonteexistentesnomundo,80%
-oucercade240bilhesdelinhas-eramemCOBOL.Elestambmreportaram
quemaisdemetadedosnovosaplicativosdemissocrticaaindaestavamsendo
desenvolvidosusandooCOBOL.AoseaproximarofimdosculoXXhouveuma
febre de atividade de programadores COBOL para corrigir os efeitos do bug do
milnio
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
difciljustificarestaopinio.OutrosargumentamqueaaritmticaBCDdoCOBOL
evitou muitos outros problemas que poderiam ocorrer com o uso ingnuo do
ponto flutuante em clculos financeiros. O COBOL provou ser durvel e
adaptvel. O padro atual do COBOL o COBOL2002. O COBOL2002 suporta
agoraconveninciasmodernascomoUnicode
4
,geraodeXML
5
econvenode
chamadasde/paralinguagenscomo
OCobol
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
OCobol-Continuao
3 4
o C, incluso como linguagem de primeira classe em ambientes de
desenvolvimento como o .NET da Microsoft e a capacidade de operar em
ambientes fechados como Java (incluindo COBOL em instncias de EJB
6
) e
acessoaqualquerbaseSQL.
EstruturaLgicadoCobol
LEGENDA

1)Cobol(COmmonBusinessOrientedLanguage)-Linguagemde
programaodealtonvel.
2)z/OS:(zOperationalSystem)Sistemaoperacionalutilizadonasmquinas
MainframesrieZ
3)Bugdomilnio:Camposquecontinhamdatascomdoisdgitosparado
Ano,naviradadosculoestecampopassariaaobterovalorzero,alguns
clculosouindexaodedadoscausariamumerronoprograma,umadas
soluesfoiconverterestecampopara4posiescontendoosculoeano.
4)Unicode:umpadroquepermiteaoscomputadoresrepresentare
manipular,deforma
consistente,textodequalquersistemadeescritaexistente.
5)XML:(eXtensibleMarkupLanguage)umarecomendaodaW3Cpara
gerarlinguagensdemarcaoparanecessidadesespeciais.
6)EJB:(ExtensibleJavaProfiler)socomponentesJavadistribudos,que
rodamemumservidordeaplicaes.UmaaplicaoJavaclientepode
seconectarremotamenteaumservidordeaplicaes,instanciarumEJBe
trabalharcomelecomosefosseumaclasselocal.
ComofalamosanteriormentequeoCobolfoielaboradocomosefosseumlivro,o
Cobol composto de 4 divises nos quais algumas possuem sees e nestas
seespoderocontervriospargrafos:
IDENTIFICATIONDIVISION
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.
ENVIRONMENTDIVISION
Faraligaocomoambienteoperacionalondeoprogramaserexecutado,faz
ainterfacedosarquivoslgicosqueoprogramausarcomosarquivosfsicos.
CONFIGURATIONSECTION
Esta seo destina-se a configurao do ambiente, ela composta por trs
partes:SOURCE-COMPUTEReOBJECT-COMPUTER.
Uma identifica o computador onde foi confeccionado o programa e a segunda
identifica o computador do ambiente de produo, ambas servem apenas para
comentrios haja visto que ambas deixaram de ser obrigatrias mas caso o
programadoropteemutiliza-lasdeveescreversuasintaxecorretamentepara
nocausarerrosdecompilao.
SPECIAL-NAMESespecficaosinalmonetrio,escolheotipodepontodecimal,
especfica caracteres simblicos e possibilitar adaptar o programa para se
comunicarcomprogramasdeoutraslinguagensetambmconstantesregionais.
INPUT-OUTPUTSECTION
Esta seo destina-se a configurao do ambiente de Leitura e Gravao, ela
possuiduaspartes:
FILE-CONTROLeI-O-CONTROL.
Aprimeiradestina-seaespecificaodosarquivosqueoprogramairacessar.A
segunda foi descontinuada nas verses mais atuais do compilador, valendo
apenasparaosambientesdeMainframe.
DATADIVISION
voltadanicaeexclusivamentedefiniodeestruturasderegistros,variveis
econstantesdoprograma,ouseja,umareadealocaodememriaparatodo
o espao necessrio ao seu programa. As duas principais sees so: a FILE
SECTIONeaWORKING-STORAGESECTION.

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
EstruturaLgicadoCobol
5 6
FILESECTION
Descreveocontedoeaorganizaodosarquivos
FILE-DESCRIPTION(FD)descreveosregistrodedadosdosarquivos.
SORT-MERGE-FILE-DESCRIPTION (SD) descreve os registros de dados que
seroclassificados.
WORKING-STORAGESECTION
reaparacamposquenosejampartedaentradaesadamasqueseroexigidos
no transcorrer do processamento. Incluem constantes, indicadores e reas de
trabalho.Procureutilizaromnimodenveis01(zerohum)nestaseo,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
realmentecolocarnomessignificativosnestasvariveis.
LOCAL-STORAGESECTION
NestaseoprocuredefinirtodososINCLUDEdastabelas(SQLCA,DCLGEN's)e
seusCURSORES,tambmpodemostervariveisdetodososnveis,constantese
bookdedados.
COMMUNICATIONSECTION
Estabelece ligaes entre o programa COBOL e programas de controle de
teleprocessamento
REPORTSECTION
Descreveosrelatriosaseremgerados.Adescriodecadarelatriocomeacom
umRD(REPORTDESCRIPTION)eseguidoporumoumaisgrupodedescrio
dosmesmos
LINKAGE-STORAGESECTION
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-Aclausula'VALUE'somentepodeserespecificadaparaitensdenvel'88'.
3 - Assume-se que para cada item passadotem que serde nvel '01'ou nvel'77'
(Limitedefull-word).
4-Pelo'PARM'podeserpassadoat100caracteres(Bytes).
5-Paradefinioda'LINKAGESECTION'quandorecebealgumdadopelo'PARM'
osdoisprimeirosbytesdevemserdefinidoscomobinrio,poisestesbytescontero
otamanhodo'PARM'.
EstruturaLgicadoCobol
6-Quandosefazaligaoentreprogramasoprogramachamadodevecontera
clausula'LINKAGE SECTION',e seus referidos campos de definio,quanto ao
programa chamador este deve conter os mesmos campos da 'LINKAGE' na
'WORKING-STORAGE'sendoobrigatriooscamposaserempassadosestarem
namesmaordemdoprogramachamador.
PROCEDURE
Seqncia de instrues que sero executadas no programa, as sees da
procedure division, nesta diviso no existem sees pr-definidas, o
programador poder informar um nmero ilimitados de sees, para isso basta
indicarlogoapsumarotinaapalavraSECTION.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
EstruturaLgicadoCobol
7 8
ConfiguraodaFolhadeProgramao
COBOL
IDENTIFICATION ENVIRONMENT DATA PROCEDURE
CONFIGURATION
INPUT-OUTPUT
FILE
WORKING-STORAGE
REPORT
VRIAS
SOURCE
COMPUTER
OBJCT
COMPUTER
SPECIAL
NAMES
FILE
CONTROL
I-O
CONTROL
Divises Sees Pargrafos
FILE
DESCRIPTION(FD)
SORTMERGE
DESCRIPTION(SD)
SORTMERGE
DESCRIPTION(SD)
Legenda
O compilador COBOL possui caractersticas posicionais, isto , se de um lado
necessitarmosordenaodepalavras.Divisesesees,deoutronecessrio
usarumaestruturadefinidadamaneiradeescrever:
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-Coluna7Podeserusadaparaindicarcontinuaoutilizandoo(-)hfen,ou
(*)usadoparaindicarcomentrioseabarra(/)usadaparasaltodepaginaqdo
naimpressodofonte.
3-Colunas8a72Usadasparaoscomandos(palavrasouliterais)doprograma
estascolunasestoagrupadasemduasmargens"A"(coluna8a11)emargem
"B"(colunas12a72).Entradasdamargem"A"ttulosdasdivises,dassees,
dos pargrafos. Descries de arquivos ttulos essenciais na Procedure
Division.Osnmerosdenvelcomo'77'Entradasdamargem"B"Espaosentre
asentradas(comoobjetivodecomunicaovisual)Continuaodasentradas.
Palavras
Criadaspeloprogramador
Palavraumacomposiodecaracteresescolhidosdoconjuntodecaracteres
doCOBOL.Emcomprimentoumapalavranodeveexcedera'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
Palavrasreservadas
Verbos:ADD,READ,ENTEReetc...
Conectores:BY,FROM,TOeetc.
Palavrasdesignificadoespecial:NEGATIVE,ZEROeetc.
ConjuntodecaracteresvalidosdoCOBOL:De'0'ate'9'de'A'ate'Z' espaos,
parnteses(),menorque(<),maiorque(>),ponto,sinaldeadio, hfen,
dlar($), arroba(@), igual(=), virgula, barra(/), asterisco(*), apostrofes. (Veja
AnexoI)
VRIOS
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

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
Divises
9 10
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,seuformato:
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.]
Algumasnormasdevemserobservadas:
1-DIVISIONdevercomearnacoluna8(MargemA)eterminanumponto.
2-PARGRAFOS(PROGRAM-ID,AUTHOReEtc)devercomeanacoluna 8
(MargemA)eterminanumponto.
3-Nomedepargrafo(NOMEDOPROGRAMA,NOMEDOPROGRAMADOR
eEtc,devercomearpelosmenosnacoluna12(MargemB)
4- As chaves ( [ ] ) so usada para indicao de opcionalidade de clusulas do
Cobolnofazpartedacodificao.
5- Nome do programa: Conjunto de 8 caracteres comeando por letra, no
podendousarcaracteresespeciais(@$&*#Etc)
6-AopoDATE-COMPILEDnodeveserpreenchida,poisocompiladorque
farisso.
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.
ENVIRONMENT
Identificaamaquinaqueestasendousada.Contmadescriodocomputador
e adesignao dos arquivos para asrespectivas unidadesde configuraodo
computador. dividida em duas sees: CONFIGURATION SECTION. e
INPUT-OUTPUTSECTION.
CONFIGURATIONSECTION
utilizada para fornecer informaes sobre o computador. dividida em 3
pargrafos:
SOURCE-COMPUTER. Nome do computador que ir compilar o programa,
havia muita importncia nosprimrdiosdo COBOL,poisos computadores que
compilavanoeraomesmoqueexecutava,hojesomenteumcomentrio.
OBJECT-COMPUTER.Nomedocomputadorqueirexecutaroprograma,os
demaiscomentriosdopargrafoSOURCEseaplicaaestetambm.
SPECIAL-NAMES: Podemos associar nomes de funes alguns dispositivos
COBOL, como por exemplo o nome simblico referente a impressora, segue
abaixoalgunsnomes-de-funes:
SYSLST:Relacionadaimpressora
CONSOLE:Relacionadaconsoledooperador
C01 a C12: Canal de salto associada a impressora. Sempre que o nome
SALTO-DE-PAGINA for utilizado na PROCEDURE DIVISION, o computador
executar um saltode pgina na impressora. O nome SALTO-DE-PAGINA,
umnome-simblico.
Exemplo:SPECIAL-NAMES.C01ISSALTO-DE-PAGINA.
DECIMAL-POINT IS COMMA: Tm como objetivo, substituir ponto por
vrgulaevice-versadevidonossatradicionalconotaonoanglo-saxnica.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
11 12
INPUT-OUTPUTSECTION
Definearquivosutilizadospeloprogramaefetuandoligaescomoequipamento
damaquina.Estdivididaem2pargrafos.
FILE-CONTROLeI-O-CONTROL.

FILE-CONTROL
Nestepargrafodefiniremososarquivosqueiremosusarnoprograma,paraisso
usaremosaclusulaSELECT,suasintaxe:
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:Esteconceitomuitotil,poispodemoscompararreadedadoscomo
contedodasclasses.
Exemplo:CLASSAPROVADO'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
tambmusaraforma:CLASSREPROVADO'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:
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:
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.
NOME-DO-ARQUIVO: Nome associado ao arquivo para ser manipulado no
programa.
NOME-EXTERNO: Nome associado ao arquivo fsico no JCL de execuo do
programa.
ORGANIZATION:Ordememqueosregistrosdoarquivoestaroorganizados,a
organizao ser: SEQUENTIAL, o arquivo no contm ndice de pesquisa,
acessadosequencialmente,INDEXEDarquivocomndicedepesquisapodeser
acessado sequencialmente ou randomicamente dependendo do ACCESS
MODE..
ACCESSMODE:Especificacomoosregistrosseropesquisados(acessados),
oacessodeveser:SEQUENTIAL,osregistrosseroacessadosdoincioaofim
do arquivo, um aps o outro, RAMDOM os registros so acessados de modo
aleatrios ou DYNAMIC os registros so acessados sequencialmente ou
randomicamente..
FILE STATUS: Situao do arquivo logo aps a execuo de um comando
executadonomesmo,deverserumcamponumricozonadodeduasposies
definidonaWORKING-STORAGESECTION.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
13 14
ParmetrosdaFILESECTION:

FILEDESCRIPTION(FD)
NOME-DO-ARQUIVO: Nome associado ao arquivo declarado na clusula
SELECT
BLOCKCONTAINS:Quantidadederegistrosporbloco,poisoCOBOLlegrava
arquivosagrupandoosregistros.
RECORDCONTAINS:Quantidadedecaracterescontidosemumregistro.
LABEL RECORD: Todos os arquivos contem informaes padres (standard)
paraseuusoouestasinformaessoomitidas(ommited).
RECORDINGMODE:Tipodoregistroquepoderser:
F=Fixo,todososregistrosdoarquivotemomesmotamanho
V=Varivel,osregistrosdoarquivotemtamanhosdistintos.
DATARECORDS:Nomedoregistrodedadosdoarquivo,nomedadoaonvel01
dolayoutdoregistro,estaeoutrasclusulasdeveremosverocaptuloseguinte
denmerodenvel.

ParmetrosdaWORKING-STORAGESECTION:
definimostodasasvariveisnecessriasparaoprograma,nadefiniodeuma
varivel,informamosaestrutura,onomeotamanhoesenecessrioumvalor
inicial.

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

DATADIVISION-Defineosdadosdoprograma,econtm3sees:
FILESECTION:Descreveosarquivoseseusrespectivosregistros
WORKING-STORAGE SECTION : Define todas as reas de trabalho para o
processamento.
LINKAGESECTION:umaseoresponsvelpelacomunicaoentreprogramas
(readeligao).
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.
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
15 16
NmerosdeNveis
Os nmeros de nveis definem a hierarquia dos campos dentro do registro ou a
hierarquianasreasauxiliarescriadaspeloprogramador.Oregistrotambmdeve
ser numerado, pois ele um item degrupo,A numerao para itens de grupo
01,pordefiniotodositensdegruposeroitensalfanumricos.
Dentrodositensdegrupoestoositenselementares,eestespodemreceberuma
numeraoentre02e49.Exemplodecodificaodeumlayoutdeumregistro.
LAYOUTdoregistrodoALUNO
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

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).
Representao no COBOL Nmero de nvel de 1 a 49
NveisEspeciais77e88
O nvel 77 define reas auxiliares independentes, onde estes no so
subdivididos e no possuem subdivises. So comumente usados para
contadores,acumuladoreseindexadores.

O nvel 88 define nomes de condies que devem ser associados valores


definidos do contedo de um campo determinado do registro, pois podemos
associarumvaloraumnomefantasia.

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
Nvel88:PodemosfazeraverificaodocampoWK-ESTADO-CIVILse
SOLTEIROouCASADO,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
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
17 18
Picture
PICTUREouPICumaclusulaquedefineotipoeotamanhodocampo.Otipo
podeser:numrico,alfanumrico,alfabticoedeedio.

NUMRICO : representado pelo nmero 9 e seuuniverso consistenosdgitos


de 0 9. Na representao de um campo numrico podem aparecer caracteres
comoVe/ouS,V:indicarondeseriniciadaascasasdecimais.Sindicar
que esse campo ter sinal, alinhado no campo receptor da direita para
esquerda.truncandoosdadosaesquerda.
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:representadopelaletraXeseuuniversoconsisteemletras
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
alinhamentonocamporeceptoredaesquerdaparaadireita,truncandoosdados
adireita.

EDIO:Estapictureutilizadanaapresentaodedadosnaimpressoraou
noterminalnumformatomascarado.Existemdoistiposdepicturedeedio:
Picture de edio alfanumrica: neste tipo de edio podero ser utilizado
letras:
X=RepresentaaPicturealfanumrica
B=Permiteainclusodeumespaoembranconocampo
0=IncluizerosnaposiodefinidanaPicture

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

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:representadopelaletraAeseuuniversoconsisteemletrasdo
alfabeto,ponto,vrgulaeocaracterebranco.
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).
RESULTADO DE MOVIMENTAES
MOVE 'SP TO WK-X1 0SP
MOVE '8829950 TO WK-X2 088299 50
MOVE 'CASA TO WK-X3 CASA (PS: 3 casas em branco

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
19 20
Picture
Picture de edio numrica: Este tipo de edio permite a utilizao de vrias
mscarasdeediodevaloresnumricos,asmaiscomunsso:
9=Mostraodgitonaposiodefinidaindependentedeserzero.
Z=TrocaodigitoZEROpelocaractereBRANCO.
B=InsereocaractereBRANCOnaposiodefinidanaPicture.
0=ColocaodgitoZEROnaposiodefinidanaPicture.
,=Insereuma(vrgula)naposiodefinidanaPicture.
.=Insereum(ponto)naposiodefinidanaPicture.
+=Insereumsinal+ou-direitaouaesquerdadocontedoeditado.
-=Insereumsinal-direitaouaesquerdadocontedoeditado.
*=Trocao0nosignificativopor*(asterisco).
$=Estecaracterepodeaparecernaextremidadeesquerdadapicture.
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
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

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
Nopodemosmanipularoitem77,poisnopodemosemitirqualquercomando
paraoFILLER,maspodemosmanipularoitemdegrupoWK-ITEM-GRUPO,
alterandoassimovalordoFILLERelesubordinado.
Exemplo:MOVESPACESTOFILLER (Errado)
MOVESPACESTOWK-ITEM-GRUPO (Correto)

Value
Atribui valores iniciais as reas de trabalho definidas no programa, devemos
respeitarasconfiguraesdasPICTURES.
Filler
Palavra reservada que preenche determinados espaos definidos na Picture,
sendoquenotemosacessoaoitemelementar,somentequandomanipulamoso
itemdegrupoqueeleestejasubordinado.Elessousadosfrequentementepara
nopoluirmosocdigofontecomnomesdesnecessriosdevariveis.
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
21 22
Redefines
ExisteapossibilidadenoCOBOLIIdemudarmososatributosdeumcampo,tais
como, PICTURE, ESTRUTUTA-DE-DADOS (Layout), para que possamos mover
valoresdiferentesconformenossasnecessidades,podendoassimumcamposer
numrico,alfanumricooupartealfanumricoepartenumrico.Podemosredefinir
um item com tamanho menor que o original, mas devemos ter certeza que
estamosfazendoistocomumpropsitoespecfico.
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
Os campos ESTRUTURA1, 2 e 3 ocupam o mesmo endereo na memria do
programa, apenas tem atributos diferentes, isto dar vrios nomes ao mesmo
camponamemriadoprograma.

BOOK
Este comando permite que certas variveis ou procedimentos (BOOK) sejam
incorporadosaoprogramanacompilao,facilitandoediminuindoaredundncia
dereasdetrabalhoecdigosnosprogramasfontes.OcomandoCOPYpodeser
codificadoemtodasasdiviseseseesdoprograma.

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.
Parmetros
NOME-DA-AREA:IndicaonomedoBOOKqueserincorporadoaoprograma
nacompilao.
REPLACING:PesquisatodasasconstantesWKdoBOOKetrocaporLK,
nacompilaoesomenteparaoprogramaqueacionouoCOPY.

Nota
TantonaFILESECTION,quantonaWORKING-STORAGESECTION,oCOPY
pode ser dado na coluna 8, j na PROCEDURE DIVISION deve-se utilizar o
COPYnacoluna12,devidoainterpretaodocomando.

Ocorrncias
Podemosdefinirocorrnciasdecampos,quechamamosdeTABELA.Estescamposso
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),nonossocasonosreferenciaremosnaWORKING-STORAGESECTION.
TabelaMonodimensional
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
Chamamos de MONO-DIMENSIONAL a tabela que tem em sua estrutura
somenteumaclusulaOCCURS.

TabelaMultidimensional
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
Chamamos de BIDIMENSIONAL a tabela que tem em sua estrutura dois
OCCURS,multidimensionaissotabelascomvriosOCCURS.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
23 24
PROCEDUREDIVISION
A quarta e ltima diviso do COBOL onde definimos os procedimentos
(comandoseinstrues)queseroaresoluodeproblemasdeprocessamentos,
composta por sees e/ou pargrafos e sentenas que orientaro o fluxo de
execuodasinformaes.
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
Onde: O parmetro USING se refere a rea de comunicao entre programas,
normalmenteentreprogramasprincipaisesubprogramas.
Importante: AREA-1, AREA-2 so variveis de trabalho definidas na LINKAGE
SECTION do subprograma e na WORKING-STORAGE SECTION do
programaprincipal.

Accept
O comando ACCEPT recebe uma informao de dados, dependendo das
clusulas que completam o comando podero ser: ESTRUTURA DE DADOS,
DATADOSISTEMA,DIASDOANO,DIADASEMANAeTEMPO.

RecebendodadosdoJCL
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
digitadosnatela,devemosassinalarumareadeentradanoJCL.
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.
Recebendodatadosistema
EstecomandorecebeadatadosistemanoformatodeAAMMDD,ondeoDD
odia,MMomseAAoanodadatacorrentedosistema.
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.
Recebendoquantidadedediasdoano
EstecomandorecebeadatadosistemanoformatodeAADDD,ondeoAAo
anocorrente,eDDDaquantidadedediasdecorridosnoano.
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.
05 DIAS-DA-DATA PIC 9(03) VALUE ZEROS.
PROCEDURE DIVISION.
ACCEPT DIAS-DO-ANO FROM DAY.
Recebendodiadasemana
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
25 26
Recebendoahora
EstaoporecebeotempocorrentedosistemanoformatodeHHMMSSCC,onde
o HH so as horas, MM so os minutos, SS so os segundos e CC so os
centsimosdesegundoscorrentes.
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.
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.
Movimentaocorrespondente
Este comando copia o contedo de um determinado campo em uma estrutura
paraoutrocampodemesmonomeemoutraestrutura.
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.
Resultadodamovimentao:

CAMPO ESTRUTURA1 ESTRUTURA2


-------------------------------------------------------
Campo1CASA0057
Campo20000057CAS

Nota
Oscamposdevemconterasmesmascaractersticas,masnonecessitamtero
mesmotamanho.

Move
Este comando copia o contedo de um determinado campo para outro campo
definidonomesmoprograma.
Nota
VARIAVEL1:VariveldefinidanaFILESECTION,naWORKING-STORAGE
SECTIONounaLINKAGESECTION.
VARIAVEL2:Idemacima
CONSTANTE-FIGURATIVA:LOW-VALUES,HIGH-VALUES,SPACE(S),
ZERO(S),ALL.
LITERAL:'ABC','A','*',1,...9
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
27 28
Regrasdemovimentaes
Existem algumas regrasde movimentaesentreos camposnuma programao
COBOL,demodogeralelasseaplicamentrecamposdeconfiguraesdiferentes.
Asregrasso:

CASO1
Campoemissor:ALFANUMRICO
Camporeceptor:ALFANUMRICO
Resultado:Semrestries,atentandosomenteseocamporeceptorformenorque
o campo emissor os dados sero truncados direita, caso seja maior ser
completadocomespaosdireita.
CASO2
Campoemissor:ALFANUMRICO
Camporeceptor:NUMRICOzonadosemcasasdecimais
Resultado:Seocampoemissorfordomesmotamanhoeocontedofornumrico
amovimentaotersucesso,casocontrrioosresultadosseroinesperados.
CASO3
Campoemissor:ALFANUMRICO
Camporeceptor:NUMRICOzonadocomcasasdecimais
Resultado:NoPermitido.
CASO4
Campoemissor:ALFANUMRICO
Camporeceptor:NUMRICOCOMPACTADO
Resultado:NoPermitido.
CASO5
Campoemissor:NUMRICO
Camporeceptor:NUMRICO
Resultado:Semrestries,atentandosomenteseocamporeceptorformenorque
o campo emissor os dados sero truncados esquerda, caso seja maior ser
completadocomzerosesquerda.
CASO6
Campoemissor:NUMRICOzonadosemcasasdecimais
Camporeceptor:ALFANUMRICO
Resultado: Sem restries, atentando somente se o campo zonado receptor for
menorqueocampoemissor,osdadosserotruncadosdireita,casosejamaior
sercompletadocomespaosdireita.
CASO7
Campoemissor:NUMRICOzonadocomcasasdecimais
Camporeceptor:ALFANUMRICO
Resultado:NoPermitido.

CASO8
Campoemissor:NUMRICOcompactadocomousemcasasdecimais
Camporeceptor:ALFANUMRICO
Resultado:NoPermitido.

Display
Exibeocontedodeumavarivelpodendoserconcatenadacomumaliteral,o
contedodavarivelserexibidanumdispositivodesada.
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
VARIAVEL1/2:Varivelqueserexibidanumdispositivodesada(SYSOUT)
LITERAL1:Constantenonumrica(entreaspas)

Exemplo
DISPLAYNOMEDOALUNO=WK-NOME-ALUNO
DISPLAYNOTADOALUNO=WK-NOTA-ALUNO

Resultado
NOMEDOALUNO=JOSEDASILVANOTADOALUNO=10

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
29 30
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
OcomandoADDadicionarvaloresnumricosoucamposnumricosemoutros
campos numricos que ficaro armazenados na memria do programa, no
ser permitido a somatria de campos cuja a definio (PICTURE) seja
alfabticaoualfanumrica.
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
VARIAVEL1:Itemdedadoqueseradicionado
TO:Indicaqual(ais)o(s)campo(s)queacumular(o)ovalordocampo
NOME-DO-DADO1.
VARIAVEL2,3:Itemdedadoquereceber(o)ovalordoaVARIAVEL1
ON SIZE 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)aesquerda.
END-ADD:EncerraocomandoADD,quandoaclusulaONSIZEERRORfor
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
PROCEDURE DIVISION.
STOP LITERAL1.
STOP RUN.
Nota
Hdoistiposdeparadadeprograma,aparadatemporriainformandoooperador
de alguma anomalia ou aviso (LITERAL1), neste caso o programa continuar
executando aps a interveno do operador, ou a parada definitiva do programa
queserocasionadapeloparmetroRUN.
AbaixoveremosoexemplodeumprogramaemCOBOLusandooscomandos:
ACCEPT(receber), MOVE(mover), DISPLAY(exibir) e STOP RUN (parar
processamento).
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
31 32
Subtract
Esta instruo subtrai um ou mais itens numricos de outros itens numricos.
Existem3formatosdestecomando,comoveremosabaixo.
CASO1:
Parmetros
CASO1:Sersubtradooprimeirooperandodosegundooperando,oresultado
serarmazenadonoprimeirooperando
CASO 2: O resultado da subtrao ser armazenado nos campos da clusula
GIVING
CASO 3: Numa estrutura de item de grupo somente sero subtrados os
camposquecontenhamcorrespondentesentreasduasestruturas,oresultado
serarmazenadonositenscorrespondentesdaprimeiraestrutura.
ROUNDED:Osresultadosseroarredondadospelosistema5/4
ON SIZE ERROR: Caso o tamanho do campo receptor no comportar o
resultadodaoperao,oscomandosdestaclusulaseroexecutados.

Divide
Efetuaadivisodeumdadonumricoporoutroobtendooquocienteeoresto,
podendoarredondaroresultado.
CASO1:
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
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
CASO2:
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
CASO3:
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]
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]
CASO2:
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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.
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]
CASO1 : O resultado da diviso de VARIAVEL2 por VARIAVEL1 ser
armazenadoemVARIAVEL2.
CASO2 : O resultado da diviso de VARIAVEL2 pela LITERAL1 ser
armazenado em VARIAVEL2, neste caso a LITERAL1 dever ser um nmero
inteiro.
CASO3 : O resultado da diviso de VARIAVEL2 por VARIAVEL1 ser
armazenadoemVARIAVEL3,nestecasoapareceaclusulaREMAINDERque
serveparaarmazenarorestodestaoperaonaVARIAVEL4.
CASO 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.
ONSIZEERROR:Seracionadaseocamporeceptornosuportaroresultado
dadiviso(estourodecampo)
ROUNDED:Serusadoosistemade5/4dearredondamento.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
35 36
Multiply
Esta instruo multiplica itens numricos e coloca o resultado num identificador
dependendodoformatousado.
Parmetros
GIVING:Oresultadoserarmazenadonavarivelindicadaporesteparmetro,
se este parmetro for omitido o resultado ser armazenado no primeiro
parmetrodocomando,excetoseesteforumaliteral.
ROUNDED:Oresultadoserarredondadopelosistema5/4
ONSIZEERROR:Oscomandosdestaclausulaseroacionadoscasoocampo
receptor(VARIAVEL3)nocomportaroresultadodamultiplicao
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 )
* (VARIAVEL7 ** 2)
[ON SIZE ERROR Comandos...]
END-COMPUTE.
Parmetros
ROUNDED:IndicaoresultadodaexpressoaritmticanoVARIAVEL1,ser
arredondadopelosistemade5/4.
ON SIZE ERROR: Caso o resultado exceder o tamanho mximo do campo
VARIAVEL1oscomandosdesteparmetroseroacionados.
.
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(*)eExponenciao(**),bemcomoas
combinaes de parnteses ( ), dando uma sequencia de execuo nos
clculosaritmticos
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
37 38
AbaixoveremosoexemplodeumprogramaemCOBOLusandooscomandos:
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.
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.
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
valoresdiferentesdezeroseespao.
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
CASO1:
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
CASO2:
Parmetros
CASO 1: VARIAVEL1/2 - Sero inicializadas segundo suas PIC's, os campos
alfanumricos sero inicializados com espao, e os numricos com zeros. Se
forumitemgrupo,tudoqueforelementaraeleserlimpo
CASO 2: VARIAVEL1/2 - Dever ser um item de grupo (Nvel 01), as
inicializaes dos campos pertencentes a esta estrutura sero: REPLACING
selecionarsomenteoscamposdaestrutura:
ALPHABETIC=CamposcomPICTUREA(nn)
ALPHANUMERIC=CamposcomPICTUREX(nn)
NUMERIC=CamposcomPICTURE9(nn)comousemsinal
DATABY=Trocaroscamposselecionadospelaclusula
REPLACINGpelocontedodocampoVARIAVEL3,porumaliteralouporuma
constantefigurativacomexceodoALL.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
39 40
Abaixo veremos o exemplo de um programa em COBOL utilizando o comando
INITIALIZE(inicializar),quetemporfunoatribuirvaloresiniciaisvariveis.
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.
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.
Inspect
Estainstruoespecificaquecaracteresemumitemdedadosserocontados
TALLYING(CASO1),substitudosREPLACING(CASO2)ouambos,podendo
sercontadoaocorrnciadeumcaractereespecfico(zeros,spaces,asterisco,
etc.)emumavarivel,podendotambmserpreenchidootodooupartedesta
varivelcomzerosouspaces.
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]
CASO1:
Parmetros
CASO1:AcontagemqueainspeofarnaVARIAVEL1serarmazenadana
VARIAVEL2, as condies de contagem ser dada pela clusula FOR que
poderser:
FIRST=SomenteoprimeirocaracteredaVARIAVEL1.
ALL=TodososcaracteresdaVARIAVEL1.
LEADING=OsprimeiroscaracteresdoVARIAVEL1atquesejaencontrado
umcaractereigualaoinformadonosegundoparmetrodestaclusula.
AFTER = A contagem somente comear a ter incio aps o caractere
mencionadonosegundoparmetro.
BEFORE=Acontagemterefeitoatencontrarocaracteremencionadono
segundoparmetro.
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 REPLACING [LEADING / FIRST]
[VARIAVEL2 / LITERAL1 / CONSTANTE]
BY [VARIAVEL3 / LITERAL2 / CONSTANTE]
INITIAL [VARIAVEL4 / LITERAL3 / CONSTANTE]
CASO2:
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
41 42
ParmetrosContinuaodoINSPECT
CASO 2: A troca que a inspeo far na VARIAVEL1 ser comandada pelas
condiesdoprimeiroparmetrodaclusulaREPLACING,trocandoosdadosque
forem iguais ao segundo pelo terceiro parmetro, as condies do primeiro
parmetrosso:
FIRST=SomenteoprimeirocaracteredaVARIAVEL1.
ALL=TodososcaracteresdaVARIAVEL1.
LEADING = Os primeiros caracteres da VARIAVEL1 at que seja encontrado
umcaractereigualaoinformadonosegundoparmetrodestaclusula.
AFTER=Atrocasomentecomearaterincioapsocaracteremencionado
nosegundoparmetro.
BEFORE = A troca ter efeito at encontrar o caractere mencionado no
segundoparmetro.
Abaixo veremos o exemplo de um programa em COBOL utilizando o comando
INSPECT(inspecionar),quetemporfunoavaliar/trocardadosdevariveis.
IF
Este comando avalia uma ou mais condies e prove aes alternativas na
execuodoprograma,dependendodoresultadoda(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.
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*
* 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.
Parmetros
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: Se o primeiro operando for maior que o segundo, sero
executado(s)o(s),(Comandos1),senoforem,oscomandosdepoisdoELSE
seroexecutados(Comandos2).
EQUAL:Seoprimeirooperandoforigualaosegundoseroexecutado(s)o(s),
(Comandos1),senoforem,oscomandosdepoisdoELSEseroexecutados
(Comandos2).
NEXT SENTENCE: Esta clusula faz com que o desvio de procedimentos do
IFsejadirecionadoapsoprimeiroperodo(ponto)abaixodomesmo.
Evaluate
EstecomandopermitequepossamossubstituirumaestruturadeIF'spelouso
deumaestruturaCASE,poisnestecasoquandoumacondiodeseleofor
satisfatriaasdemaisnoseroexecutada
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
CASO1:
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
43 44
CASO 2: Formato: BSICO:Somente ser executado uma vez as instrues do
pargrafo,seoouinstruesaoPERFORM.
AclusulaTHRUindicarasadadarotina,quandoelaespecificadatodavez
que o controle passar pelo NOME-DA-ROTINA2 o PEFORM ser encerrado,
retornandoparaainstruologoapsoPERFORM.
PodemosusartambmaclausulaTIMEStantonoOUT-LINEquantono
IN-LINE,vejaexemploabaixo:
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
CASO1:AsclusulasTRUE/FALSE/ANYestodiretamenterelacionadoscom
a comparao do EVALUATE, pois podemos verificar se as comparaes so
respectivamenteverdadeiras/falsasounenhuma.
CASO 2: Este exemplo usado para substituir IF's no programa. A clusula
OTHERseracionadasomentesenenhumacondioanteriorforsatisfeita.

Perform
A instruo PERFORM transfere explicitamente o controle a um ou mais
procedimentos, esteprocedimentos 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
instruoPERFORM.Hdoistiposequatroformatosdestainstruo.
PERFORMOUT-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-LINE:Seroexecutadosasinstruesdeumarotina
IN-LINE :Sero executados as instrues que estiverem entre a clusula
PERFORMeseurespectivoEND-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
Nota
Formato:ComaopoTIMESseroexecutadasasinstruesdoPERFORMo
nmero de vezes indicada pela literal-numrica, tambm podemos especificar
umavarivelnmericacomumdeterminadovcalorprdefinido.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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
Formato : Com a opo UNTIL sero executadasas instrues dopargrafo, ao
PERFORM, at que a CONDICAO1 seja satisfeita, a CONDICAO1 poder ser
uma VARIAVEL (numrica ou alfanumrica), LITERAL ou CONSTANTE-
FIGURATIVA(excetoALL)omesmoacontececomaCONDICAO2.
Obs:AclausulaUNTILsegueomesmoformatodaclausulaIF,podendousarOR,
AND.
Podemos tambm utilizar a clausula VARYING para fazermos incrementaes
automticasemvariveisnumricas.
Nota
Formato:ComaopoVARYINGseroexecutadasasinstruesdopargrafo
ao PERFORM, a VARIAVEL1 / INDEX1 sero incrementados com o valor da
LITERAL2 / VARIAVEL2 ou INDEX2 automaticamente at quea CONDICAO1
seja satisfeita, no caso de uma pesquisa em uma tabela bidimensional a
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
47 48
Abaixo veremoso exemplodeumprograma em COBOLutilizandoumatabelae
sua pesquisa est sendo feita sob controle de um looping. Estamos usando os
comandosPERFORMUNTIL(processarat)eIF(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'.
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.
AbaixoveremosoexemplodeumprogramaemCOBOLutilizandoumatabelae
sua pesquisa est sendo feita sob controle de um looping. Estamos usando o
comandoEVALUATE.
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'.
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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.

GOTO
Este comando executa umdesviona sequencia lgica do programa, passandoo
controle do programa para outro pargrafo, porem possui maior utilizao em
programas lineares e modulares. Na programao estruturada o uso deste
comandononecessrio.
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... ]
Parmetros
NOME-DA-ROTINA : Endereo no programa onde desviado o controle do
processamento. A clausulaDEPENDING ON executa umdesvio na sequencia
lgica do programa, podendo desviar para vrios pargrafos, dependendo do
contedo numrico de um campo X, se o contedo de for 1 o controle ser
transferidoparaNOME-DA-ROTINA-1.Seocontedodofor2ocontroleser
transferidoparaNOME-DA-ROTINA-2eassimsucessivamente.
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.
*-------------------------------------------------------*
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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.
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.
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]
Search
Este comando utilizado para fazer uma pesquisa binria em uma tabela
(ARRAY) , iniciando onde o indexador da tabela estiver apontando, tabela
indexadapelondiceindicadonaclusulaINDEXEDBY.
Set
Usado para posicionar, decrementar ou incrementar um ndice de uma tabela
indexada. Respectivamente so: SET, SET DOWN BY, SET UP BY.
Parmetros
Search
Este comando utilizado para fazer uma pesquisa sequencial em uma tabela
interna,iniciandoondeoindexadordatabelaestiverapontando.
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]
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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
OCORRENCIAS: Pode ser um item subordinado a outro item que contenha a
clusulaOCCURS,isto,elepodeserpartedeumatabelabioumultidimensional.
NestecasoaentradadadescriodosdadosdeveespecificaraopoINDEXED
BYparacadadimensodatabela.OOCORRENCIASdevesereferiratodasas
ocorrncias dentro da tabela, isto , ele no pode ser subscrito ou indexado,
dever conter a clusula OCCURS com a opo INDEXED BY. Portanto, para
pesquisarinteiramenteumatabelabioumultidimensional,necessrioexecutar
uma instruo SEARCH para cada dimenso. Antes de cada execuo, a
instruoSETdeveserexecutadaparareinicializarosndicesassociados.

Pesquisandoumatabela

VARYING: Durante a execuo, a instruo SEARCH modificar os valores do


INDICE1ouaVARIAVEL1.
AT END: Esta clusula ser acionada quando o elemento da pesquisa no for
encontrado, o controle do processamento ser passado para os comandos
especificadosnela.Seestaclusulanoforespecificada,ocontroleserpassado
paraaprximainstruoapsoend-search.
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 parao elemento da tabela que satisfez a
condio. Se NEXT SETENCE foi especificado, o controle ser passado para a
prximainstruoapsoEND-SEARCH.

IMPORTANTE:AscombinaesdeOReANDsovlidasnestaclusula.

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
momento menor do que o primeiro elemento e nem maior que o ltimo
elemento.Quandoumatabelacommuitoselementostiverachaveclassificada
em ordem ascendente ou descendente, e no consecutiva, recomendado o
usodainstruoSEARCHALL.Nesseprocessoatabeladivididaaomeioe
verificadoemqual 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
primeirondiceespecificadonaclusulaOCCURS.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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'.
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.
ChamandoumSubprograma
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),nonecessitandoreescreveroscdigosacadanovoprograma.
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
USING:Indicaareaqueservirdecomunicaoentreoprogramaprincipale
osubprograma,definidanaWORKING-STORAGESECTION
CASO1:Chamadaesttica,estachamadaincorporanalinkediodoprograma
principaloexecutveldosubprograma,adesvantagemdessamodalidadeque
se houver alteraes no subprograma, devemos compilar todos os programas
principais que usarem o subprograma. CASO 2: Chamada dinmica, esta
chamada incorpora o executvel do subprograma ao programa principal em
tempodeexecuodomesmo,tornandoassim,disponvelaltimaversodo
subprograma,seestesofreumodificaes.
ProcedimentosnoSubprograma
Esta instruo usada para subprogramas (programas chamados por CALL
num programa principal) para devolver o controle (retornar) ao programa
principal,logoapsainstruoCALL.

CASO 1
CASO 2
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
57 58
ProcedimentosnoSubprograma
Estainstruousadaparasubprogramas(programaschamadosporCALLnum
programaprincipal)paradevolverocontrole(retornar)aoprogramaprincipal,logo
apsainstruoCALL.
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
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-
STORAGESECTIONdoprogramaprincipal,podendoternomesdiferentes.
EXIT/GOBACK: Retorna para o programa que chamou, passando a rea da
LINKAGESECTION.
Abaixo veremos o exemplo de um programa em COBOL, programa principal
(CHAMADOR)quechamaumsubprograma(CHAMADO)parapesquisaemuma
tabela.UsandoocomandoCALL.
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.
*--------------------------------------------------------*
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
59 60
Abaixo veremos o exemplo de um programa em COBOL, do subprograma, que
pesquisaatabelaeretornaparaoprogramaprincipalonomedoms.
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'.
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.
Abrindoumarquivo
OcomandoOPENabreosarquivosqueforamdeclaradosnaclusulaSELECTda
INPUT-OUTPUTSECTION,poisdevemostratartodososarquivosdeclaradosno
programa como se fossem um LIVRO, que para ler ou escrever alguma pgina
temosqueinicialmenteabri-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
INPUT:Oarquivosersomenteabertoparaleituradosregistros
OUTPUT:Oarquivosersomenteabertogravaodosregistros.
EXTEND: O arquivo ser aberto somente para gravao e os dados sero
gravados aps o ltimo registro existente no arquivo, este comando somente
validoparaarquivossequencias.
I-O: O arquivo ser aberto para leitura, gravao e excluso de registros, este
comandosomentepoderserusadoemarquivosindexados(VSAM).

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
61 62
Parmetros
INTO:utilizadoquandodefinimosaestrutura(layoutdoarquivo)naWORKING-
STORAGESECTION,osdefinidosnaFDnonecessitamdestaclusula.
ATEND:TratadacondiodeFIMDEARQUIVO,executandooscomandosque
estoentreesteparmetroatoEND-READ.
INVALIDFKJEY:RegistronoencontradonumaleituradiretanumarquivoVSAM
indexado.
END-READ: Encerra o comando READ, quando a clusula AT END for
especificada.
Nota
EstaleituraserparaarquivosabertoscomoINPUTdeacessoSEQUENCIAL.
Lendoumarquivo
O comando 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
registrosserolidosdoprimeiroaoltimo,sempularnenhumregistro.
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]
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
Parmetros
FROM: GravaocontedodavarivelVARIAVEL-1noregistrodoarquivo,
movendoocontedodadiretaparaaesquerda.
PAGE: Indicarumsaldodepgina,obedecendoaclusulaAFTERou
BEFOREADVANCING,poderemostambmindicarosaltodepginadeclarada
noSPECIAL-NAMES,Ex:C01ISSALTO-DE-PAGINA
WRITELINHAFROMCAB1AFTERSALTO-DE-PAGINA
AFTERADVANCING:Antesdeimprimirumalinhadorelatrio,saltaronmero
delinhasindicadosnaVARIAVEL-2ounaLITERAL-NUMERICA(de01a99).
BEFOREADVANCING:Depoisdeimprimirumalinhadorelatrio,saltaro
nmerodelinhasindicadonaVARIAVEL-2ounaLITERAL-NUMERICA.
INVALIDKEY:Usadodetectarqualquererrodegravao(faltadeespao,errode
I-O),oscomandosdestaclausulaseroacionados.

Fechandoumarquivo
OcomandoCLOSEfechaosarquivosqueforamdeclaradosnaclusulaSELECT
daINPUT-OUTPUTSECTIONeABERTOS(OPEN)noinciodoprograma,este
comandocomumenteusadonofinaldoprocessamentodoprograma.
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
Ofechamentodosarquivosindependedotipodeabertura.

SelecionandoumVSAM
A clausula SELECT do COBOL para um VSAM sofre algumas modificaes,
conformedescritasabaixo:

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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
63 64
Parmetros
ACCESSMODE:
SEQUENTIAL:Oarquivospoderserlidosequencialmente.
RANDOM:Oarquivospoderserlidodiretamentepelachaveespecificada.
DYMANIC:Ambosacessosacima.
RECORD KEY:Indicaqualserachavedeacessodoarquivo,normalmentea
FDcontmestasinformaes.

Nota
Somente os arquivos de organizao indexada podero conter as clusulas
RANDOM,DYMANICeRECORDKEY.

RegravaodoVSAM
Estecomandoutilizadopararegravarregistrosdeinformaes,umdispositivo
deentradaesada(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]
[INVALID KEY... Comandos... ]
[END-REWRITE]

ExclusodeumregistrodoVSAMindexado
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
INVALIDKEY:TratadacondiodeNOENCONTRADO,executandoos
comandosqueestoentreesteparmetroatoEND-DELETE.
END-DELETE:EncerraocomandoDELETE,quandoaclusulaINVALIDKEYfor
especificada.
Nota
EstecomandoserparaarquivosABERTOScomoI-OdeacessoSEQUENCIAL,
RANDOMICOouDINMICO,serexcludooregistrocujoovalorserinformado
naRECORDKEY.

SelecionandoumSORT
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
arquivonoCOBOL,comeandonaFILE-CONTROLcomoveremosabaixo:
Parmetros
FROM:RegravaocontedodavarivelVARIAVEL1noregistrodoarquivo,
movendoocontedodadireitaparaaesquerda.
INVALIDKEY:Usadoparacontroledeerrodegravao,seocorreralgumerroos
comandosdestaclusulaseroacionados.
Nota
EstecomandoserparaarquivosABERTOScomoI-OdeacessoRANDOMICO,
SEQUENCIALouDINMICO.
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.
SELECT NOME-DO-ARQUIVO ASSIGN TO NOME-EXTERNO.
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
65 66
ExecutandoumSORT
O comando para classificar o arquivo SORT definido no SD estar na
PROCEDUREDIVISION,estecomandosso:SORT,RELEASEeRETURN.
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:
Comseleonaentrada:Oarquivodeentradaserclassificadopelaschavesda
clusula ON (ASCENDING / DESCENDING KEY) podendo haver seleo nos
registros de entrada dependendo das rotinas especificadas na INPUT
PROCEDURE,estarotinaserumaSECTION.

Parmetros
ON ASCENDING : Chaves de classificao do arquivo SORT do menor para o
maiorvalor.
DESCENDING:ChavesdeclassificaodoarquivoSORTdomaiorparaomenor
valor.
USING:Assinalaodoarquivodeentrada,estearquivonoprecisarseraberto
oufechadoviacomandonoprograma.
GIVING:Assinalaodoarquivodesadaquesergeradoautomaticamenteaps
osdadosseremclassificadospeloSORT.
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 ....
...
RELEASE REG-ARQUIVO-SORT [FROM AREA-DE-TRABALHO].

CASO1:
Semseleo:OarquivodeentradaserclassificadopelaschavesdaclusulaON
(ASCENDING / DESCENDING KEY) e ser gerado o arquivo de sada. Para
selecionarmos os registros de entrada e sada temos que ter a clusula
INPUT/OUTPUTPROCEDURE,nocaso1estasclusulasnoestopresente.

Parmetros
RELEASE: Comando de gravao do SORT (aps ser classificado) no sendo
necessrioabri-looufech-lonoprograma.

CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
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.
IF CAMPO-DO-ARQUIVO ...
...
WRITE REG-ARQUIVO-SAIDA
Parmetros
RETURN:ComandodeleituradoSORT(apsserclassificado)nonecessrio
abri-looufech-lonoprograma.
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].
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
CASO3:
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
rotinadeverserumaSECTION.
CASO4:
Com seleo na entrada e sada: O arquivo de entrada ser classificado pelas
chaves da clusula ON (ASCENDING / DESCENDING KEY) podendo haver
seleonosregistrosdeentradadependendodasrotinasespecificadasnaINPUT
PROCEDURE,epodendohaverseleonosregistrosdesada,dependendodas
rotinasespecificadasnaOUTPUTPROCEDURE,ambasseroSECTIONs.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
69 70
AnexoIPalavrasReservadas

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

AnexoIPalavrasReservadas

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
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
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
71 72
AnexoIPalavrasReservadas

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
AND ARE AT
BY CORR CORRESPONDING
DOWN ELSE FROM
IN INTO IS
NOT OF OFF
ON OR TO
UNTIL UP

AnexoINomesdeRotinas

Umnomederotinaumconjuntodenomnimo1enomximo30caracteres
querepresentaroumLABEL(endereo)noprograma.

AnexoISentenadasRotinas
Uma sentena um conjunto de instrues que executaro um servio, uma
sentenacompostaporcomandos,conectoresevariveis.

AnexoICaracteres
AcodificaoCOBOLformadaporumconjuntobsicosdecaracteres:

26LETRAS(A~Z)
10DGITOS(0~9)
CARACTEREBRANCO(ESPAO)
PONTOEVRGULA
ASPAOUAPSTROFE
PARNTESES
PONTO
VRGULA
MAIS
MENOS
ASTERISCO
BARRA
IGUAL
CIFRO
MAIORQUE
MENORQUE

AnexoIRegrasdeFormao
Existem palavras reservadas do COBOL que veremos no decorrer do curso,e
existempalavrasatribudaspeloprogramador.Nacriaodelas,oprogramador
deveobedecercertasregrascomo:
Tamanho mximo de 30 caracteres, e estes podem ser letras, nmeros e
caracteresespeciais;
Iniciarapalavracomumaletra.
CobolparaMainframe CobolparaMainframe
COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda COBOL-TodosdireitosreservadosparaMainframeSchoolTreinamentosLtda
73
AnexoI-Literais
Sovaloresconstantesutilizadosemumprograma,existem2tiposdeliterais:
Numrica:compostapelosdgitosde0a9,sinalpositivoounegativo(+/
),eseutamanhomximode18dgitossemcontarossinaisaritmticosnem
vrgulaemcasodecamposcomcasasdecimais.
Exemplos:123456789
Nonumrica:compostaporumconjuntodecaracteres,estoentreaspas
ou apstrofes e seu tamanho mximo de 120 caracteres excluindo-se as
aspasouapstrofes:
Exemplos:MFS.SCHOOL''&*%$#''097@3'

AnexoI-RegrasdePontuao
O compilador COBOL detalhistaquantopontuao utilizadana codificao
deumprograma,asregrasaseguirsobemparecidascomnossaescrita:

Aofinalizarumasentenadevemosusarumpontofinal.
Entreumapalavraeoutradevemosusarnomnimoumespaoembranco.
Caracteres de clculo ou de comparao devero ser separados por no
mnimoumespaoembranco.
Obs: Podemos usar vrgula mas no ter efeito nenhum na execuo da
sentena,sersomenteparamelhoraroentendimentodasintaxe.

AnexoI-ConstantesFigurativas
FazempartedaspalavrasreservadasdoCOBOLepossuemumvalor.

LOW-VALUES:Menorvaloralfanumrico
HIGH-VALUES:Maiorvaloralfanumrico
SPACEouSPACES:Caracterebranco
ZEROouZEROS:Nmerozero
ALL: Transforma uma literal alfanumrica em constante figurativa
(preenchetodocontedodeumavarivelcomumaconstante).
74
FileStstus

00 Operaorealizadacomsucesso
02Operaorealizadacomsucesso,existechaveduplicadamasaopo
WITHDUPLICATEfoidefinida
04READrealizadocomsucesso,entretanto,otamanhodoregistrolidono
temomesmotamanhodescritonaFDdoarquivonoprograma
10 Fimdearquivoencontrado
22 TentativadeincluirumregistrocujaachavejexistenoarquivoIndexado
23 TentativadelerumregistrocujaachavenoexistenoarquivoIndexado
24 No existe espao no arquivo para mais inseres de registros para
arquivosindexados
30 Erropermanente-normalmenteoerroestnoJCL
34 No existe espao no arquivo para mais inseres de registros para
arquivossequenciais
35 ArquivonoexistenteparaoaberturaINPUT,EXTENDouI-O
37 Tipodeaberturanopermitidoparaoarquivo
41 Aberturadeumarquivoquejseencontraabertonomesmoprograma
43 UmDELETEouREWRITEfoiexecutadosemqueoarquivoestejaaberto
paraI-O,ou,umcomandodeleituraexecutadoanteriormentenoobteve
sucesso.
44 Um comando REWRITE foi executado com tamanho diferente ao j
gravadonoarquivo.
46 TentativadelerumarquivoquenoestabertoparaINPUTouI-Oou,o
arquivoencontrouofim
47 TentativadelerumarquivoquenoabertoparaINPUTouI-O
48 Tentativa de gravar um registro num arquivo que no foi aberto como
OUTPUTouI-O
49 Tentativadeexcluirougravarumregistronumarquivoquenofoiaberto
comoI-OouOUTPUTrespectivamente.
92 ArquivoespecificadonoJOBeassinaladonoprogramanoexiste
93 Faltadememriaparaexecutaroprogramaouparaabrirumarquivoouo
mesmoestsendoexecutadoemoutroprograma.