Você está na página 1de 64

postila de Cobol I

ndice Explanao de um fonte Cobol 2 rea de numerao sequencial 2 rea de indicao 2 rea A e B 3 Identification Di ision ! Data Di ision ! "rocedure Di ision ! Comandos condicionais # C$lculos aritm%ticos &' (aos &! )ari$ eis &* Alfab%tica 2& +um%rica 2& Alfanum%rica 22

,corr-ncias 23 Exibindo e aceitando informa.es do usu$rio 2! Comunicao entre pro/ramas 20 1ratamento e arma2enamento de informa.es 3' 3equential 3' (ine 3equential 32 4elati e 32 Indexed 33 Confi/uration 3ection 3! Input5,utput 3ection 3! 4A+D,6 7Aleat8rio9 3: 3E;<E+1IA( 73eq=encial9 3: D>+A6IC 7Din?mico9 3: 6anipulando as informa.es 3@ Ara ando no as informa.es 30

4e/ra ando no as informa.es 30 Apa/ando informa.es !' Consultando informa.es !' BecCando os arqui os !! ,rdenando as informa.es !! Impresso !: Ambientes multiusu$rio 74edes9 !0 18picos adicionais #& 1ratamentos de dados alfanum%ricos #& 4ecuperando arqui os corrompidos #!
Explanao de um fonte Cobol Todo programa escrito na linguagem Cobol possua algumas regras rgidas a serem seguidas como uma redao que possui incio, meio e fim, mas isto j opcional, com o advento de novas tecnologias possvel escrever um cdigo fonte em free format, ou seja, no necessrio seguir todas as regras da linguagem. cdigo fonte possui quatro divis!es que devem ser utili"adas nesta ordem# $%&'T$($C)T$ ' %$*$+$ ', &'*$, '-&'T %$*$+$ ', %)T) %$*$+$ ' e ., C&%/,& %$*$+$ '. &stas divis!es devem ser escritas seguindo algumas regras de posicionamento# 0 000 00 0 ....0....1....0....2....0....3....0....4....0....5....0....6....0....7....0... Colunas de 1 a 6# 8rea de numerao sequencial Coluna 7# 8rea de indicao Colunas de 9 a 11# 8rea )

Colunas de 12 a 72# 8rea : .ode;se digitar at a coluna 9< mas tudo que for digitado entre 73 e 9<, ser considerado como um comentrio.

rea de numerao sequencial


'ormalmente consiste em seis dgitos em ordem crescente que normalmente so utili"ados para marcas de identificao do fonte. +egundo as regras no )'+95 pode;se tambm colocar comentrios nesta rea. )lm disso podemos colocar um asterisco na coluna 1 =um> ou qualquer outro caractere onde sua representao )+C$$ seja menor do que 2< =&+.)? >, fa"endo com que a lin@a inteira seja considerada como um comentrio.

rea de indicao
/m @fen =;> nesta posio indica que eAiste uma continuao de uma cadeia de caracteres que foi iniciada na lin@a anterior, ou seja, quando desejamos atribuir um valor inicial a uma varivel em sua declarao ou quando desejamos eAibir um teAto muito eAtenso. pcionalmente podemos colocar o teAto inteiro na lin@a de baiAo para no termos que quebra-lo. /m asterisco =B> indica que toda a lin@a deve ser tratada como um comentrio. /ma barra =C> alm de tratar a lin@a como comentrio far com que ao gerar um arquivo de listagem =.D+T> ser adicionado um salto de pgina para impress!es. /m dlar =E> indicar ao compilador que a lin@a ter diretivas de compilao ou compilao condicional. &stas diretivas so utili"adas para modificar o comportamento e compatibilidade dos programas no ambiente -erant -icro (ocus.

rea A e B
riginalmente @avia uma separao do que poderia ser escrito na rea ) e na rea :, com o advento do )'+95 isto no eAiste mais. &sta distino implicava que as divis!es, se!es, declarao de variveis e pargrafos do programa eram os Fnicos que podiam utili"ar a rea ) e outros comandos a rea :. *amos analisar o cdigo fonte a seguir# ....0....1....0....2....0....3....0....4....0....5....0....6....0....7.. identification division. program;id. Calc)rea. aut@or. %T+ Datin )merica +oftGare.

B data division. GorHing;storage section. 77 largura pic I=<<3> value "eros. 77 altura pic I=<<3> value "eros. 77 area;result pic I=<<6> value "eros. B procedure division. inicio. displaJ erase displaJ KCalculo de area =LuadradosC,etangulos>K at <521 displaJ KDargura# K at 1<1< displaJ K)ltura # K at 121< accept largura at 1<1I accept altura at 121I multiplJ largura bJ altura giving area;result displaJ K)rea # K at 141< area;result stop run .
Identification Di ision

%iviso de identificao do programa. &sta diviso possui a seguinte estrutura# $%&'T$($C)T$ ' %$*$+$ '. ., M,)-;$%. nome;programa. )/TN ,. comentrio. $'+T)DD)T$ '. comentrio.

%)T&;O,$TT&'. comentrio. %)T&;C -.$D&%. comentrio. +&C/,$TP. comentrio. Todos os comandos que possuem a palavra comentrio na frente, no possuem nen@um efeito na aplicao, so apenas parQmetros opcionais para documentao do programa, mas, caso queira utili"ar algum deve ser escrito corretamente para que no cause erro de compilao. %eve;se optar em deiAar o parQmetro nome;programa com o mesmo nome eAterno do fonte, pois, este parQmetro ser utili"ado para identificao em memria aps a primeira carga, ou seja, quando c@amamos um programa, o primeiro local de pesquisa feita pelo compilador ser em memria e caso no encontre ele ir procurar no disco e carreg;lo na memria, aps isto, toda ve" em que o programa for c@amado de novo no ser necessrio a pesquisa em disco, pois, o programa j estar na memria =caso no ten@a sido cancelado>, agora vejamos o seguinte eAemplo# .rograma C@amador .rograma C@amado 1 .rograma C@amado 2 .rograma C@amador =.rincipal.cbl> se trata de um programa :atc@ que ir eAecutar um processo isolado de tratamento dos dados e ele ir eAecutar o .rograma C@amado 1 =.rog1.cbl>, quando o .rog1 voltar o controle ao .rincipal este c@amar o .rograma C@amado 2 =.rog2.cbl> e este .rog2 foi criado a partir de uma cpia de .rog1 e o programador esqueceu de modificar o seu .rogram;$% deiAando;o com .rog1, bem, a confuso ir comear quando o .rincipal for c@amar o .rog1 novamente, como o .rog2 possui a mesma referRncia de identificao de .rog1 o compilador ir eAecutar o .rog2 imaginando que se trata do .rog1.
Data Di ision

%iviso voltada Fnica e eAclusivamente S definio de estruturas de registros, variveis e constantes do programa, ou seja, uma rea de alocao de memria para todo o espao necessrio ao seu programa. &sta diviso possui a OorHing;+torage +ection. &sta seo da %ata %ivision voltada para a declarao das variveis e constantes do programa. Todos os nomes utili"ados no programa devem ser eAclusivos, eAistem meios de quebrar esta regra conforme visto posteriormente, e de no mAimo trinta caracteres, caso o nome de algum elemento ultrapasse estes trinta caracteres simplesmente ter seu eAcedente ignorado pelo compilador. 77 largura pic I=<<3> value "eros.

&sta lin@a est declarando uma varivel c@amada largura de 3 posi!es numricas e l@e atribui como valor inicial# "ero. nFmero 77 S frente indica o nvel da varivel. $sto ser discutido mais S frente.
"rocedure Di ision

&sta diviso controla a eAecuo do programa, onde colocamos os comandos a serem eAecutados em uma ordem lgica. &sta eAecuo controlada por pargrafos =eAiste um c@amado $'$C$ no programa eAemplo> eles funcionam como identifica!es de blocos de comandos. displaJ erase comando display utili"ado para eAibir informa!es na tela em ambientes caracteres. ) palavra reservada erase utili"ada em conjunto com displaJ para limpar a tela. displaJ KCalculo de area =LuadradosC,etangulos>K at <521 &sta forma de utili"ao do displaJ ir eAibir na tela a cadeia de caracteres entre as aspas =T T> na posio especificada por at 0521, ou seja, lin@a 5 e coluna 21 que so compreendidas entre lin@as de 1 a 25 e colunas de 1 a 9<. accept largura at 1<1I &ste comando utili"ado para aceitarmos alguma informao, neste caso estaremos esperando que usurio informe algo na posio 1<1I =+eguem as mesmas regras do comando displaJ>, o usurio indica para a aplicao que terminou de fornecer estar informa!es pressionando a tecla &'T&,. multiplJ largura bJ altura giving area;result comando multiply um dos comandos aritmticos da linguagem, ele utili"ado para fun!es de multiplicao, neste caso ele ir multiplicar o conteFdo numrico da varivel largura por altura movendo o resultado para a varivel rea-result. stop run &ste comando encerra a aplicao, na verdade o run um parQmetro do comando stop onde podemos substituir o run por uma cadeia de caracteres =string>. .or eAemplo# stop TTesteUV. &ste comando ir eAibir a mensagem e esperar por um &'T&, para que seja finali"ado. Todo pargrafo deve possuir um ponto final ou o Fltimo comando deve possuir um ponto. &m vers!es anteriores da linguagem o ponto era obrigatrio para cada comando. &Aerccios# 1W ; %igite o programa ilustrado em um &Aerc1.cbl e eAecute;o.

