PROGRAMAÇÃO
COBOL II
INTRODUÇÃO A natureza do COBOL: •
• • •
É a mais mais conh conhec ecid idal alin ingu guag agem em para para apli aplica caçõ ções es come comerc rcia iais is em uso uso atualmente. COBOL é uma sigla derivada de Common Business Oriented Language. É uma linguagem semelhante ao inglês. As versões do COBOL segundo as American ational !tandards " A! s#o $%&'( $%)* e $%'*
+rocedimentos para para codi,icaç#o e depuraç#o de um um programa em linguagem COBOL: • •
• •
•
o-ter as especi,icações do analista usar ,erramentas de planeamento " ,lu/ograma( pseudoc0digo( diagramas hier1r2uicos " para proeto do programa codi,icar o programa testar o programa usando técnicas de depuraç#o: teste de mesa correç#o de erros de sinta/e e/ecuções manuais do programa veri,icaç#o dos erros de l0gica ap0s a e/ecuç#o do programa documentar o programa
3écnicas para aper,eiçoar o proeto de programas: • • •
programaç#o estruturada denominada programaç#o sem 4O 3O os programas estruturados s#o su-divididos em par1gra,os ou m0dulos
+rogramaç#o 3op"5o6n: •
•
Os m0du m0dulo loss ou proc proced edime iment ntos os prin princi cipa pais is s#o s#o codi codi,ic ,icad ados os ante antess dos dos secund1rios An1loga ao desenvolvimento de um es-oço( antes de se escrever um programa " a organizaç#o e a estrutura s#o muito importantes7 os detalhes s#o introduzidos posteriormente.
As divisões do COBOL IDENTIFICATION DIVISION. • • •
8denti,ica o programa para o sistema de computaç#o tam-ém pode ,ornecer alguma documentaç#o +9O49A"85 é a ;nica entrada o-rigat0ria dentro da divis#o.
ENVIRONMENT DIVISION. •
Atri-ui um nome e/terno de ar2uivo a cada ar2uivo usado no programa e especi,ica o dispositivo 2ue o ar2uivo usar1.
DATA DATA DIVISION. DIV ISION. •
5e,ine e descreve os ,ormatos de todas as entradas( sa
!>C38O. •
•
•
Cada nome de ar2uivo de,inido na >?89O>3 58?8!8O deve ser descrito em um =5 da 5A3A 58?8!8O. Cada ,ormato de registro dentro de cada ar2uivo é de,inido como uma entrada @$. Os campos dentro de cada registro s#o descritos por meio de um cl1usula +8C39> 2ue especi,ica o tamanho e o tipo dos dados.
O984"!3O9A4> O984"!3O9A4> !>C38O. •
5e,ine as 1reas de tra-alho necess1rias ao processamento.
PROCEDURE DIVISION. •
•
•
É su-dividida em par1gra,os ou m0dulos. 8nclui todas as instruções 2ue s#o e/ecutadas se2uencialmente( mas um +>9=O9 trans,ere o controle para outro par1gra,o7 ap0s um par1gra,o ser ser e/ec e/ecut utad ado o com com um +>9= +>9=O9 O9( ( o cont contro role le reto retorn rnar ar1 1 D pr0/ pr0/ima ima instruç#o( na se2uência( ap0s o +>9=O9. 0dulo principal ou par1gra,o
As seguintes entradas entradas s#o t39A5A E8+3F ou !AG5A EO3+3F e ativados em um comando O+>. m 9>A5 inicial traz o primeiro registro para a mem0ria m comando CLO!> desativa todos os ar2uivos m !3O+ 9 termina o processamento •
+ar1gra,os de c1lculo ou processamento Os par1gra,os de c1lculo ou processamento s#o e/ecutados 2uando um coma comand ndo o do m0du m0dulo lo prin princi cipa pall indi indica ca +>9= +>9=O9 O9 nome nome"d "do" o" par1gra,o m par1 par1gr gra, a,o o de c1lc c1lcul ulo o ou proc proces essa same ment nto o é re2u re2uer erid ido o para para processar cada registro de entrada e ler registros su-se2uentes. su-se2uentes.
Exem!o de "o#"$m$ COBOL IDENTIFICATION DIVISION. +9O49A"85. >+9O4. ENVIRONMENT DIVISION. CO=849A38O !>C38O. !+>C8AL"A>!. 5>C8AL"+O83 8! COA. 8+3"O3+3 !>C38O. =8L>"CO39OL. !>L>C3 A9H"?>5A! A!!84 3O A9H$. !>L>C3 A9H"8+9 A!!84 3O +93$. DATA DIVISION. =8L> !>C38O. =5 A9H"?>5A! LAB>L 9>CO95! A9> !3A5A95. @$ 9>4"?>5A!. @* O>"> +8C39> IE$*F. @* H35"?>5A!"> +8C39> %%%?%%. =5 A9H"8+9 LAB>L 9>CO95! A9> O833>5. @$ A9H"8+9. @* =8LL>9 +8C39> IEJ@F. @* O>"! +8C39> IE$*F. @* =8LL>9 +8C39> IEJ@F. @* H35"CO8!!AO"!+8C39> %%.%%. @* =8LL>9 +8C39> IE)JF. O984"!3O9A4> !>C38O. @$
K"A8!"9>48!39O!
+8C39>
III ?AL> M!8M.
PROCEDURE DIVISION. $@@"O5LO"+98C. O+> 8+3 A9H"?>5A! O3+3 A9H"8+9. 9>A5 A9H"?>5A! A3 >5 O?> MAOM3O K"A8!"9>48!39O!. +>9=O9 J@@"9O38A"CO8!!AO 38L K"A8!"9>48!39O N MAOM. CLO!> A9H"?>5A! A9H"8+9. !3O+ 9.
J@@"9O38A"CO8!!AO. O?> !+AC>! 3O 9>4"8+9. O?> O>"> 3O O>"!. 8=
H35"?>5A!"> 8! 49>A3>9 3KA $@@.@@ L38+L .@P B H35"CO8!!AO"! 48?84 H35"CO8!!AO"!
>L!> L38+L .@J B H35"?>5A!"> 48?84 H35"CO8!!AO"! 983> A9H"8+9. 9>A5 A9H"?>5A! A3 >5 O?> MAOM 3O K"A8!"9>48!39O!. J@@"9O38A">I83. >I83.
Como %odi&i%$" 'm "o#"$m$ &o()e Os programas COBOL compõem"se de 2uatro divisões. Cada divis#o tem regras espec<,icas de codi,icaç#o( 2ue discutiremos a seguir. ?amos começar com as regras -1sicas para a codi,icaç#o de programas.
Co!'($ *+ para continuaç#o de literais n#o"numéricas( coment1rios e in/emplo: 85>38=8CA38O 58?8!8O. +9O49A"85. >I>+LO. QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ Q 3>!3> 5> +9O49A COBOL Q QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ samos coment1rios em nossos programas para dei/ar clara a l0gica usada. Além disso( em muitos programas( inserimos uma linha de coment1rios em -ranco( com um Q na coluna )( apenas para separar as divisões: isso ,az com 2ue o programas ,i2ue mais leg
S$!)o de ,#i($( com uma -arra ERF na coluna ). A coluna ) pode tam-ém ser usada para ,azer a impressora saltar para a p1gina seguinte( 2uando a listagem ,onte est1 sendo impressa. >m programas longos( por e/emplo( podemos 2uerer 2ue cada divis#o ,i2ue em uma p1gina separada. +ara saltar para uma nova p1gina ap0s cada divis#o( crie uma linha 2ue contenha s0 -rancos( e/ceto por uma -arra na coluna ).
-"e$s A e B As posições de ' a )J de um programa COBOL padr#o contém comandos do programa. O-serve"se( contudo( 2ue a coluna ' é -atizada de A e a coluna $J( de B. >las s#o conhecidas com reas. Certas entradas devem começar na rea A e outras( na rea B. !e uma entrada tem 2ue ser codi,icada na rea A( ela pode começar nas posições '( %( $@ ou $$. 4eralmente( as entradas da rea A começam na posiç#o '. !e uma entrada tem 2ue ser codi,icada na rea B( ela pode começar em 2ual2uer posiç#o ap0s a $$( isto é( pode começar na posiç#o $J( $P( $S( etc. O-serve"se 2ue as regras so-re margens especi,icam o ponto inicial das entradas. ma palavra 2ue tem 2ue começar na rea A pode estender"se para a rea B7 >/emplo:
AUTOR/ 2ue é nome de par1gra,o na 85>38=8CA38O 58?8!8O( deve começar na rea A. Hual2uer entrada 2ue se re,ira a A3KO9 deve vir logo ap0s na rea B( como se segue: 0
12
AUTOR.
CARLOS 3OSE.
TIPOS DE ENTRADA DO COBOL •
•
A ordem de codi,icaç#o das divisões em um programa COBOL é: IDENTIFICATION DIVISION/ ENVIRONMENT DIVISION/ DATA DIVISION e PROCEDURE DIVISION. Algumas delas s#o su-divididas em seções. A 5A3A 58?8!8O( por e/emplo( 2ue descreve todas as 1rea de mem0ria necess1rias para os dados de um programa( é dividida em duas seções principais: a =8L> !>C38O e a O984"!3O9A4> !>C38O descreve as 1reas intermedi1rias de tra-alho( necess1rias ao processamento. Cada seç#o pode ainda ser su-dividida em par1gra,os. 3odas as outras entradas do programa s#o consideradas comandos COBOL. m comando( ou série de comandos( 2ue termina com um ponto é chamado sentença.
TIPOS DE ENTRADA DO COBOL
Divisões/ se4ões e $",#"$&os %ome4$m ($ -"e$ A
Divisões >/emplos: 85>38=8CA38O 58?8!8O >?89O>3 58?8!8O 5A3A 58?8!8O +9OC>59> 58?8!8O Se4ões >/emplos: =8L> !>C38O O984"!3O9A4> !>C38O P$",#"$&os >/emplos: +9O49A"85. $@@@"9O3"CALCLO. Com$(dos e Se()e(4$s
Com$(dos e se()e(4$s %ome4$m >/emplos: O?> O>"> 3O O>"!. ($ -"e$ B A55 H35"> 3O 3O3AL.
REGRAS SOBRE MARGENS 5ivis#o( seç#o e nomes de par1gra,os começam na rea A 3odos os outros comandos( cl1usulas e sentenças começam na rea B =OLKA 5> CO58=8CATUO COBOL
COLUNAS $"&
)
'"$$
$J")J
)P"'@
USO ;meros se2uenciais ou n;meros de p1ginas e linhas EopcionalF
E5PLICAÇÃO n#o utilizadas
usada para indicar 2ue Coment1rio( uma linha é coment1rio continuaç#o ou in59> 58?8!8O s#o codi,icadas na rea B iden,icaç#o do n#o utilizadas programa
REGRAS DE CODIFICAÇÃO omes de divisões e seções Começam na rea A 3erminam com um ponto. 5evem aparecer em uma linha sem outras entradas. • • •
omes de par1gra,os Começam na rea A 3erminam com um ponto( 2ue de ser sempre seguido de pelo menos um espaço em -ranco. +odem aparecer sozinhos na linha ou com outras entradas. • •
•
!entenças Começam na rea B. 3erminam com um ponto( 2ue deve ser sempre seguido de pelo menos um espaço em -ranco. +odem aparecer sozinhos na linha ou com outras entradas. ma sentença consiste em um comando ou uma série de comandos. • •
• •
Linhas em -ranco( -em como coment1rios( s#o permitidas em 2ual2uer ponto de um programa COBOL.
REGRAS PARA INTERPRETAR OS FORMATOS DE INSTRUÇ6ES •
As palavras escritas em mai;sculas s#o palavras reservadas COBOL( 2ue tem um signi,icado especial para o compilador.
•
As palavras em min;sculo representam entradas de,inidas pelo usu1rio.
•
As palavras su-linhadas s#o o-rigat0rias no par1gra,o.
•
!e ,or especi,icado algum ponto no par1gra,o ele é o-rigat0rio.
•
Colchetes V W signi,icam 2ue a cl1usula ou par1gra,o é opcional.
•
O uso de reticencias E...F signi,icam 2ue podem ser incluidas mais entradas do mesmo tipo( se deseado.
REGRAS PARA A FORMAÇÃO DE NOMES DE DADOS DEFINIDOS PELO USU-RIO • • • • • •
•
3em de $ a P@ caracteres Contém apenas letras( d
CODIFICANDO A IDENTIFICATION DIVISION =ormato: 85>38=8CA38O 58?8!8O. +9O49A"85. ome"do"programa. VA3KO9. VcomentarioW...W V8!3ALLA38O. VcomentarioW...W V5A3>"9833>. VcomentarioW...W V5A3>"CO+8L>5. VcomentarioW...W V!>C983. VcomentarioW...W
CODIFICANDO A ENVIRONMENT DIVISION >?89O>3 58?8!8O. CO=849A38O !>C38O. !O9C>"CO+3>9. OBX>C3"CO+3>9. !+>C8AL"A>!. 5>C8AL"+O83 8! COA. 8+3"O3+3 !>C38O. =8L>"CO39OL. !>L>C3 nome"do"ar2uivo A!!84 3O nome"e/terno •
5eve ser especi,icado um comando !>L>C3 para dispositivo de 8RO no programa.
REGRAS PARA USO DO COMANDO SELECT. nome"do"ar2uivo: •
5eve ser especi,icado um comando !>L>C3 para dispositivo de 8RO no programa.
nome"e/terno: •
!eguir as regras de,inidas pela XCL do ?!R>!A.
CODIFICANDO A DATA DIVISION +ossui duas seções principais:
FILE7SECTION 5e,ine todos os ar2uivos de entrada e sa?89O>3 58?8!8O( em um comando !>L>C3( onde o nome"do"ar2uivo é designado e um dispositivo de entrada ou saL>C3 teremos um ar2uivo a ser descrito na =8L> !>C38O da 5A3A 58?8!8O. Cada ar2uivo é descrito na =8L> !>C38O com uma sentença =5( 2ue pode consistir em uma série de cl1usulas. 5epois de serem especi,icadas as cl1usulas( a sentença =5 termina com um ponto. =5 é a-reviaç#o de =ile 5escription. Cada entrada =5 descreve um ar2uivo de,inido em um comando !>L>C3 da >?89O>3 58?8!8O.
9OR:ING7STORAGE SECTION 9eserva mem0ria para campos 2ue( em-ora n#o sendo parte de registros de entrada ou sasses campos incluem constantes e 1reas de tra-alho.
OBS.+ $s se4ões devem $$"e%e" ($ o"dem des%"i)$. >/istem mais duas seções 2ue ser#o discutidas oportunamente: L8A4> !>C38O e 9>+O93 !>C38O.
DATA DIVISION. FILE SECTION. +odem ser usadas v1rias cl1usulas para descrever um ar2uivo. >las vem ap0s o nome"do"ar2uivo( e n#o haver1 ponto en2uanto n#o ,or especi,icada a ;ltima cl1usula. >/emplos: =5
A9H"=OLKA LAB>L 9>CO95! A9> O833>5 9>CO95! CO3A8! '@ CKA9AC3>9!
=5
A9H"39A!ACO>! LAB>L 9>CO95! A9> !3A5A95 9>CO95 CO3A8! *@ CKA9AC3>9! BLOC CO3A8! J@ 9>CO95!.
A";'ivo se;'e(%i$! =5
nome"do"ar2uivo BLOC CO3A8! inteiro"$ 3O inteiro"J 9>CO95! 9>CO95 inteiro"P CKA9AC3>9! V LAB>L 9>CO95 V !3A5A95 Y O833>5 W W V =8L> !3A3! 8! status"ar2uivo W
A";'ivo "e!$)ivo =5
nome"do"ar2uivo BLOC CO3A8! inteiro"$ 3O inteiro"J 9>CO95! 9>CO95 inteiro"P CKA9AC3>9! V LAB>L 9>CO95 V !3A5A95 Y O833>5 W W V =8L> !3A3! 8! status"ar2uivo W
I()e""e)$(do os "i(%i$is $"
•
•
•
LAB>L 9>CO95! A9> !3A5A95: indica 2ue o primeiro registro a ser processado é um header la-el padr#o de '@ posições contendo identi,icaç#o do ar2uivo e( o ;ltimo registro ser1 um trailer la-el( Eleitura e gravaç#oF. LAB>L 9>CO95! A9> O833>5: n#o haver1 o processamento dos registros header e trailer. 9>CO95 CO3A8! inteiro"$ CKA9AC3>9!: indica o tamanho de cada registro l0gico para ar2uivos com registros de tamanho ,i/o. >sta cl1usula é opcional. Contudo( é importante inclui"la( uma vez 2ue ela proporciona um meio de veri,icaç#o do tamanho do registro. BLOC CO3A8! inteiro"$ 9>CO95!: indica o numero de registros l0gicos por registro ,
N=me"o de (>veis+ •
•
•
o COBOL os dados s#o agrupados usando"se o conceito de n
>/emplo:
•
9egistro de ,uncion1rios EentradaF
NOME @$
•
SALARIO
9>4"=C">. @* O>"> @* !ALA98O"> @* CA94O"> @* 5A3A">. $@ AO"> $@ Z!"> $@ 58A">
CARGO
+8C +8C +8C
IEP@F. %E@)F?%%. IE$@F.
+8C +8C +8C
%%%%. %%. %%.
ADMISSAO
>m-ora o COBOL permita o uso da rea A para n;meros de n
A %!,'s'!$ PICTURE ?PIC@
•
>speci,ica o tipo de dados contidos em um
•
3ipo de campos de dados:
•
A!&$)i%o ?A@ A!&$('m"i%o ?5@ N'm"i%o ?@ 3amanho é indicado pelo numero de As/ 5s ou s usados. Exem!o+ PIC . •
•
•
+odemos tam-ém indicar o n;mero de -[tes do campo entre parenteses. Exem!o+ PIC 5?18@. O ponto decimal é representado pela letra ? na +8C39>. Exem!o+ PIC ?@V.
Co()e=do do %$mos Literal numérica • • • •
até $' digitos pode utilizar o sinal \ ou " no in/. \$JP. +ermite o ponto decimal. >/. $*.'. +ode ser usada na +9OC>59> 58?8!8O.
Literal n#o numérica • • •
5eve ser escrita entre ap0stro,os. >/emplo: ]XA>89O^. Até $&@ caracteres de tamanho. +ermite o uso de 2ual2uer caracter >BC58C. 8nclusive espaço e aspas.
Constante ,igurativa _>9O!( !+AC>!( LO"?AL> e K84K"?AL>. >/emplo. @$
L8KA+8C
IES@F ?AL> >!+AC>!.
O?> _>9O! 3O "ACL8.
UTILIANDO A CL-USULA USAGE •
>speci,ica ,orma em 2ue os dados s#o armazenados.
•
+ode ter os seguintes valores
FORMATO +8C I ou +8C A +8C % +8C % +8C %
USAGE 58!+LA 58!+LA CO+3AC8OAL ECO+F ou B8A9 CO+3AC8OAL"P ECO+"PF ou +AC>5"5>C8AL
CONTUDO AL=A>98CO _OA5O B898O CO+AC3A5O
9OR:ING7STORAGE SECTION. 9egras de codi,icaç#o: • • • •
•
5e,inir ap0s a =8L> !>C38O. Codi,icar a partir da Area A e terminar com ponto. Gtem de grupo e e pode conter valor inicial. tilizar a cl1usula ?AL> para inicializar uma 1rea.
9egras de continuaç#o de uma literal n#o numérica: • • • • •
Comece a literal na cl1usula ?AL> com aspas. >screva até a coluna )J. Colo2ue um hi,en na coluna ) da linha seguinte. Continue a partir da rea B( começando com aspas. 3ermine a literal com aspas e ponto.
PROCEDURE DIVISION. • •
•
•
Codi,icar na rea A terminando com ponto. É dividida em par1gra,os. Cada par1gra,o é um m0dulo ou rotina( independente( 2ue inclui uma série de intruções destinadas a e/ecutar um conunto de operações. Os nomes dos par1gra,os devem ser codi,icados na -"e$ A( podem ser ,ormados s0 por digitos e( devem ser ;nicos no programa. 5evem ser in,ormativos. As instruções e comandos na +9OC>59> 58?8!8O devem começar na -"e$ B.
COMANDO OPEN •
+ermite o acesso a ar2uivos de entrada e sa
OPENINPUT o' OUTPUT
(ome7$";'ivo1...
•
8ndica 2uais os ar2uivos ser#o de entreda e 2uais de sa
•
3orna os ar2uivos dispon
COMANDO READ •
3ransmite dados do dispositivo de entrada( designado na >?89O>3 58?8!8O para uma 1rea de mem0ria de,inida na =8L> !>C38O ou na O984"!3O9A4> !>C38O E 9>A5 83OF
READ (ome7$";'ivo1 AT END %om$(do1 NOT AT END H %om$do 2 END7READ H •
•
nome"do"ar2uivo especi,icado no comando 9>A5 é o mesmo utilizado no !>L>C3( na =5 e no O+>. Ao e/ecutar o comando 9>A5 ap0s a leitura do ;ltimo registro a se2uência de e/ecuç#o é desviada para o comando seguinte D cl1usula A3 >5.
COMANDO PERFORM ... UNTIL ?es)"')'"$(do o "o#"$m$@ PERFORM (ome7"o%edime()o71 UNTIL %o(di4o71 END7PERFORM H •
•
3rans,ere o controle para o procedimento ou par1gra,o especi,icado. 9epete a e/ecuç#o até a condiç#o de,inida na condiç#o"$ ,or satis,eita. >/emplo: +>9=O9 J@@"9O3"CALC 38L K"A8!"9>48!39O! N ]UO^
•
•
Podemos ')i!iJ$" o PERFORM em !i(K$ e o )e"mi($do" de es%oo END7PERFORM. >/emplo: +>9=O9 38L "CKA?> N %% O?> CA+O 3O 9>4"!A85A 983> 9>4"!A85A 9>A5 A9H">3 A3 >5 O?> %% 3O "CKA?> >5"+>9=O9.
COMANDO PERFORM ...TROUG PERFORM (ome7$",#"$&o71 TROUG H (ome7$","#"$&o72 TRU H END7PERFORM H •
•
+>9=O9 3K9 realiza todos os comandos a partir do nome"par1gra,o" $ até o comando imediatamente anterior ao nome"par1gra,o"J( 2uando retorna para a instruç#o seguinte ao comando +>9=O9. +odemos misturar os dois tipos de +>9=O9 E38L e 3K9O4KF -em como o +>9=O9 em linha em um mesmo comando.
PERFORM (ome7$",#"$&o71 TROUG H TRU H (ome7$","#"$&o72 i()ei"o71 ide()i&i%$do"71 •
TIMES
9epetir1 o desvio ao nome"par1gra,o"$ por vezes.
COMANDO PERFORM VARING PERFORM (ome7$",#"$&o71 TROUG H TRU H (ome7$","#"$&o72 VARING ide()i&i%$do"71 FROM ide()i&i%$do"72 i()ei"o71 B ide()i&i%$do"7 i()ei"o72 UNTIL %o(di4o71 i()ei"o71
OPÇÃO PERFORM 9IT TEST AFTER BEFORE PERFORM (ome7"o%edime()o71 9IT TEST BEFORE UNTIL %o(di4o71 AFTER •
As opções B>=O9> e A=3>9 permitem 2ue controlemos se condiç#o"$ é para ser veri,icada antes ou depois de e/ecutar a rotina especi,icada em nome"procedimento"$.
COMANDO GO TO GO TO (ome7$",#"$&o •
>/ecuta um desvio incondicional para o nome"par1gra,o( alterando de,initivamente o ,lu/o do processamento.
COMANDO E5IT (ome7$",#"$&o. E5IT. •
8ndica para o +>9=O9( o ,im de e/ecuç#o de uma rotina.
COMANDO CLOSE CLOSE (ome7do7$";'ivo71 ... •
Li-era os ar2uivos 2ue ,oram ad2uiridos em tempo de O+>.
COMANDO STOP RUN •
•
8ndica o ,inal da e/ecuç#o do programa para o !istema Operacional( encerrando operações pendentes e li-erando todas as 1reas utilizadas. 3odo programa deve conter um comando !3O+ 9.
COMANDO MOVE MOVE ide()i&i%$do"71 TO ide()i&i%$do"72 •
•
ove o conteudo do campo ou constante indicada em ident,icador"$ para o campos indicado em identi,icador"J. Cuidados a serem tomados com o comando O?> $. Huando os campos emissores e recpectores tem +8Cs di,erentes. J. ovendo a parte inteira de campos numéricos P. ovendo a parte decimal de campos numéricos S. 3runcamentos *. ovendo literais numéricas para campos numéricos &. ovendo n#o"numericos ou al,anuméricos ). ovendo itens de grupo e elementar '. ovendo constantes ,igurativas ou literais.
MOVE CORRESPONDING i)em7#"'o71 TO i)em7#"'o72 CORR COMANDO 9RITE •
+ega os dados na 1rea de sa?89O>3 58?8!8O e( a-erto como O3+3.
9RITE (ome7"e#is)"o71 >/emplo: 983> 9>48!39O"!. •
OB!.: Lemos ar2uivos e gravamos registros.
COMANDOS ARITIMTICOS ADD ide()i&i%$do"71 !i)e"$!71
TO
ide()i&i%$do"72
ADD ide()i&i%$do"71 !i)e"$!71
GIVING ide()i&i%$do"72
ADD ide()i&i%$do"71 TO ide()i&i%$do"72 !i)e"$!71 GIVING ide()i&i%$do"7 SUBTRACT ide()i&i%$do"71 !i)e"$!71
FROM ide()i&i%$do"72
SUBTRACT ide()i&i%$do"71 FROM ide()i&i%$do"72 !i)e"$!71 GIVING ide()i&i%$do"7 MUTIPL
ide()i&i%$do"71 !i)e"$!71
B
ide()i&i%$do"72
MUTIPL
ide()i&i%$do"71 B ide()i&i%$do"72 !i)e"$!71 GIVING ide()i&i%$do"7
DIVIDE
ide()i&i%$do"71 !i)e"$!71
B
DIVIDE
ide()i&i%$do"71 !i)e"$!71
INTO ide()i&i%$do"72
DIVIDE
ide()i&i%$do"71 INTO ide()i&i%$do"72 !i)e"$!71 GIVING ide()i&i%$do"7 REMAINDER H ide()i&i%$do"7 ROUNDED H
ide()i&i%$do"72
COMANDO ARITMTICO se#'ido o" ON SIE ERROR %om$(do71 •
>/emplos: A55 $ 3O "AC. !B39AC3 *@ =9O !AL5O"9">39A5A L38+L .@&) B !ALA98O.
OBS.+ %'id$do %om o )$m$(Ko dos %$mos ;'e "e%ee"o os "es'!)$dos d$s oe"$4ões. Oe"$4o e(vo!ve(do %$mos (o ('m"i%os %$'s$m d$)$ ex%e)io(Q.
COMANDO COMPUTE •
sa s
COMPUTE "es'!)$do ex"esso $"i)m)i%$ !
adiç#o su-taç#o multiplicaç# o divis#o e/ponencia ç#o
+ermite o uso de 9O5>5 e O !8_> >99O9
COMANDO IF •
?eri,ica se a condiç#o especi,icada é verdadeira e( se ,or e/ecuta a pr0/ima instruç#o( sen#o e/ecuta o comando especi,icado na cl1usula >L!> ou ap0s o primeiro ponto.
IF %o(di4o TEN H %om$(do71 NE5T SENTENCE H CONTINUE H ELSE H NE5T SENTENCE H CONTINUE H %om$(do72 END7IF H •
As condições simples 2ue podem ser testadas s#o as seguintes: Eidenti,icador"$F
N Eou 8! >HAL 3OF ` Eou 8! L>!! 3KAF Eou 8! 49>A3>9 3KAF
Eidenti,icador"J literal $
•
A cl1usula >L!> é opcional. ?1rios comandos podem ser escritos ap0s cada cl1usula 8= ou >L!>. +odemos tam-ém utilizar um terminador de escopo >5"8=.
•
É permitido o uso de condicionais OR ou AND em comando 8=
•
Outros teste poss( O3 >4A38?>( >4A38?> ou _>9O >98C( AL+KAB>38C
COMO UTILIAR A IMPRESSÃO A ,unç#o de ediç#o de dados permite impress#o de pontos decimais %%.%%. supress#o de zeros D es2uerda __%%. impress#o de ci,rões e v
UADRO RESUMO %$mo emisso" +8C39> CO3É5O
+8C39>
%E&F %%%%?%% %E*F?%% !%E&F !%E&F !%%%%?%% !%%% %E&F !%% %%% !%%?%%
b___.___(%% b_.___(%% bQQ.QQQ(%% \_E&F "_E&F \_ESF.%% ___" %%BBBB%%%% b__.%%5B %%%@@@ b__.%%C9
$JPS*& @@$Jv%% @@@@$vJP @$JPS* $JPS*& E\F $JPSv*& E\F $JP $JPS*& @* E"F $JP $JvPS E"F
>)em de "e!$)"io 9>!L3A5O >583A5O b$JP.S*&(@@ b $J(PS bQQQQQ$(JP " $JPS* $JPS*& \ $JPS.*& $JP" $J PS*& b *(@@5B $JP@@@ b$J.PSC9
COMANDO 9RITE PARA IMPRESSAO DE RELATRIOS 9RITE (ome7"e#is)"o71 FROM ide()i&i%$do"71 AFTER ADVANCING H i()ei"o71 LINESLINES H BEFORE ide()i&i%$do"72 PAGE H •
O tamanho do registro deve ser de,inido com uma posiç#o a mais( para conter o caractere de controle de impress#o.
COMO OBTER A DATA DO DIA •
tilizar o comando 5A3> @$
!"5A3A. @* AO"+9OC @* >!"+9OC @* 58A"+9OC
+8C %%. +8C %%. +8C %%.
+9OC>59> 58?8!8O. $@@@"88C8O. ACC>+3 !"5A3A =9O 5A3>.
COMANDO INITIALIE INITIALIE i)em7de7#"'o. NOME DE CONDIÇ6ES •
•
ome de condiç#o é uma palavra de,inida na 5A3A 58?8!8O como n/emplo: @*
>!3"C8?8L +8C I. '' !OL3>89O ?AL> ]!^. '' CA!A5O ?AL> ]C^.
+9OC>59> 58?8!8O. 8= !OL3>89O CO38> >L!> O?> ]CA!A5O^ 3O OB!"L5>3 >5"8=.
TCNICAS DE VALIDAÇÃO DE DADOS COMANDO INSPECT •
•
É necess1rio validar in,ormações rece-idas por entradas so-re as 2uais n#o temos controle da 2ualidade dos dados. +odemos utilizar as opções >98C ou AL+KAB>38C do comando 8=( ou ainda o comando 8!+>C3 •
=ormato $: 8!+>C3
identi,cador"$
identi,icador"J
3ALL84
=O9 ALL identi,icador"P L>A584 literal"$ CKA9AC3>9!
B>=O9> A=3>9
•
•
•
•
•
8838AL
identi,icador"S literal"J
Conta o n;mero de ocorrências de um determinado caractere emum campo. !u-stitui ocorrências espec<,icas de um determinado caractere por um outro caractere.
ALL " toda ocorrência do caractere especi,icado no campo ser1 contada. LEADING " ser#o contadoas todas as ocorrências do caractere especi,icado 2ue precedem 2ual2uer outro. CARACTERS " todos os caracteres detro do campo ser#o contados. >sta opç#o pode ser usada para determinar o tamanho do campo.
•
=ormato J:
INSPECT
ide()i&%$do"71
REPLACING
CARACTERS ALL LEADING FIRST B
•
•
ide()i&i%$do"72 !i)e"$!71
ide()i&i%$do"7 ide()i&i%$do"7 !i)e"$!72
BEFORE
INITIAL
AFTER
!i)e"$!7
!u-stitui as ocorrências de um determinado caractere por outro caractere. >le n#o conta o n;mero de ocorrências de 2ual2uer caractere. ALL( L>A584 e CKA9AC3>9! tem signi,icado an1logos aos do =ormato $. !e =89!3 ,or especi,icado no =ormato J( ent#o a primeira ocorrência da literal"$ ser1 su-stitu
COMANDOS STRING E UNSTRING •
!3984 permite 2ue realizemos a concatenaç#o de campos.
STRING
ide()i&i%$do"71 .... !i)e"$!71
DELIMITED B
ide()i&i%$do"72 !i)e"$!72 SIE INTO ide()i&i%$do"7 END7STRING >/emplo: @$ @$
>5>9>COP 9>4">. @* C85A5> @* >!3A5O @* C>+
+8C +8C +8C +8C
BRASILIA
DF81888
IEP@F.
IEJ@F. IE@JF. %E@*F.
!3984 C85A5> 5>L883>5 B ] ] ](^ 5>L883>5 B !8_> >!3A5O 5>L883>5 B !8_> ](^ 5>L883>5 B !8_> C>+ 5>L883>5 B !8_> 83O >5>9>COP 58!+LA
>5>9>COP
BRASILIA/DF/81888
COMANDO UNSTRING •
sado para converter os dados digitados em uma ,orma mais apropriada para o armazenamento . +or e/emplo para retirar separadores de te/tos.vari1veis.
UNSTRING ide()i&i%$do"71 DELIMITED B ALL H ide()i&i%$do"72 !i)e"$!71 OR ALL
ide()i&i%$do"7 !i)e"$!72
INTO ide()i&i%$do"7 ... END7UNSTRING H •
>/emplo: !3984 >5>9>COP 5>L883>5 B ](^ 83O C85A5> >!3A5O C>+
COMANDO EVALUATE •
•
•
+ermite utilizar a estrutura de casos 2ue é uma estrutura l0gica de controle( testando uma série de condições. +ermite 2ue a se2uência de casos e a identi,icaç#o da rotina 2ue ser1 ativada seam codi,icadas mais claramente. A cl1usula K> O3K>9 ser1 e/ecutada 2uando as condições n#o ,orem satis,eitas.
EVALUATE ide()i&i%$do"71 ex"ess$o71 9EN %o(di4o71 %om$(do7ime"$)ivo71 9EN OTER %om$(do7ime"$)ivo72 END7EVALUATE H
•
>/emplo: >?ALA3> >!3A5O"C8?8L K> $ +>9=O9 9O3"!OL3>89O K> J +>9=O9 9O3"CA!A5O K> P +>9=O9 9O3"5>!H83A5O K> O3K>9 +>9=O9 9O3">99O >5">?ALA3>
DEFININDO E UTILIANDO TABELAS A CL-USULA OCCURS •
samos para indicar a ocorrência repetida de campos 2ue têm o mesmo ,ormato. 3em os seguintes usos: +ara uma série de campos de entrada ou sa( onde s#o acumuladas 2uantidades7 ap0s serem acumulados todos os dados( os totais podem ser impressos. +ara uma ta-ela na O984"!3O9A4>( a ser acessada por cada registro de entrada7 com uma ta-ela( usamos o contéudo de algum campo de entrada para ]procurar^ os dados deseados na ta-ela.
•
+ode ser usada somente nos n
•
>/emplos: @$ @$
9>4"3>+. @* 3>+>9A39A
OCC9! JS 38>!
8+O!3O. @* 49+O"I OCC9! $@ C85A5> +8C $@ AL8H"8+ +8C
$* 38>!. IE@&F. ?%%%.
+8C %EPF.
SUBSCRITOS •
•
•
Acesso as ocorrências dos campos se d1 através de um su-scrito. 9egras de codi,icaç#o para su-scritos: deve vir entre parenteses( sem espaços dentro dos parenteses. >/emplo $: A55 3>+>9A39A EJ( JF 3O 3O3AL.
•
>/emplo J: O984"!3O9A4> !>C38O @$
A9>A!"39AB. @* !B +8C
%%
?AL>
@$.
+9OC>59> 58?8!O. O?> 3>+>9A39A E!BF 3O 3>+"!. •
!u-scrito pode ser um nome de dado com valor numérico inteiro( ou uma literal numérica com um valor inteiro. O su-scrito pode tam-ém ter um valor relativo( isto é um nome de dado ou inteiro. >sse tipo é chamado de su-scrito relativo.
CL-USULAS REDEFINES E VALUE •
Huando usamos a cl1usula OCC9! n#o podemos rede,inir uma entrada.
•
+ortanto precisamos primeiro rede,ini"la para depois usar OCC9!.
•
>/emplo: O984"!3O9A4> !>C38O. @$
3AB">!>!. @* L8!3A>! +8C IEP&F ?AL> ]XA=>?A9AB9A8XXLA4O!>3O3O?5>_^. @* Z! 9>5>=8>! L8!3A>! OCC9! $J 38>! +8C IEPF.
@$
!B
+8C
%% ?AL> @.
+9OC>59> 58?8!8O. +>9=O9 8+98> ?A984 !B =9O $ B $ 38L !B $J. 8+98>. O?> Z! E!BF 3O Z!"!. 983> 9>4"8+9 =9O L8KA"! A=3>9 A5?AC84 J L8>!. •
3am-ém podemos utilizar a cl1usula OCC9! para: $. indicar a ocorrência repetida de campos de entrada ou de sa !>C38O. J. Armazenar arra[s ou 1reas de total dentro da O984"!3O9A4>.
COMANDO SEARC SEARC ide()i&i%$do"71 ATE END %om$(do7ime"$)ivo71 H 9EN %o(di4o71 %om$(do7ime"$)ivo72 NE5T SENTENCE END7SEARC H •
>/emplo: !>A9CK 83>!"3AB A3 >5 O?> @ 3O 53"8+ K> C>+"> N !"C>+ EI$F CO+3> .... O?> ... 983> ... >5"!>A9CK.
•
A opç#o A3 >5 no !>A9CK : A cl1usula A3 >5 especi,ica o 2ue deve ser ,eito 2uando a ta-ela ,or pes2uisada inteiramente sem 2ue nenhuma correspondência sea encontrada. A cl1usula 85>I>5 B e o comando !>A9CK Huando se usa o comando !>A9CK( as entradas das ta-elas devem ser especi,icadas com um
•
>/emplo: @$
•
3AB"8+. @* 83>!"3AB OCC9! $@@@ 38>! 85>I>5 B I$. $@ !"C>+ +8C %E*F. $@ !"8+ +8C % ?%%%.
OB!.: o contéudo de um A9CK( mas 2uando o utilizamos no +>9=O9 ... ?A984( devemos utilizar o comando !>3 para incrementa"lo.
COMANDO SET SET (ome7i(di%e TO i()ei"o UP B DO9N B •
>/emplos: !>3 I$ 3O P. move P em I$. !>3 IJ + B $. soma $ em IJ. !>3 I* 5O B $. su-trai $ de I*.
•
OBS.+ >m-ora o !>A9CK incremente automaticamente o
COMANDO SEARC ALL •
Com o ,ormato semelhante ao !>A9CK o comando !>A9CK ALL é usado para e,etuar -usca -in1ria.
SEARC ALL ide()i&i%$do"71 AT END %om$(do7ime"$)ivo71 H 9EN (ome7de7d$do1 IS EUAL TO ide()i&i%$do"72 IS !i)e"$!71 (ome7de7%o(di4o71 ex".7('m"i%$71 AND (ome7de7d$do2 IS EUAL TO ide()i&i%$do"7 IS !i)e"$!72 (ome7de7%o(di4o72 ex".7('m"i%$72 %om$(do7ime"$)ivo72 NE5T SENTENCE END7SEARC H •
OBSERVAÇWES+ $. s0 pode testar uma condiç#o de igual. J. se usarmos uma condiç#o composta: EaF cada parte s0 pode testar uma condiç#o de igual e E-F s0 s#o permitidos A5s. P. s0 pode ser usada uma cl1usula K>.
UTILIANDO TABELAS COM MAIS DE UM NXVEL •
+odemos utilizar até sete n
•
+ara cada n
•
O primeiro su-scrito re,ere"se 1 cl1usual OCC9! de n
• •
Os su-scritos podem ser inteiros positivos ou contéudo inteiro positivo.
uma vari1vel com
•
>/emplo: @$
CLA!!>!!. @* !É98>! OCC9! $@ $@ ALO! OCC9! *
38>!. 38>! +8C %EPF.
utilizando... O?> ALO! EP(SF 3O CA+OJ.
move o )o)$! de $!'(os d$ ;'$")$ %!$sse d$ )e"%ei"$7s"ie. OB!>9?AT>!: OCC9! em m;ltiplos n
•
•
•
+odem ser usados para um arra[ ou uma ta-ela O nome de dado de mais -ai/o nA9CK para acessar uma ta-ela de m;ltiplos nI>5 B para todos os nA9CK deve ser o de mais -ai/o nA9CK.
COMANDO DISPLA •
>nvia as in,ormações de,inidas em identi,icador"$ ou literal"$ para o dispositivo especi,icado.
DISPLA ide()i&i%$do"71 UPON !i)e"$!71 •
CONSOLE H SSOUT H (ome71 H
>/emplo: 58!+LA !4">99O +O CO!OL>. 58!+LA ]+4$@B " =8AL 5> +9OC>!!A>3O^.
COMANDO ACCEPT •
>/ecuta uma operaç#o de entrada de dados. Aplica"se para entradas pouco volumosas( como um parmetro ou data.
ACCEPT ide()i&i%$do" FROM (ome7disosi)ivo H
ACESSANDO ARUIVOS EM DISCO •
Ar2uivos em disco podem ter seus dados lidos e atualizados diretamente ou através de campos
LEITURA SEUENCIAL SEM ATUALIAÇÃO+ •
procedimento igual ao realizado para ar2uivos se2uenciais.
LEITURA SEUENCIAL COM ATUALIAÇÃO+ •
a-rir o ar2uivo como 8"O( ler os registros se2uencialmente e( 2uando um registro ,or so,rer atualizações( modi,ica"lo e regravar com 9>983>
RE9RITE (ome7"e#is)"o
CRIAÇÃO DE ARUIVO INDE5ADO+ •
•
Os registros devem estar em ordem ascendente pelo CA+O" CKA?>. O procedimento de criaç#o é semelhante ao utilizado para criaç#o de ar2uivos se2uenciais.
O UE MUDA NO PROCESSAMENTO DE ARUIVOS INDE5ADOS COMANDO SELECT SELECT (ome7de7$";'ivo71 ASSIGN TO (ome7ex)e"(o71 ORGANIATION IS H INDE5ED ACCESS MODE IS SEUENTIAL RANDOM H RECORD :E IS (ome7de7d$dos71
COMANDO 9RITE 9RITE (ome7de7"e#is)"o71 FROM ide()i&i%$do"71 H INVALID :E %om$(do7ime"$)ivo H NOT INVALID :E %om$(do7ime"$)ivo H END79RITE H •
tilizar o ACC>!! O5> 8! !>H>38AL no comando !>L>C3.
COMANDO READ READ (ome7de7$";'ivo71 INVALID :E %om$(do7ime"$)ivo H NOT INVALID :E %om$(do7ime"$)ivo H END7READ H •
tilizar o ACC>!! O5> 8! 9A5O no comando !>L>C3.
COMANDO RE9RITE RE9RITE (ome7de7"e#is)"o71 FROM ide()i&i%$do"71 H INVALID :E %om$(do7ime"$)ivo H NOT INVALID :E %om$(do7ime"$)ivo H END7RE9RITE H •
#o modi,icar o campo"chave.
COMANDO DELETE DELETE (ome7de7$";'ivo71 RECORD INVALID :E %om$(do7ime"$)ivo H NOT INVALID :E %om$(do7ime"$)ivo H END7DELETE H •
Antes do processamento de atualizaç#o ou de e/clus#o de um registro( o mesmo deve ser lido.