2W ; )ltere o &Aerc1.cbl fa"endo com que todos os displaJXs e acceptXs fiquem duas lin@as mais abaiAo na sua apresentao e eAecute;o. Comandos condicionais s programas sempre necessitam tomar decis!es sobre que rumo tomar em certas circunstQncias. .ara que o programa possa fa"er isto eAistem dois comandos condicionais# o IF e o EVA !A"E# ) estrutura do IF # comando IF utili"ado para tomadas de decis!es simples do tipo #e for $erdade fa%a isto #en&o fa%a aquilo, condition indica a condio a ser avaliada e se for verdade o comando statement-1 ser eAecutado, caso a avaliao da condio no seja verdadeira o IF eAecutar o statement-2 caso o mesmo eAista, caso contrrio simplesmente o compilador ir eAecutar o prAimo comando. .or eAemplo# ... if nome equal T():$ V displaJ nome else displaJ T%escon@ecido...V end;if ... 'este eAemplo, caso a varivel nome se'a igual a (FA)I*+ ento o comando display nome ser eAecutado, caso contrrio ser eAecutado o comando display (,escon-ecido...+. 'ote que neste eAemplo no foi utili"ada a clusula "/E0 pois a mesma opcional. utro detal@e importante referente ao ponto, caso o programador opte em adotar um ponto por comando, ele deve se atentar no seguinte# BY $sto esta erradoZZZ ... if nome equal T():$ V.

displaJ nome. else. displaJ T%escon@ecido...V. end;if. ... BY $sto esta certoZZZ ... if nome equal T():$ V displaJ nome else displaJ T%escon@ecido...V end;if. ... comando IF ir considerar como o fim de seus comandos a clusula E0,-IF ou o primeiro ponto encontrado. .ara as condi!es vlidas temos# Condio Smbolo Clusula $gual [ E1!A -enor que \ E## "/A0 -enor igual que \[ E## "/A0 *2 E1!A "* -aior que Y 32EA"E2 "/A0 -aior igual que Y[ 32EA"E2 "/A0 *2 E1!A "* %iferente \Y 0*" E1!A ou !0E1!A "* .ara condi!es de '] , ou seja, n&o 4 igual, n&o 4 diferente, basta preceder com a clusula ' T. Todos os eAemplos a seguir so vlidos# ...

if nome ' T &L/)D T():$ V displaJ nome end;if ... ... if nome /'&L/)D T():$ V displaJ nome end;if ... ... if nome &L/)D T():$ V )'% estado &L/)D T+.V displaJ nome end;if ... ... if nome &L/)D T():$ V , estado &L/)D T+.V displaJ nome end;if ... ... if =nome &L/)D T():$ V )'% estado &L/)D T+.V> , idade Y 2< displaJ nome end;if ...

) estrutura do EVA !A"E # ) clusula E$aluate possui um sofisticado mecanismo de anlises condicionais , onde podemos utili"ar as mesmas condi!es aceitas pela clusula IF e alm disso algumas clusulas prprias do comando. A #* indica que &*)D/)T& dever analisar duas condi!es distintas simultaneamente. .odemos tambm utili"ar a instruo "2!E e FA #E, que indicaro que a anlise dever ser feita nas entradas 5/E0. 5/E0 *"/E2 uma alternativa caso nen@uma das condi!es de 5/E0 gere um "2!E na avaliao. Todos os eAemplos a seguir so vlidos# ... &valuate true O@en nome equal T():$ V %isplaJ TTeste 1V O@en nome equal TD&)'%, V %isplaJ TTeste 2V O@en nome equal TD& '),% V %isplaJ TTeste 3V O@en ot@er

%isplaJ T&rro...V &nd;evaluate ... ... &valuate nome O@en T():$ V %isplaJ TTeste 1V O@en TD&)'%, V %isplaJ TTeste 2V O@en TD& '),% V %isplaJ TTeste 3V O@en ot@er %isplaJ T&rro...V &nd;evaluate ... ... &valuate numero O@en 1 %isplaJ TTeste 1V O@en 2 t@ru 5 %isplaJ TTeste 2V O@en 6 %isplaJ TTeste 3V O@en ot@er %isplaJ T&rro...V

&nd;evaluate ... ... &valuate numero also nome O@en 1 also T():$ V %isplaJ TTeste 1V O@en 2 t@ru 5 also TD&)'%, V %isplaJ TTeste 2V O@en 6 also TD& '),% V %isplaJ TTeste 3V O@en ot@er %isplaJ T&rro...V &nd;evaluate ... &Aerccios# 1W ; Copie o &Aerc1.cbl para um &Aerc2.cbl e faa uma condio para quando rea; result for menor do que 1<< eAiba T)rea =peq>V e caso contrrio T)rea =gnd>V. Clculos aritmticos ) linguagem Cobol possui rotinas que auAiliam o programador a efetuar clculos aritmticos, so eles# A,,# /tili"ado para somar valores, sua sintaAe # (ormato 1# (ormato 2#

(ormato 3#

Identifier-16 Identifier-2 e Identifier-7 representam variveis numricas. iteral-1 e iteral-2 representam valores fiAos, ou seja, o nFmero escrito no programa. 2ounded indica ao comando que os valores decimais devem ser arredondados, caso esta palavra reservada no seja indicada o compilador ir truncar estes valores, ou seja, um valor 1<.25 truncado ficar como 1<.2. 3IVI03 indica que utili"aremos uma varivel como repositrio do resultado obtido pela soma de Identifier-1 com Identifier-2, caso 3IVI03 no seja especificado o Identifier-2 ser afetado pelo comando, ou seja, ele ser utili"ado para o resultado da soma. Imperati$e-statement-1 e Imperati$e-statement-2 indicam que algum comando dever ser eAecutado, desde que este comando no seja de anlise condicional, por eAemplo, um $(. ' +$^& &,, , ocorrer sempre que o Indentifier-2 ou Indentifier-7 no comportarem o valor especificado e ' T ' +$^& &,, , ocorrer na situao de normalidade do processo. 8*22E#9*0,I03 utili"ado para somar uma T):&D) inteira, ou seja, podemos construir tabelas nas defini!es das variveis e com este recurso do comando somar a tabela de uma Fnica ve", sem a necessidade da construo de laos para somar item a item. E0,-A,, opcional. A0#:5 indica que est uma conveno nova e *#V# uma conveno antiga utili"ada no ;ainFrame. #!)"2A8"# /tili"ado para subtrair valores, sua sintaAe # (ormato 1# (ormato 2#

(ormato 3# +egue as mesmas regras do comando )%%.

;! "I9 <# /tili"ado para multiplicar valores, sua sintaAe # (ormato 1# (ormato 2#

+egue as mesmas regras do comando )%%. ,IVI,E# /tili"ado para dividir valores, sua sintaAe # (ormato 1# (ormato 2#

(ormato 3# (ormato 4#

(ormato 5# Luando utili"a;se a palavra reservada )< estamos informando que se trata de uma

diviso do Identifier-1 pelo Identifier-2. /tili"ando a palavra reservada I0"* invertemos a situao. 2E;AI0,E2 indica que o comando ,IVI,E no dever truncar o resultado e mover o resto para o Idenfifier-=, desde que o Idenfifier-2 =caso M$*$'M no seja especificado> ou Identifier-7 no ten@am casas decimais. 8*;9!"E# /tili"ado para calcular valores, sua sintaAe # (ormato 1# .odemos utili"ar qualquer eApresso aritimtica vlida =eAcluindo;se c@aves T_`V e colc@etes TabV> para que o 8*;9!"E a eAecute. s sinais esperados so# c )dicionar

+ubtrair

B -ultiplicar C %ividir BB &Aponenciao &sta eApresso tambm poder conter T.arRntesesV = >. .or eAemplo# C -./T& resultado [ 2 c 3 B 4 d = 3 c 4 > Laos &Aistem basicamente dois tipos de programas, os on-line e batc-, os programas de denominao on-line so aqueles que funcionam com interao direta e eAclusiva de um usurio controlando;o. s programas denominados batc- so programas que podem ser c@amados a partir destes programas on-line =muitos programas on-line no utili"am programas batc-> mas em sua grande maioria so programas de uso restrito de usurios de reas responsveis pelo controle e qualidade das informa!es =C.%>, onde estes programas so iniciados e podem no solicitar nada para eAecutar seus trabal@os e simplesmente informar apenas o trmino do processo ou solicitar apenas algumas informa!es essenciais para fa"er o trabal@o. &stes programas inevitavelmente tero que eAecutar um determinado grupo de comandos e condi!es para cada registro de uma base de informa!es =base de dados nativa ou bancos de dados>, isto , controlados por la%os, so dispositivos fornecidos pela linguagem para que possamos eAecutar os

mesmos comandos com dados diferentes at que uma determinada condio seja satisfeita, por eAemplo, o fim dos registros a serem tratados. &Aistem dois comandos utili"ados para controle de la%os o 9E2F*2; e o 3* "*, o comando perform possui mecanismos mais apurados para tratamento de laos e o go to muito mais simples e tambm con@ecido como o Tpatin-o feio+ entre os programadores da linguagem 8obol por possibilitar fa"er o desvio da eAecuo de pargrafo tornando a manuteno de cdigos, muito mais compleAa e trabal@osa. ) diferena mais destacada entre estes dois comandos que quando o 9E2F*2; eAecuta um pargrafo ele retorna para eAecutar o prAimo comando e o 3* "* no fa" isto, ele simplesmente desvia a eAecuo. &Aemplo de um .&,( ,-# BY se o valor de numero for igual a 1 eAecuta o paragrafo;1 BY antes de eAibir T.rocesso oH...V $f numero not equal 1 .erform paragrafo;1 &nd;if displaJ T.rocesso oH...V ... &Aemplo de um M T # BY se o valor de numero for igual a 1 nao eAibe BY T.rocesso oH...V $f numero not equal 1 Mo to paragrafo;1 &nd;if displaJ T.rocesso oH...V ... ) seguir vamos ver a estrutura do comando 9erform# (ormato 1# (ormato 2#

(ormato 3#

(ormato 4# "/2*!3/ e "/2! so equivalentes, procedure-name-1 e procedure-name2 so nomes de pargrafos a serem eAecutados. Caso opte;se em utili"ar um imperati$estatement-1, ou seja, um comando a ser eAecutado vrias ve"es no pode;se utili"ar o nome de pargrafos em conjunto. E0,9E2F*2; indica o trmino dos comandos a serem eAecutados dentro do lao in-line, logo quando se utili"a algum pargrafo no permitido a utili"ao de E0,9E2F*2;. Identifier-1 ou Integer-1 em conjunto com "I;E# indica que o lao deve ser eAecutado um determinado nFmero de ve"es. 5I"/ "E#" )EF*2E =padro>e 5I"/ "E#" AF"E2 informam ao lao se o testes condicionais devem ser feitos antes ou depois de uma nova eAecuo. !0"I determina uma condio de trmino do lao, esta condio respeitar a determinao de 5I"/ "E#" AF"E2, se for especificado &e$T ao invs de uma condio para /'T$D quando estiver eAecutando um pargrafo ele s poder ser encerrado com um #"*9 2!0 ou E>I" 92*32A; =este Fltimo comando tem a mesma funo de #"*9 2!0 para um programa secundrio, ou seja, eAecutado por outro programa>, quando estamos eAecutando um lao in-line ele s ser encerrado aps a eAecuo de um E>I" 9E2F*2; ou 3* "*. VA2<I03 far com que o lao incremente uma varivel numrica identificada por Identifier-2 a partir de Identifier-7 com um incremento especificado em Identifier-= at que uma condio seja verdadeira, condio essa especificada em condition-1, esta condio no precisa ter necessariamente a mesma varivel envolvida em VA2<I03. )(T&, possui as mesmas

caractersticas tcnicas de VA2<I03 com seu funcionamento acionado para cada valor diferenciado na varivel especificada em VA2<I03. ) seguir, vamos ver a estrutura do comando 3o "o# (ormato 1# (ormato 2#

&ste comando fa" um desvio para outro pargrafo do programa no dando continuidade aos comandos que eAistirem abaiAo dele no pargrafo onde foi eAecutado. Caso seja utili"ado a clusula ,E9E0,I03 *0 a varivel numrica identificada por identifier ter um nFmero de correspondRncia de qual pargrafo ser eAecutado, ou seja, se for especificada uma lista com trRs nomes de pargrafos e a varivel for igual a 3 ento o terceiro pargrafo ser eAecutado. &Aemplo de um lao# identification division. program;id. Daco. aut@or. %T+ Datin )merica +oftGare. B data division. GorHing;storage section. <1 %ata+istema. 1< )no+istema pic I=<<4> value "eros. 1< -es+istema pic I=<<2> value "eros. 1< %ia+istema pic I=<<2> value "eros. 77 Contador pic I=<<3> value "eros. B procedure division. inicio. displaJ erase

perform pega;data;sistema perform eAibe;tela perform varJing contador from 1 bJ 1 until contador Y 1< displaJ KContador# K contador end;perform stop run . B pega;data;sistema. accept datasistema from date JJJJmmdd . B eAibe;tela. displaJ K.rograma batc@...K displaJ K%ata de eAecucao# K diasistema KCK messistema KCK anosistema displaJ K K . )nlise do fonte# perform pega;data;sistema &ste perform ir eAecutar um pargrafo c@amado pega;data;sistema e retornar para o prAimo comando que outro perform que eAecuta um pargrafo c@amado e?ibe-tela. f o tipo de perform mais simples. perform varJing contador from 1 bJ 1 until contador Y 1<

displaJ KContador# K contador end;perform &ste um perform in-line, ou seja, todo o processo ser feito sem a eAecuo de um pargrafo, alm de incrementar o valor de contador, que uma varivel da rea de 5or@ing-#torage a partir de 1 em 1 at que =until> o seu valor seja maior do que 1<. %urante esta eAecuo sero feitos diversos displays eAibindo o valor da varivel, encontrando End-9erform indicar o fim dos comandos a serem eAecutados neste lao. Variveis <1 %ata+istema. 1< )no+istema pic I=<<4> value "eros. 1< -es+istema pic I=<<2> value "eros. 1< %ia+istema pic I=<<2> value "eros. &sta declarao ir criar uma varivel numrica c@amado %ata+istema de 9 =oito> posi!es, mas para tornar a manipulao dos dados, mais fcil, ns a subdividimos em trRs variveis distintas, desta forma podemos acessar facilmente diferentes posi!es da varivel. &sta facilidade denominada de Mrupo, um grupo de itens =variveis> pode conter subgrupos. &stes grupos possuem nFmeros de nveis que identificam seu nvel dentro do grupo. &stes nveis variam de 1 a 4I, quanto menor o nFmero maior o seu nvel, por eAemplo# <1 &ndereco. 1< TeAto pic A=<3<>. 1< 'umero pic I=<<6>. $sto cria uma varivel c@amada Endere%o que aloca 36 bJtes de memria composta por duas referRncias, "e?to que acessa os primeiros trinta bJtes de Endere%o que iro possuir um conteFdo alfanumrico =A> e 0umero com seis bJtes numricos. &Aistem ainda os nveis especiais 66, 77, 79 e 99. nvel 66 utili"ado para renomear outras variveis do programa, este nvel utili"ado da seguinte forma# $sto Ftil quando queremos por eAemplo utili"ar apenas o mRs e o dia de uma data# <1 %ata+istema.

1< )no+istema pic I=<<4> value "eros. 1< -es+istema pic I=<<2> value "eros. 1< %ia+istema pic I=<<2> value "eros. 66 -es%ia+istema renames -es+istema t@ru %ia+istema. %esta forma acessando a varivel ;es,ia#istema estaremos enAergando o conteFdo das variveis ;es#istema e ,ia#istema. nvel 77 utili"ado para declarar variveis que no iro possuir sub;itens, este nvel utili"ado da mesma forma que o nvel <1. nvel 79 utili"ado para declarar constantes, ou seja, so referRncias que no podem ter o seu conteFdo alterado no programa. +ua estrutura # 'esta declarao informado o nome da constante e seu valor. iteral-5 representa uma string a ser associada. 0E>" indica que esta varivel ter a posio de offset referente ao segundo bJte da declarao anterior, por eAemplo# <1 A1 pic A=1<>. <1 A2 redefines A1 pic A. 79 neAt;offset value neAt. <1 A3 pic AA. 'este eAemplo, a constante neAt;offset ter em sua representao a referRncia do segundo bJte da varivel A1. #"A2" *F data-name-1 indica que a constante ter a posio de offset da varivel informada em data-name-1. E03"/ *F data-name-2 indica que a constante ter o taman@o alocado pela varivel informada em data;name;2. nvel 99 utili"ado para representa!es de VE2,A,EI2* e FA #*, sua sintaAe#

&ste nvel utili"ado em itens de grupo, por eAemplo# <1 (orma.agamento pic I=<<1> value "eros. 99 Cartao value 1. 99 %in@eiro value 2. 99 C@eque value 3. 'a situao inicial desta declarao 8art&o, ,in-eiro e 8-eque estaro valendo FA #E, devido ao $alue Aeros de Forma9agamento, quando queremos que o programa identifique qual a opo desejada pelo cliente basta mover 1 =por eAemplo> para (orma.agamento, isto far com que 8art&o fique igual a "2!E e ,in-eiro e 8-eque fiquem igual a FA #E e no momento em que Forma9agamento for modificado para 3 a varivel 8-eque se tornar "2!E e 8art&o e ,in-eiro ficaro com FA #E. .ode;se utili"ar tambm um comando do compilador c@amado #E", por eAemplo# #E" 8A2"B* "* "2!E. "/2! indica que cada nvel pode abranger uma faiAa de valores para se tornar verdadeiro. .or eAemplo# <1 (orma.agamento pic I=<<1> value "eros. 99 Cartao value 1 t@ru 2. 99 %in@eiro value 3 t@ru 4. 99 C@eque value 5 t@ru 6. 5/E0 #E" "* FA #E literal-= indica um valor opcional de falso para a condio. 'a maioria dos casos este termo no utili"ado, sempre termos um dos itens selecionados ou Forma9agamentosetado para "ero. ) palavra reservada 9I8 C9I8"!2ED identifica o tipo e o taman@o da varivel. &Aistem 6 classes de variveis# )lfabtica, 'umrica, )lfanumrica e .onto flutuante# Alfabtica ,epresentado pelo caractere T)V, indica que esta varivel suportar apenas caracteres alfabticos ou espao. .or eAemplo# <1 nome .$C )=<1<> value spaces. .ode;se formatar a varivel com o caractere T:V, desta forma podemos formatar uma string# <1 nome .$C )=<<5>:)=<<4> value spaces.

+e movermos TtestenomeV para a varivel nome ela arma"enar Tteste nomeV. Numrica ,epresentado pelo caractere TIV, indica que esta varivel suportar apenas caracteres de < a I. )s variveis numricas suportam no mAimo 19 dgitos incluindo as casas decimais. .or eAemplo# 77 numero .$C I=<<6> value "eros. .odemos utili"ar alguns mecanismos de formatao das variveis para apresentao ou arma"enamento, so eles# T.V utili"ado para economi"ar espao em memria para o arma"enamento de nFmeros onde cada T.V representa um EE2*, por eAemplo# 77 numero .$C I=<<3>... value "eros. &sta varivel ser capa" de arma"enar at III<<<, utili"ando apenas trRs bJtes da memria. Caso o programador coloque este T.V na frente da representao =.$C ...I=<<3>> far com que o compilador interprete os trRs primeiros caracteres como "eros. &ste tipo de varivel para uso interno da aplicao. T+V utili"ado para informar ao compilador que a varivel numrica poder arma"enar um sinal de positi$o ou negati$o. &ste sinal no ir consumir espao em memria. 77 numero .$C +I=<<6> value "eros. %esta forma a varivel poder arma"enar a faiAa de valores compreendentes entre d IIIIII e cIIIIII. .ode;se utili"ar tambm os sinais T;T, TcV, TC,V e T%:V =&stes dois Fltimos apresentaro dois espaos caso o valor seja positivo e o teAto informado no caso de valores negativos> isto no ir restringir a varivel a ter eAclusivamente valores negativos ou positivos, seu comportamento ser o mesmo do T+V. T*V utili"ado para indicar onde se encontrar o ponto decimal da varivel. )ssim como o T+V ele no ir consumir espao em memria. 77 numero .$C +I=<<4>*II value "eros. Com esta declarao estaremos consumindo 6 bJtes de memria com a possibilidade de guardar se este nFmero negativo ou positivo de quatro posi!es e com duas casas decimais. .or eAemplo# ;1234.56. T^V utili"ado para formatar uma apresentao ao usurio, para cada T^V S esquerda da varivel indica que gostaramos de ignorar a apresentao dos "eros e eAibir espaos em seu lugar. .or eAemplo# 77 numero .$C +^,^^I.II value "eros.

$sto ir criar uma varivel numrica onde os "eros S esquerda sero substitudos em uma apresentao em tela. utros caracteres vlidos na representao numrica so T,V e T.V como visto anteriormente. ) TCV utili"ada para formao de campos de data, por eAemplo# 77 data;nasc .$C IICIICIIII value "eros. -as isto no quer di"er que esta varivel ser tratada como uma data visto que compilador no possui uma varivel especfica para isto. /m < ="ero> indica uma separao, assim como vimos com o caractere T:V nos alfabticos. Alfanumrica ,epresentado pelo caractere TeV, indica que esta varivel suportar todos os caracteres da tabela )+C$$. .or eAemplo# <1 nome .$C e=<1<> value spaces. $sto ir criar uma varivel com 1< caracteres alfanumricos, ou seja, qualquer caractere da tabela )+C$$ poder ser utili"ada nesta varivel. Ocorrncias &m conjunto com estas defini!es pode;se utili"ar a declarao de uma "abela de *corrFncias =con@ecida tambm como Vetor ou Array>, esta tabela simplifica a necessidade do programa ter que arma"enar vrias informa!es relacionadas, por eAemplo, vamos imaginar que o programa ten@a a necessidade de arma"enar quais so os dias Fteis do mRs para determinar provveis datas de pagamento, este programa pode possuir uma tabela com 31 ocorrRncias de campos numricos de 1 bJte que possuram < e 1 para identificar se aquele dia Ftil ou no. *eja o eAemplo# identification division. program;id. tabela. B data division. GorHing;storage section. 77 indeAtab pic I=<<2> value "eros. 77 tabmes pic I=<<1> value "eros

occurs 31 times. <1 datasistema. 1< anosistema pic I=<<4>. 1< messistema pic I=<<2>. 1< diasistema pic I=<<2>. 77 inteirodata pic I=<<9> value "eros. 77 diasmes pic I=<<2> value "eros. 77 diasemana pic I=<<1> value "eros. 77 anobisseAto pic I=<<4>vII value "eros. 77 anobissprova pic I=<<4> value "eros. B procedure division. inicio. BY identifica o mes accept datasistema from date JJJJmmdd BY $dentifica quantos dias eAiste no mes evaluate messistema G@en 1 move 31 to diasmes G@en 2 move 29 to diasmes move "eros to anobisseAto divide anosistema bJ 4 giving anobisseAto move anobisseAto to anobissprova subtract anobissprova from anobisseAto

if anobisseAto equal "eros move 2I to diasmes end;if G@en 3 move 31 to diasmes G@en 4 move 3< to diasmes G@en 5 move 31 to diasmes G@en 6 move 3< to diasmes G@en 7 move 31 to diasmes G@en 9 move 31 to diasmes G@en I move 3< to diasmes G@en 1< move 31 to diasmes G@en 11 move 3< to diasmes G@en 12 move 31 to diasmes end;evaluate BY Daco para cada dia do mes

perform varJing indeAtab from 1 bJ 1 until indeAtab Y diasmes BY %ia a ser analisado move indeAtab to diasistema BY ) funcao nao aceita um item de grupo move datasistema to inteirodata BY $dentifica o dia da semana BY 1 [ +egunda;feira BY 2 [ Terca;feira BY 3 [ Luarta;feira BY 4 [ Luinta;feira BY 5 [ +eAta;feira BY 6 [ +abado BY 7 [ %omingo move function rem=function integer;of;date=inteirodata>, 7> to diasemana if diasemana Y[ 1 and diasemana \[ 5 BY & um dia util move 1 to tabmes=indeAtab> end;if end;perform stop run . &Aerccios#

1W ; (aa um programa =&Aerc3.cbl> que aceite um nFmero e incremente;o de 2 em 2 eAibindo os resultados na tela at que este nFmero seja maior do que 5<. .ara este lao no utili"e pargrafos. 2W ; ,epita o eAerccio anterior =&Aerc4.cbl> utili"ando pargrafos.

Exibindo e aceitando informa.es do usu$rio


g vimos os comandos %$+.D)P e )CC&.T, que so utili"ados para intereo com o usurio. :em, eAiste uma seo da ,ata ,i$ision c@amada #creen #ection. 'esta seo so especificadas Ss propriedades de telas a serem utili"adas pelo programa para interagir com o usurio. ) seguir vemos um eAemplo# identification division. program;id. Tela. B data division. GorHing;storage section. 77 GrH;opcao pic A=<<1> value spaces. screen section. <1 tela;principal. <2 blanH screen. <2 line 1 col 1 value K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;K. <2 line 2 col 21 value K-anutencao de Clientes ; -enu .rincipa ; KlK. <2 line 3 col 1 value K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;K. <2 line 11 col 34 value K1 ; $nclusaoK. <2 line 12 col 34 value K2 ; )lteracaoK.

<2 line 13 col 34 value K3 ; ConsultarK. <2 line 14 col 34 value K4 ; &AcluirK. <2 line 15 col 34 value K5 ; +airK. <2 line 17 col 34 value K pcao# = >K. <2 opcao line 17 col 42 pic A using GrH;opcao auto. B procedure division. inicio. displaJ tela;principal accept tela;principal ... ... &ste programa ir resultar na seguinte apresentao# ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -anutencao de Clientes ; -enu .rincipal ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1 ; $nclusao 2 ; )lteracao 3 ; Consultar 4 ; &Acluir 5 ; +air pcao# =h> 'ote que alm de eAibir a tela o programa fe" um A88E9". +e verificarmos o cdigo fonte eAiste a seguinte lin@a# <2 opcao line 17 col 42 pic A using GrH;opcao auto.

$sto far com que o programa transfira o que for digitado em opcao para Gr@-opcao, desta forma o programa poder identificar o que foi digitado pelo usurio. ) descri%&o de uma tela na +creen +ection possui a mesma estrutura de um item de grupo, onde se especifica lin@a a lin@a o que vai ser eAibido e o que vai ser solicitado ao usurio. ) +creen +ection um recurso opcional para montagem de telas, o programa pode tranqiilamente montar suas apresenta!es de telas utili"ando comandos de A88E9" e ,I#9 A< logo a utili"ao ou no desta seo fica ao critrio do programador. /ma coisa que o programador deve se atentar que esta estrutura de tela estar consumindo memria. ) seguir, vemos a estrutura completa dos itens de uma +creen +ection# /m ponto interessante a ser comentado a utili"ao de cores atravs das clusulas F*2E32*!0,-8* *2 e )A8H32*!0,-8* *2, atravs destas clusulas o programa pode especificar quais cores deseja utili"ar, seguindo a tabela a seguir# 8Idigo 8or 1. 2. 3. 4. 5. 6. 7. 9. .reto )"ul *erde Ciano *ermel@o -agenta -arrom ou amarelo :ranco

)dicionando;se a clusula N$MND$MNT a estas cores temos uma combinao de 15 possveis cores, por eAemplo, o marrom vira amarelo. 0o-ec-o uma clusula para campos de sen@as, onde o que esta sendo digitado no pode ser visto na tela. :oa parte destas clusulas da #creen #ection pode ser utili"ada em conjunto com o comando ,I#9 A< e A88E9". &Aerccios#

1W ; (aa um programa =&Aerc5.cbl> similar ao utili"ado no eAemplo.

Comunicao entre pro/ramas


+o % interessante para um pro/ramador ter todas as rotinas em um Dnico pro/ramaE o primeiro bom moti o para que ele no faa isso % a manutenoE ima/ine um par$/rafo que faa um determinado c$lculo o qual foi duplicado em 2'' pro/ramas 7FCB(9F A/ora ima/ine o transtorno no caso de uma pequena alterao deste par$/rafo e a possibilidade de al/um pro/rama ser esquecidoG Existe uma soluo paliati a para este casoE o comando COP E em sua forma mais simplesE temosH C,"> testeF ,nde teste % o nome de um arqui o teste!c"# no diret8rio corrente ou em al/um diret8rio que esteIa informado em um set de ambiente cCamado CO$CP 7pertencente ao ambiente 6erant9F "ode informar tamb%m este um nome de arqui o entre aspasE podendo5se adicionar o caminCo inteiro do arqui oF 6as mesmo utili2ando o COP ainda persiste um problemaE as ari$ eis que este par$/rafo utili2a no c$lculoE elas tamb%m de em ser replicadas em todos os pro/ramasE o COP resol eria isto com a mesma facilidadeE mas existe um problema mais s%rio aindaE a alocao de mem8ria inde idaE sem contar o peri/o do esquecimento da atuali2ao de al/uma ari$ el en ol ida no c$lculo e o alor anterior afetar o resultadoF )istos todos estes problemas % muito mais pr$tico o uso de sub% "ro&ramasE desta forma centrali2amos as rotinas comuns a mais de um pro/rama e facilitamos a manuteno de determinados processosF , comando utili2ado para cCamar sub5pro/ramas % o CALLE este comando transfere o fluxo de execuo para outro pro/rama e a/uarda o seu retorno para dar continuidade nos comandos ap8s a sua utili2aoF "or exemploH FFF
call TC@amadoV using 'ome cancel TC@amadoV ...

Este bloco de comando ir$ executar um pro/rama C'amado passando como par?metro uma ari$ el do pro/ramaE cCamada NomeE este pro/rama C'amado ir$ possuir uma seo em sua (ata (ivision cCamada Lin)a&e SectionF Esta seo possuir$ a declarao de uma ari$ el para receber o conteDdo existente em Nome no momento da cCamadaF Esta ari$ el de Lin)a&e no precisa ter o mesmo nome da ari$ el passada para o pro/ramaE apenas o mesmo tipo e tamanCo para que receba o alor corretamenteF Este seria um pro/rama C'amadoH
identification division. program;id. C@amado. aut@or. %T+ Datin )merica +oftGare. B data division. linHage section. 77 'ome pic A=<4<> value "eros. B procedure division using 'ome. inicio. displaJ 'ome eAit program . 'ote que a .rocedure %ivision recebeu um /+$'M ' -&. $sto far com que o seu programa ten@a acesso aos dados enviados pelo programa 8-amador, podemos atuali"ar estes dados fa"endo com que o programa 8-amador ten@a consiga ver os dados alterados. 'ote tambm que este programa utili"ou um E>I" 92*32A; ao invs de um #"*9 2!0, este comando deve ser utili"ado por programas que iro retornar o fluAo de eAecuo para algum 8-amador. 'este caso vemos outra grande importQncia do 92*32A;-I,, pois, para que possamos retirar um programa da memria e liberar todo o espao que estava alocado precisamos fa"er um 8A08E program-name, este nome de programa referRncia;se ao 92*32A;I, do programa a ser cancelado e retirado da memria.

&Aerccios# 1W ; ,epita os procedimentos do &Aerc3.cbl em um &Aerc4.cbl empregando os novos comandos vistos. = programa c@amado dever se c@amar &Aerc5.cbl>.

*ratamento e arma+enamento de informa,es


, principal fundamento de um pro/rama % a capacidade de saber tratar e arma2enar informa.es de idamente alidadas e consistentesF Existem quatro tipos de estruturas de arma2enamentos de dados que o Cobol utili2a de forma nati aH 3equentialE (ine 3equentialE 4elati e e IndexedF 1odas estas estruturas esto diretamente relacionadas a arqui os arma2enados em discos locais ou na redeF De forma nati a tamb%m o compilador possui controles pr8prios para tratamento em redeF 1odo arqui o % composto por re/istros e cada re/istro % composto por camposF Estes re/istros possuem a mesma estrutura de um -ru"o da $rea de .or)in&E onde cada re/istro % composto por $rios campos de diferentes tiposF

3equential
A expresso seq=encial si/nifica que os re/istros sero arma2enados um ap8s o outroE ou seIaE assim que termina um re/istro outro ter$ inJcioF "or exemploH
%efinio do registro# <1 ,egistro;Clientes. 1< Clientes;'ome pic A=<1<>. 1< Clientes;Telefone pic A=<3<>. (orma de arma"enamento de dos registros# ,egistro 1 ,egistro 2 ....0....1....0....2....0....3....0....4....0....5....0....6....0....7....0... (abio <55 <11 3<44;5<32 Deandro <55 <11 3<44;5<32 f desta forma que o compilador ir arma"enar os registros na estrutura de arquivo denominada seqiencial. 'ote que ao somarmos o total de bJtes do registro obtemos 4<, logo, a cada 4< bJtes temos o incio de um novo registro. arquivo no possui nen@um caractere especial de terminao. Line Se/uential

A expressoE linCa seq=encialE si/nifica que os re/istros sero arma2enados em linCasE ou seIaE ao t%rmino do re/istro existiro caracteres de controle que indicam a finali2ao dos dadosF +o caso dos ambientes "CF Este formato de arqui o cont%m uma seq=-ncia xK'D'AK 7Carria/e return L (ine feed M E+1E49E esta seq=-ncia de caracteres far$ com que o pr8ximo re/istro seIa /ra ado na linCa se/uinteE outro diferencial deste arqui o % que a seq=-ncia xK'D'AK em lo/o depois do Dltimo bNte diferente de espaoE isto si/nifica que se o re/istro possui #' caracteres e o pro/rama /ra a somente & bNte ento a linCa ter$ o tamanCo de & bNteE isto afeta si/nificamente no tamanCo do arqui oF , formato de arqui o denominado Line Se/uential % similar ao que costumeiramente cCamamos de arqui o texto 71O19F ,s caracteres de finali2ao ariam conforme o sistema operacionalF Em ambientes baseados em <nixE por exemploE os caracteres de finali2ao xK'D'AK so substituJdos por um simples xK'AKF "or exemploH
%efinio do registro# <1 ,egistro;Clientes. 1< Clientes;'ome pic A=<1<>. 1< Clientes;Telefone pic A=<3<>. (orma de arma"enamento de dois registros# ....0....1....0....2....0....3....0....4 (abio <55 <11 3<44;5<32AV<%<)V Deandro <55 <11 3<44;5<32AV<%<)V 'ote que apesar do registro possuir 4< bJtes ='ome A=1<> c Telefone A=3<>> a sequRncia AV<%<)V foi adicionada logo aps o Fltimo caractere do registro.

4elati e
) eApresso relativo significa que os registros sero arma"enados em lin@as e sua c@ave ser a posio relativa em que ele se encontra dentro deste arquivo, ou seja, assim como um line sequential cada registro estar em uma lin@a com a diferena de que cada registro preenc@e toda a lin@a, mesmo que o campo com 5< bJtes esteja sendo gravado com um Fnico bJte o compilador ir preenc@er o restante da lin@a com espaos at completar os 5< bJtes, em seguida os caracteres de finali"ao AV<%<)V =Dembrando que em outros ambientes operacionais estes caracteres podem mudar>. %esta forma, temos um registro de taman@o fiAo e quando di"emos que queremos acessar o registro relativo 1<, basta o compilador multiplicar o taman@o do registro por 1< e acessar a posio offset referente ao mesmo.

0nde1ed f muito importante que um programa possibilite ao usurio um acesso rpido aos registros desejados, para tanto eAiste um recurso no apenas no Cobol, mas em muitas outras linguagens e bancos de dados, c@amado 8-a$e. /ma c@ave um campo do registro que foi eleito como um meio de acesso direto a um determinado registro ou um conjunto de campos, esta Fltima definio con@ecida com split-@ey ou c@ave;dividida. &sta c@ave normalmente possui um conteFdo numrico, mas, pode possuir outros valores. &Aiste tambm a possibilidade de se fa"er uma pesquisa rpida por campos que no sejam a c@ave primria, estes so c@amados de 8-a$es Alternadas, estas c@aves podem, opcionalmente, possuir valores repetidos, por eAemplo, um nome. &ste o tipo de arquivo do compilador Cobol de maior utili"ao, devido aos seus recursos de pesquisa eAtremamente rpidos. /m arquivo indeAado composto por dois arquivos# arquivo de dados e o arquivo de ndice. &ste arquivo auAiliar de ndice possui mecanismos para encontrar os registros rapidamente atravs de uma referRncia do valor da c-a$e com sua posio dentro do arquivo. &sta c-a$e pode possuir duas caractersticas# 2E8*2, HE< e A "E20A"E HE<, onde a 2E8*2, HE< referenciada a um campo do registro o qual ir possuir valores que nunca se repetiro, j a c@ave A "E20A"E HE< possui esta mesma caracterstica mas possui artifcios para permitir a duplicao de valores. .odemos pesquisar pelas duas c@aves, mas uma de cada ve". *eja o seguinte eAemplo# identification division. program;id. )ccess(ile. aut@or. %T+ Datin )merica +oftGare. B environment division. configuration section. input;output section. file;control. select clientes assign to Kclientes.datK organi"ation is indeAed access mode is dJnamic record HeJ is clientes;codigo alternate HeJ is clientes;nome Git@ duplicates

file status is fs;clientes. B data division. file section. fd clientes. <1 reg;clientes. 1< clientes;codigo pic I=<<6>. 1< clientes;nome pic A=<5<>. 1< clientes;data;nasc. 2< clientes;data;nasc;ano pic I=<<4>. 2< clientes;data;nasc;mes pic I=<<2>. 2< clientes;data;nasc;dia pic I=<<2>. 1< clientes;telefone pic A=<3<>. 1< clientes;endereco pic A=<5<>. 1< clientes;bairro pic A=<3<>. 1< clientes;cidade pic A=<3<>. 1< clientes;estado pic A=<<2>. 1< clientes;cep pic I=<<9>. 1< clientes;e;mail pic A=<5<>. B GorHing;storage section. <1 fs;clientes. 1< fs;clientes;1 pic A=<<1>. 1< fs;clientes;2 pic A=<<1>. 1< fs;clientes;r redefines fs;clientes;2 pic II comp;A.

B ... ... 'ote que neste trec@o de cdigo vemos a E0VI2*0;E0" ,IVI#I*0, esta diviso foi comentada anteriormente e vamos disseca;la. &sta diviso possui a seguinte estrutura# &'*$, '-&'T %$*$+$ '. C '($M/,)T$ ' +&CT$ '. + /,C&;C -./T&,. :g&CT;C -./T&,. +.&C$)D;')-&+. $'./T; /T./T +&CT$ '. ($D&;C 'T, D. $; C 'T, D. &sta diviso composta de duas se!es# Confi&uration Section &sta seo destina;se a configurao do ambiente, ela composta por trRs partes# #*!28E-8*;9!"E26 *)JE8"-8*;9!"E2 e #9E8IA -0A;E#. /ma identifica o computador onde foi confeccionado o programa e a segunda identifica o computador do ambiente de produo, ambas servem apenas para comentrios @aja visto que ambas deiAaram de ser obrigatrias mas caso o programador opte em utili"a;las deve escrever sua sintaAe corretamente para no causar erros de compilao. #9E8IA -0A;E# especfica o sinal monetrio, escol@e o tipo de ponto decimal, especfica caracteres simblicos e possibilitar adaptar o programa para se comunicar com programas de outras linguagens. 0n"ut%Out"ut Section &sta seo destina;se a configurao do ambiente de eitura e 3ra$a%&o, ela possui duas partes# FI E-8*0"2* e I-*-8*0"2* . ) primeira destina;se a especificao dos arquivos que o programa ir acessar. ) segunda foi descontinuada nas vers!es mais atuais do compilador, valendo apenas para os ambientes de ;ainframe. B environment division.

configuration section. input;output section. file;control. select clientes assign to Kclientes.datK organi"ation is indeAed access mode is dJnamic record HeJ is clientes;codigo alternate HeJ is clientes;nome Git@ duplicates file status is fs;clientes. B 'este eAemplo, o programa no fa" referRncias as clusulas + /,C&;C -./T&,, :g&CT;C -./T&, e +.&C$)D;')-&+, as duas primeiras por no serem obrigatrias e a terceira pelo fato do programa no precisar, por eAemplo, identificar que as casas decimais sero identificadas por uma vrgula. Como ele ir tratar um arquivo, temos a seo I09!"-*!"9!" #E8"I*0, a referRncia desta seo opcional, podemos escrever diretamente a clusula FI E-8*0"2* . comando #E E8" utili"ado para declarar um arquivo no programa, todos os arquivos que o programa ir manipular devem possuir uma #E E8". ) clusula #E E8" ter a seguinte estrutura para arquivos seqKenciais# +&D&CT nome-arqui$o )++$M' T nome-e?terno ,M)'$^)T$ ' $+ +&L/&'T$)D )CC&++ - %& $+ +&L/&'T$)D ($D& +T)T/+ $+ fs-arqui$o. 0ome-arqui$o indica o nome que ser referenciado internamente pelo programa. 0omee?terno indica onde os dados sero gravados, ou seja, o nome do arquivo, caso no seja especificado o camin@o do arquivo ser considerado o diretrio corrente. .ode;se substituir este nome-e?terno por ,I#H e especificar o nome;eAterno na (% =ser visto mais S frente> e se mesmo assim o nome;eAterno no for informado o compilador ir criar no diretrio corrente de eAecuo um arquivo com o mesmo nome-arqui$o. *23A0IEA"I*0 I# #E1!E0"IA indica o tipo de organi"ao do arquivo. A88E## ;*,E I# #E1!E0"IA o tipo de acesso =sendo que este o Fnico tipo de acesso permitido para esta organi"ao>. FI E #"A"!# I# fs-arqui$o representa uma referRncia de um campo da 5or@ing-#torage section que ser atuali"ada a cada operao feita no

arquivo, indicando qual a situao atual do arquivo, desta forma que o programa pode fa"er testes para saber se pode ou no continuar a eAecuo sem problemas. ) clusula #E E8" ter a seguinte estrutura para arquivos de lin@as seqKenciais# +&D&CT nome-arqui$o )++$M' T nome-e?terno ,M)'$^)T$ ' $+ D$'& +&L/&'T$)D )CC&++ - %& $+ +&L/&'T$)D ($D& +T)T/+ $+ fs-arqui$o. 'ote que a Fnica mudana na organi"ao do arquivo I0E #E1!E0"IA . Todas as outras informa!es so idRnticas ao #E1!E0"IA . ) clusula #E E8" ter a seguinte estrutura para arquivos randjmicos# +&D&CT nome-arqui$o )++$M' T nome-e?terno ,M)'$^)T$ ' $+ ,&D)T$*& )CC&++ - %& $+ ,)'% -C+&L/&'T$)DC%P')-$C a,&D)T$*& k&P $+ c@ave;randomicab ($D& +T)T/+ $+ fs-arqui$o. 'esta #E E8" temos uma modificao na organi"ao que agora 2E A"IVE e temos a possibilidade escol@er entre trRs tipos de acesso# 2AN(O3 4Aleat5rio6 programa pode via c-a$e-randLmica ir para qualquer registro, informando apenas o nFmero do registro que se deseja acessar. S7897N*0AL 4Se/:encial6 programa ir acessar este arquivo apenas para leituras seqiRncias, ou seja, ir avanar a leitura registro a registro at o fim de todos os registros que esto no arquivo. ( NA30C 4(in;mico6 programa pode fa"er acessos do tipo 2A0,*; e tambm do tipo #E1!E0"IA , ou seja, o programa pode alternar o tipo de acesso no momento que for oportuno. ) clusula #E E8" ter a seguinte estrutura para arquivos indeAados# +&D&CT nome-arqui$o )++$M' T nome-e?terno ,M)'$^)T$ ' $+ $'%&e&%

)CC&++ - %& $+ ,)'% -C+&L/&'T$)DC%P')-$C ,&C ,% k&P $+ nome;campoCc@ave;separada )DT&,')T& k&P $+ nome;campoCc@ave;separada aO$TN %/.D$C)T&+b ($D& +T)T/+ $+ fs-arqui$o. 'esta organi"ao indeAada temos duas novas clusulas 2E8*2, HE< e A "E20A"E HE<, elas referenciam;se aos campos do registros pelo qual ser criado o ndice, opcionalmente a A "E20A"E HE< pode possuir valores duplicados, ou seja, mais de um registro onde o campo referenciado como uma c@ave alternada ter um valor repetido. &Aerccios# 1. %efinio de um arquivo indeAado com a seguinte estrutura =&Aerc6.cbl># Clientes Codigo numrico de seis posi!es =C@ave> 'ome alfanumrico de 5< posi!es =C@ave alternada com duplica!es> %ata de nascimento numrico de 9 posi!es Telefone alfanumrico de 3< posi!es &ndereco alfanumrico de 5< posi!es 'umero numrico de seis posi!es Complemento alfanumrico de 3< posi!es :airro alfanumrico de 3< posi!es Cidade alfanumrico de 3< posi!es Cep numrico de 9 posi!es &stado alfanumrico de 2 posi!es &;mail alfanumrico de 5< posi!es Crie parte de um programa com todas as defini!es necessrias para este arquivo, utili"ando a $%&'T$($C)T$ ', &'*$, '-&'T e %)T) %$*$+$ '. &ste programa se c@amar ).D$C.C:D.

3ani"ulando as informa,es
)t agora foram vistas todas as divis!es do programa, suas principais se!es, seus tipos de arquivos nativos, seus tipos de variveis e alguns comandos de 92*8E,!2E, agora iremos ver os comandos utili"ados para tratar os arquivos e os dados contidos neles. )ntes de tratar qualquer dado dos registros de um arquivo precisamos abri-lo e ento comear a manipular os registros. comando para abrir um arquivo o *9E0 e sua estrutura # (ormato 1 =.ara arquivos seqiRncias somente> (ormato 2 =.ara todos os arquivos>

comando *9E0 ir disponibili"ar um canal com o arquivo para que o programa faa as opera!es necessrias. I09!" indica que o programa poder apenas fa"er leituras no arquivo no podendo fa"er nen@uma gravao, para tanto o arquivo dever ter sido criado anteriormente. *!"9!" indica que o programa poder apenas gravar no arquivo, no podendo fa"er leituras, o arquivo no poder eAistir, caso eAista ele ser sobreposto por um arquivo va"io. I-* possibilitar ao programa fa"er as opera!es de leituraCgravao, este o tipo de acesso mais utili"ado. E>"E0, tem a mesma funcionalidade de *!"9!" com o diferencial de no sobrepor o arquivo os registros eAistentes, mas complementando;o, ou seja, quando o arquivo for aberto o ponteiro de registros ser posicionado logo aps o Fltimo registro eAistente e adicionar ao arquivo os registros gravados. 2EVE2#E, far com que os registros sero acessados do Fltimo para o primeiro. 5I"/ *8H destina;se ao tratamento do arquivo em rede, isto ser visto mais S frente. %epois de abrir o arquivo, ns podemos introdu"ir novas informa!es, atuali"ar informa!es eAistentes, apagar informa!es e ainda consultar os dados eAistentes. .ara cada uma dessas a!es eAistem comandos especficos, conforme vistos a seguir# -ravando novas informa,es comando utili"ado para gravar novos registros em um arquivo o 52I"E este comando insere um novo registro no arquivo baseado nas informa!es contidas no registro informado. &ste comando utili"ado da seguinte forma# O,$T& registro;arquivo

registro-arqui$o referRncia;se ao item de grupo informado como sendo o registro do arquivo especificado na #E E8" do programa. 'o caso de arquivos com estrutura #E1!E0"IA , I0E #E1!E0"IA e ,&D)T$*& o comando ir gravar o registro e caso alguma coisa de errado acontea ento ser retornada um FI E #"A"!# diferente de "eros. f sempre muito importante verificar o status do arquivo afim de constatar se est tudo bem. 'o caso do I0,E>E, alm de uma verificao idRntica S anterior ser constatado se no eAistem uma situao de c-a$e duplicada, esta situao ir acontecer caso o programa tente gravar um registro onde o valor do campo definido como 2E8*2, HE< seja idRntico ao de um registro j gravado no arquivo. &sta mesma situao pode ocorrer para campo que ten@am sido definidos como c@aves do tipo A "E20A"E HE< com um diferencial, caso o programador deseje pode eAistir uma c@ave duplicada, basta que a A "E20A"E HE< deste campo ten@a a clusula 5I"/ ,!9 I8A"E#, desta forma obteremos um FI E #"A"!# que indicar que o registro foi gravado com sucesso com uma de suas c@aves alternadas duplicadas. 2e&ravando novas informa,es +empre eAistir a necessidade de um programa atualiAar os registros de um arquivo, esta atuali"ao feita com o seguinte comando# ,&O,$T& registro;arquivo )ntes de se utili"ar estes comandos deveremos carregar este registro para nossa rea de F,, ou seja, no caso de arquivos indeAados devemos ler o registro que dever ser atuali"ado, fa"er as modifica!es necessrias e ento regrav;los. $sto deve ser feito para se evitar a perda de informa!es, por eAemplo# ,egistro original# C % ' -& &+T)% <<<<<1():$ (&,,&$,) C +T) +. +ituao da rea de F, aps o *9E0# C % ' -& &+T)% $magine que este o registro que est atualmente gravado em disco e o programa dever alterar o nome que est arma"enado, pois bem, ao abrirmos o arquivo o nosso registro possivelmente valer espaos, o programa j sabe o cdigo do registro a ser alterado e sabe que o nome deve ser alterado para ():$ C +T) mas no sabe qual o valor de estado, logo o registro deve ser lido para que todas estas informa!es estejam na rea de F,, assim o programa pode alterar o nome e regravar o registro sem nen@um perigo de perder alguma informao previamente gravada. A"a&ando informa,es /m arquivo Ss ve"es necessita ser limpo, ou seja, registros que no interessam mais estarem no cadastro devem ser removidos, isto fa" parte da manuten%&o de cadastro e o comando a seguir eAecuta esta operao#

%&D&T& arquivo comando ,E E"E ir remover o registro que est atualmente apontado pelo ponteiro de registros, ou seja, devemos primeiro fa"er uma leitura do registro assim como necessrio para o comando 2E52I"E. 'o caso de arquivos indeAados podemos simplesmente mover o valor da c@ave a ser removida e eAecutar o comando. Caso o registro informado no seja encontrado, ser devolvido um FI E #"A"!# indicando que no foi possvel encontrar o registro. Consultando informa,es .ara termos acesso aos registros contidos nos arquivos devemos ler estes registros, para tanto utili"amos o seguinte comando# ,&)% arquivo a'&eTC.,&*$ /+b comando 2EA, ir carregar o registro para a rea de F, definida da FI E #E8"I*0. .ara todas as estruturas de arquivos podemos eAecutar um 2EA, arqui$o 0E>" fa"endo uma leitura do prAimo registro, somente para arquivos relativos e indeAados, podemos fa"er um 2EA, arqui$o 92EVI*!# que permitir o acesso do registro anterior ao atual. .ara arquivos indeAados podemos mover o valor para sua c@ave e efetuar um simples 2EA, arquivo, isto ir posicionar o ponteiro de registros. &Aistem situa!es em que precisamos saltar alguns registros para processarmos um lote especfico de registros, por eAemplo, o programa deve processar todos os registros em que o estado seja igual a T+.V. .ara esta tarefa utili"amos o comando #"A2", sua sintaAe # (ormato 1 =)rquivos relativos># .ara os arquivos de estrutura 2E A"IVE o data-name-1 indica a posio relativa do registro a ser encontrado. 'ote que o #"A2" aceita condi!es de pesquisa assim como o IF. (ormato 2 =)rquivos indeAados>#

.ara arquivos indeAados o dataname-1 ou a split@ey-name-1 representam as c@aves do arquivos especificados na #E E8" do programa. /ma observao importante sobre o comando #"A2" que ele sempre se utili"a de c@aves para posicionar os registros, no pode; se utili"ar campos que no sejam 2E8*2, HE< ou A "E20A"E HE<. eAemplo a seguir vemos um arquivo onde o campo estado foi definido na +&D&CT como uma c@ave alternada com duplica!es permitidas =caso contrrio no poderamos ter mais do que um registro por estado> e o objetivo do programa eAibir todos os registros onde estado seja igual a T+.V# identification division. program;id. DistaClientes. aut@or. %T+ Datin )merica +oftGare. B environment division. configuration section. input;output section. file;control. select clientes assign to Kclientes.datK organi"ation is indeAed

access mode is dJnamic record HeJ is clientes;codigo alternate HeJ is clientes;estado Git@ duplicates file status is fs;clientes. B data division. file section. fd clientes. <1 reg;clientes. 1< clientes;codigo pic I=<<6>. 1< clientes;nome pic A=<5<>. 1< clientes;data;nasc. 2< clientes;data;nasc;ano pic I=<<4>. 2< clientes;data;nasc;mes pic I=<<2>. 2< clientes;data;nasc;dia pic I=<<2>. 1< clientes;telefone pic A=<3<>. 1< clientes;endereco pic A=<5<>. 1< clientes;bairro pic A=<3<>. 1< clientes;cidade pic A=<3<>. 1< clientes;estado pic A=<<2>. 1< clientes;cep pic I=<<9>. 1< clientes;e;mail pic A=<5<>. B GorHing;storage section. <1 fs;clientes.

1< fs;clientes;1 pic A=<<1>. 1< fs;clientes;2 pic A=<<1>. 1< fs;clientes;r redefines fs;clientes;2 pic II comp;A. B procedure division. inicio. open input clientes move K+.K to clientes;estado start clientes HeJ is equal clientes;estado if fs;clientes equal "eros read clientes neAt perform until fs;clientes equal K1<K or clientes;estado unequal K+.K displaJ clientes;codigo K;K clientes;nome read clientes neAt end;perform end;if close clientes stop run . &m todos os comandos vistos para tratamento de registros dos arquivos de estrutura 2E A"IVE e I0,E>E, eAiste uma clusula opcional c@amada I0VA I, HE< comando. &sta clusula eAecutar o comando, sempre que eAistir um erro na c@ave do registro =duplicado ou no encontrado>. .ode;se eAecutar todos os comandos da linguagem eAceto os comandos condicionais IF e EVA !A"E. <ec'ando os ar/uivos %epois de terminar de tratar os registros dos arquivos necessrio fec@ar este arquivo. .ara tanto utili"amos o comando 8 *#E, conforme sintaAe a seguir#

Caso seja especificada a clusula 5I"/ *8H, o programa no poder reabrir este arquivo durante a sua eAecuo. &sta clusula 5I"/ *8H no tem nen@uma referRncia com tratamento de rede. &Aerccios# 1W ; Crie um pequeno sistema que faa o controle do registro do &Aerc6.cbl para que o mesmo faa o tratamento completo =$ncluso, )lterao, Consulta e &Acluso> do arquivo de clientes. Ordenando as informa,es &m certas situa!es eAiste a necessidade do programa listar as informa!es ordenadas por campos que no esto especificados como c@aves do arquivo, para que isto seja possvel eAiste um mecanismo c@amado #*2". #*2" um mtodo da linguagem onde podemos ordenar determinados campos em ordem ascendente ou descendente por qualquer campo ou grupo de campos. *amos pegar o arquivo anterior como eAemplo e supor que necessitssemos listar os registros ordenados pelo e;mail. *eja o eAemplo a seguir# identification division. program;id. DistaClientes. aut@or. %T+ Datin )merica +oftGare. B environment division. configuration section. input;output section. file;control. select clientes assign to KclientesK organi"ation is indeAed access mode is dJnamic record HeJ is clientes;codigo alternate HeJ is clientes;estado Git@ duplicates file status is fs;clientes.

select ord;clientes assign to Ksortcli.datK sort status is ss;clientes. B data division. file section. fd clientes. <1 reg;clientes. 1< clientes;codigo pic I=<<6>. 1< clientes;nome pic A=<5<>. 1< clientes;data;nasc. 2< clientes;data;nasc;ano pic I=<<4>. 2< clientes;data;nasc;mes pic I=<<2>. 2< clientes;data;nasc;dia pic I=<<2>. 1< clientes;telefone pic A=<3<>. 1< clientes;endereco pic A=<5<>. 1< clientes;bairro pic A=<3<>. 1< clientes;cidade pic A=<3<>. 1< clientes;estado pic A=<<2>. 1< clientes;cep pic I=<<9>. 1< clientes;e;mail pic A=<5<>. sd ord;clientes. <1 sort;reg;clientes. 1< sort;clientes;codigo pic I=<<6>. 1< sort;clientes;nome pic A=<5<>. 1< sort;clientes;e;mail pic A=<5<>.

B GorHing;storage section. <1 ss;clientes. 1< ss;clientes;1 pic A=<<1>. 1< ss;clientes;2 pic A=<<1>. 1< ss;clientes;r redefines ss;clientes;2 pic II comp;A. <1 fs;clientes. 1< fs;clientes;1 pic A=<<1>. 1< fs;clientes;2 pic A=<<1>. 1< fs;clientes;r redefines fs;clientes;2 pic II comp;A. B procedure division. inicio. sort ord;clientes ascending sort;clientes;e;mail input procedure sortin;clientes output procedure sortout;clientes stop run . B sortin;clientes. open input clientes read clientes neAt perform until fs;clientes equal K1<K move clientes;codigo to sort;clientes;codigo move clientes;nome to sort;clientes;nome

move clientes;e;mail to sort;clientes;e;mail release sort;reg;clientes read clientes neAt end;perform close clientes . B sortout;clientes. perform pega;reg;sort perform lista;clientes until ss;clientes equal K1<K . B lista;clientes. displaJ sort;clientes;codigo displaJ sort;clientes;nome displaJ sort;clientes;e;mail displaJ K;;;;;;;;;;;;;;;;;;;K perform pega;reg;sort . B pega;reg;sort. return ord;clientes at end move K1<K to ss;clientes . 0m"resso

) impresso dos dados pelo programa C : D tambm muito simples, basta o programa possuir uma referRncia de um arquivo de estrutura D$'& +&L/&'T$)D associado a um de$ice vlido para impresso. ) partir de ento utili"amos os mesmos comandos de tratamento de arquivo para tratar a impresso. f claro, o comando ,&)% no ter efeito sobre este tipo de arquivo. comando O,$T& provido de alguns mecanismos para a impresso das lin@as, conforme sintaAe vista a seguir# 'ote que nesta estrutura do 52I"E eAistem as clusulas )EF*2E e AF"E2 que indicam ao compilar como deve fa"er a impresso da nova lin@a. A" E0,*F-9A3E eAecutar um comando quando atingir o fim da pgina, por eAemplo um 9E2F*2; para imprimir um cabeal@o. ) seguir temos um eAemplo de impresso. identification division. program;id. $mpressao. aut@or. %T+ Datin )merica +oftGare. B environment division. configuration section. file;control. select clientes assign to Kclientes.datK organi"ation is indeAed access mode is dJnamic record HeJ is clientes;codigo alternate HeJ is clientes;estado Git@ duplicates

file status is fs;clientes. B select impressao assign to KD.T1K B YYY )s duas lin@as abaiAo tambem sao validas \\\ B select impressao assign to K+)$%).TeTK B select impressao assign to Kll&stacaol$mpressoraK organi"ation is line sequential access mode is sequential file status is fs;impressao. B data division. file section. fd clientes. <1 reg;clientes. 1< clientes;codigo pic I=<<6>. 1< clientes;nome pic A=<5<>. 1< clientes;data;nasc. 2< clientes;data;nasc;ano pic I=<<4>. 2< clientes;data;nasc;mes pic I=<<2>. 2< clientes;data;nasc;dia pic I=<<2>. 1< clientes;telefone pic A=<3<>. 1< clientes;endereco pic A=<5<>. 1< clientes;bairro pic A=<3<>. 1< clientes;cidade pic A=<3<>. 1< clientes;estado pic A=<<2>.

1< clientes;cep pic I=<<9>. 1< clientes;e;mail pic A=<5<>. fd impressao linage is 66 lines Git@ footing at 64 lines at top 2 lines at bottom 1. <1 reg;impressao. 1< impressao;filler pic A=<9<>. B GorHing;storage section. 77 .agina pic I=<<6> value "eros. <1 fs;clientes. 1< fs;clientes;1 pic A=<<1>. 1< fs;clientes;2 pic A=<<1>. 1< fs;clientes;r redefines fs;clientes;2 pic II comp;A. <1 fs;impressao. 1< fs;impressao;1 pic A=<<1>. 1< fs;impressao;2 pic A=<<1>. 1< fs;impressao;r redefines fs;impressao;2 pic II comp;A. <1 Din@a;cabecal@o. 1< filler pic A=<31> value spaces. 1< filler pic A=<17> value KDista de Client ; KesK. <1 Din@a;cabecal@o;labels. 1< filler pic A=<<6> value KCodigoK. 1< filler pic A=<<1>. 1< filler pic A=<5<> value K'omeK.

1< filler pic A=<<1>. 1< filler pic A=<1<> value K'asc.K. 1< filler pic A=<<1>. 1< filler pic A=<3<> value KTelefoneK. <1 Din@a;cabecal@o;lin@a. 1< filler pic A=<<6> value all K[K. 1< filler pic A=<<1>. 1< filler pic A=<5<> value all K[K. 1< filler pic A=<<1>. 1< filler pic A=<1<> value all K[K. 1< filler pic A=<<1>. 1< filler pic A=<3<> value all K[K. <1 Din@a;detal@e. 1< detal@e;codigo pic "=<<6>. 1< filler pic A=<<1>. 1< detal@e;nome pic A=<5<>. 1< filler pic A=<<1>. 1< detal@e;nasc. 2< detal@e;dia pic I=<<2>. 2< filler pic A=<<1> value KCK. 2< detal@e;mes pic I=<<2>. 2< filler pic A=<<1> value KCK. 2< detal@e;ano pic I=<<4>. 1< filler pic A=<<1>. 1< detal@e;telefone pic A=<3<>.

<1 Din@a;rodape. 1< filler pic A=<66> value spaces. 1< filler pic A=<<9> value K.agina# K. 1< rodape;pagina pic "=<<6> value "eros. B procedure division. inicio. open input clientes open output impressao read clientes neAt if fs;clientes equal "eros perform imprime;cabecal@o perform until fs;clientes equal K1<K move clientes;codigo to detal@e;codigo move clientes;nome to detal@e;nome move clientes;data;nasc;dia to detal@e;dia move clientes;data;nasc;mes to detal@e;mes move clientes;data;nasc;ano to detal@e;ano move clientes;telefone to detal@e;telefone perform imprime;lin@a read clientes neAt end;perform end;if close clientes impressao stop run

. B imprime;cabecal@o. Grite reg;impressao from Din@a;cabecal@o before advancing 3 line Grite reg;impressao from Din@a;cabecal@o;labels before advancing 1 line Grite reg;impressao from Din@a;cabecal@o;lin@a before advancing 1 line . B imprime;lin@a. Grite reg;impressao from Din@a;detal@e before advancing 1 line at end;of;page perform imprime;rodape perform imprime;cabecal@o . B imprime;rodape. add 1 to pagina move pagina to rodape;pagina Grite reg;impressao from spaces before advancing 1 line Grite reg;impressao from Din@a;rodape

before advancing page . &Aerccios# 1W ; Complemente o sistema anterior adicionando ao sistema uma opo para impresso da lista de clientes cadastrados. Ambientes multiusurio 42edes6 &m ambientes multiusurio a aplicao deve se preocupar com uma situao que no ocorre quando esta trabal@ando so"in@a com o arquivo# acessos simultMneos. &Aistem dois tipos de acessos simultQneos# )rquivos e ,egistros. &stes acessos devem ser controlados pelo programa de acordo com as a!es que da aplicao. .or eAemplo, quando a aplicao necessita alterar alguns dados de um determinado registro importante que o programa faa um *8H =bloqueio> do registro, garantindo assim que outros usurios no faam altera!es antes dele. bloqueio pode ser feito ao nvel de arquivo ou ao nvel de registro. &nquanto sua aplicao, esta com o arquivo ou registro bloqueado, no ser possvel que outros usurios da rede possam acessar aquela informao. s bloqueios podem ser feitos por mtodos automticos e manuais. s mtodos automticos garantem uma maior segurana as altera!es no registro, pois, no @ como ocorrer os riscos do programador esquecer de bloquear os registros com os quais ir trabal@ar. .ara que uma aplicao possa ser capa" de bloquear um registro, ela deve possuir a seguinte clusula na #E E8" do arquivo# Luando o tipo de loc@ ;A0!A , estamos informando que o programa ir fa"er o bloqueio e o desbloqueio, para tanto quando o programa for ler um registro, por eAemplo, pode;se adicionar a clusula 5I"/ CHE9"D *8H# read clientes Git@ Hept locH $sto ir bloquear o registro para que outros usurios no possam alterar este registro. .ara desbloquear o registro, utili"amos o /'D Ck# unlocH clientes records Caso o programa ten@a a clusula A!"*;A"I8 no ser necessrio a utili"ao do bloqueio no 2EA,, para cada leitura feita ser feito um bloqueio automtico e o registro anteriormente bloqueado ser desbloqueado, agora, se a aplicao necessitar bloquear mais do que um registro ento utili"a;se a clusula 5I"/ *8H *0 ;! "I9 E 2E8*2,#, j que o padro 5I"/ *8H *0 2E8*2,. E>8 !#IVE o padro, mas pode;se especifica;lo. 2* )A8H utili"ada junto com um produto da ;erant ;icro

Focus c@amado File#-are, que possibilita S aplicao desfa"er a gravao de registros se necessrio. &Aerccios# 1W ; )ltere o programa &Aerc6.cbl para que o mesmo faa o controle para ambientes multiusurio. *5"icos adicionais *ratamentos de dados alfanumricos &Aistem trRs comandos de grande utilidade para o tratamento de cadeias de caracteres ou strings, so eles# I0#9E8", #"2I03 e !0#"2I03. ) estrutura do comandos I0#9E8" # (ormato 1# (ormato 2#

(ormato 3# (ormato 4#

comando I0#9E8" possui vrios recursos para a manipulao de strings, dentre estes recursos os mais utili"ados so os recursos para identificao de um determinado caractere ou string em uma varivel ou ainda substituir caracteres de uma varivel. comando a seguir pesquisa a eAistRncia do caractere TaV dentro da varivel nome# $nspect nome tallJing eAiste for all TaV

Caso eAista algum caractere TaV dentro da varivel nome a varivel e?iste ter o seu valor modificado para a quantidade de ocorrRncias de TaV dentro da varivel nome. comando a seguir substitui as ocorrRncias de T#V por TmV# $nspect lin@a replacing all T#V bJ TmV comando #"2I03 utili"ado para unificar o conteFdo de variveis. +ua sintaAe vista a seguir# &ste comando muito utili"ado quando desejamos, por eAemplo, montar o nome completo de um cliente a partir dos campos 9rimeiro-0ome e !ltimo-0ome, por eAemplo# +tring primeironome delimited bJ spaces T T delimited bJ si"e segundonome delimited bJ spaces into nomecompleto 'este eAemplo a varivel primeironome possui TfabioV e segundonome possui TcostaV, desta forma nomecompleto ir possuir Tfabio costaV. )s clusulas ,E I;I"E, )< indicam ao comando #"2I03 o que deve ser considerado para delimitar os caracteres unificados. .ode;se informar uma string para ,E I;I"E, )<, por eAemplo# +tring primeironome delimited bJ TaV T T delimited bJ si"e segundonome delimited bJ ToV into nomecompleto 0omecompleto ser igual a TfcV. comando !0#"2I03 possui as caractersticas inversas de #"2I03. +ua sintaAe # ) diferena bsica entre +T,$'M e /'+T,$'M, que o primeiro,

une os bJtes informados em uma varivel e /'+T,$'M desune os bJtes em vrias variveis. 2ecu"erando ar/uivos corrom"idos &m certas circunstQncias pode ocorrer uma corrupo dos arquivos indeAados. &sta corrupo pode ocorrer quando o programa est fa"endo alguma operao de gravao e por algum motivo esta operao encerrada no meio do processo. Luando se grava um registro em um arquivo indeAado, o programa deve atuali"ar o arquivo de dados e depois o arquivo de ndice, se ocorrer a situao em que o arquivo de dados atuali"ado e o de ndice no, ir eAistir a corrupo do ndice, ou seja, o arquivo de ndice deiAar de estar equali"ado com o arquivo de dados. .ara corrigir estes problemas eAiste um utilitrio c@amado 2E)!I ,. &ste utilitrio foi desenvolvido eAclusivamente para corrigir estes problemas e oferece uma srie de recursos, onde pode se reconstruir o ndice a partir do arquivo de dados simplesmente. +ua sintaAe mais simples # 2E)!I , arqui$o.dat. 55=55>

' Coment$rios
Descrio
C : D

1a/s

C : D

EstatJsticas

3:&0 visitas 0! doGnloads ' comentrios

Arqui os 3emelCantes

c apostila

lin/ua/em C apostila

Banco de dados apostila

Banco de dados apostila

Peb desi/ner )postila

Computao Cientifica )postila

Apostila sobre os m%todosH Qust5in51imeE Rai2en e 3Ci/eo 3Cin/o

)postila

tecnicas 5 para 5 falar 5 em 5 publico ). +T$D)

apostila /eobra apostila

4aciocinio lo/ico OI )postila

(i ros 4elacionados

6ec?nica )etorial para En/enCeiros 5 Est$tica Com conceitos precisos e completos e se!es especiais de resolu!es de problemas, o livro de...

Criati idade em "ropa/anda /m livro que p!e o crebro do leitor em movimento. $ncrivelmente absorvente do primeiro ao...

A Arte da Auerra 'esta edio, alm dos tre"e captulos completos, o leitor vai se aprofundar no tema com a...

Pesquisar

EbaC uma rede social dedicada eAclusivamente ao campo acadRmico e tem como principal objetivo o compartil@amento de informao e materiais entre alunos e professores. +aiba mais n

3obre o EbaCH

que o &ba@o )jude;nos a mel@orar $mprensa %ireitos )utorais Termos e .rivacidade Trabal@e no &ba@

CursosH

)grrias )rtes :iolgicas &ngen@arias &Aatas Numanas e +ociais

Bique li/adoH

(acebooH rHut TGitter Mooglec

ebaC )lguns direitos reservados. p 2<<6;2<13

Você também pode gostar