Você está na página 1de 89

COBOL II

NDICE
INTRODUO............................................................................................................................................4 EXEMPLO DE UM PROGRAMA COBOL............................................................................................5 FOLHA DE CODIFICAO COBOL.....................................................................................................8 AS DIVISES DO COBOL........................................................................................................................9 IDENTIFICATION DIVISION..........................................................................................................9 CLUSULA COMMON ........................................................................................................................9 CLUSULA INITIAL ...........................................................................................................................9 ENVIRONMENT DIVISION...................................................................................................................11 CONFIGURATION SECTION........................................................................................................11 SOURCECOMPUTER.....................................................................................................................11 OBJECTCOMPUTER......................................................................................................................11 SPECIAL NAMES...........................................................................................................................11 INPUTOUTPUT SECTION.............................................................................................................12 DATA DIVISION.......................................................................................................................................13 FUNES DA DATA DIVISION..........................................................................................................13 ESTRUTURA GERAL DA DATA DIVISION............................................................................................13 FILE SECTION...............................................................................................................................13 RECORDING MODE......................................................................................................................15 RECORD DESCRIPTION...............................................................................................................15 CLUSULA OCCURS....................................................................................................................16 CLUSULA REDEFINES...............................................................................................................16 WORKINGSTORAGE SECTION....................................................................................................18 ITENS INDEPENDENTES NA WORKINGSTORAGE SECTION..................................................19 ITENS DE GRUPO NA WORKING-STORAGE SECTION............................................................21 NOMES CONDICIONAIS...............................................................................................................21 CLUSULA PICTURE...................................................................................................................22 PICTURES DE EDIO.................................................................................................................23 CLUSULA BLANK WHEN ZERO...............................................................................................24 REGRAS DE ALINHAMENTO......................................................................................................25 PROCEDURE DIVISION........................................................................................................................25 SUBDIVISES DA PROCEDURE..................................................................................................25 COMANDOS DO COBOL.......................................................................................................................26 OPEN..............................................................................................................................................26 CLOSE............................................................................................................................................26 READ..............................................................................................................................................27 WRITE............................................................................................................................................27 IF/ELSE...........................................................................................................................................29 AND E OR.......................................................................................................................................30 INITIALIZE....................................................................................................................................30 INSPECT.........................................................................................................................................32 MOVE.............................................................................................................................................34 MOVE NUMRICO........................................................................................................................34 MOVE ALFANUMRICO..............................................................................................................35 MOVE CORRESPONDING (CORR)...............................................................................................35 MOVE ALL.....................................................................................................................................35 PERFORM.......................................................................................................................................37 REWRITE.......................................................................................................................................38 STOP RUN......................................................................................................................................39 OPERADORES ARITMTICOS.....................................................................................................40 ADD................................................................................................................................................40

SUBTRACT.....................................................................................................................................40 MULTIPLY.....................................................................................................................................41 DIVIDE...........................................................................................................................................42 COMPUTE......................................................................................................................................42 OPCO ROUNDED........................................................................................................................43 CLUSULA ON SIZE ERROR.......................................................................................................43 CONTINUE.....................................................................................................................................44 DELETE..........................................................................................................................................44 DISPLAY........................................................................................................................................44 EVALUATE....................................................................................................................................45 ACCEPT..........................................................................................................................................47 MANIPULAO DE TABELAS............................................................................................................49 INDEXADORES.............................................................................................................................55 SEARCH.........................................................................................................................................55 PESQUISA SEM A INSTRUO SEARCH:..................................................................................................56 PESQUISA COM INSTRUO SEARCH:....................................................................................................56 SEARCH.........................................................................................................................................57 SET..................................................................................................................................................57 START............................................................................................................................................57 STRING...........................................................................................................................................58 UNSTRING.....................................................................................................................................58 SORT...............................................................................................................................................59 CLUSULA ASCENDIG/DESCENDING.......................................................................................60 INPUT PROCEDURE:RELEASE....................................................................................................60 OUTPUT PROCEDURE: RETURN.................................................................................................60 SORT...............................................................................................................................................60 LINKAGE SECTION......................................................................................................................66 CALL ESTTICO...........................................................................................................................67 BY REFERENCE.................................................................................................................................67 BY CONTENT......................................................................................................................................67 CALL DINMICO...............................................................................................................................68 PASSAGEM DE PARAMETROS PELA JCL......................................................................................70 COMPILAO/LINKEDIO..............................................................................................................71 EXECUO DO PROGRAMA..............................................................................................................72 NOVIDADES NO COBOL II...................................................................................................................73 NOVIDADES NO COBOL II...................................................................................................................73

INTRODUO
O COBOL (Common Business Oriented Language) uma linguagem de programao de alto nvel, projetada para aplicaes comerciais. O objetivo do COBOL oferecer una linguagem de programao que atenda aos seguintes requisitos: Independncia de tipo de equipamento Facilidade de aprendizado Boa documentao de programas.

Exemplo de um programa COBOL


Em primeiro lugar, ser til a apresentao de um programa completo. Queremos com isso dar uma idia de como um programa COBOL feito. Trata-se de um programa simples, entretanto com os elementos necessrios a programao cobol. 1 67A B 000010 IDENTIFICATION DIVISION. 000020 PROGRAM-ID. EX01. 000030* 000040 ENVIRONMENT DIVISION. 000050* 000060 CONFIGURATION SECTION. 000070* 000080 SOURCE-COMPUTER. IBM. 000090 OBJECT-COMPUTER. IBM. 000100* 000110 SPECIAL-NAMES. 000120 DECIMAL-POINT IS COMMA. 000130* 000140 INPUT-OUTPUT SECTION. 000150 FILE-CONTROL. 000160 SELECT ENTRADA ASSIGN TO ARQ1. 000170 SELECT RELATASSIGN TO ARQ2. 000180* 000190 DATA DIVISION. 000200* 000210 FILE SECTION. 000220* 000230 FD ENTRADA 000240 LABEL RECORDS STANDARD 000250 RECORDING MODE IS F 000260 BLOCK CONTAINS 1720 CHARACTERS. 000270* 000280 01 RG001E. 000290 03 RG001E-CODIGO PIC 9(005). 000300 03 RG001E-NOME PICX(030). 000310 03 FILLER PICX(049). 000320* 000330 FD RELAT 000340 BLOCK 0 000350 LABEL RECORDS OMITTED. 000360* 000370 01 RG002S PIC X(133). 000380* 000390 WORKING-STORAGE SECTION.
5

000400* 000410 77 000420 77 000430* 1

CH-FIM CT-LINHA LD01. 03 FILLER 03 FILLER 03 LD01-CODIGO 03 FILLER 03 LD01-NOME 03 FILLER LC01. 03 FILLER 03 FILLER R E L A C A O D E 03 FILLER

PIC X(003) VALUE NO. PIC 9(002) COMP-3 VALUE 99. PIC X(001) VALUE SPACES. PIC X(030) VALUE SPACES. PIC Z9.999 VALUE ZEROS. PIC X(032) VALUE SPACES. PIC X(030) VALUE SPACES. PIC X(034) VALUE SPACES. PIC X(033) VALUE SPACES. PIC X(065) VALUE N O M E S D A E M P R E S A. PIC X(035) VALUE SPACES.

* 1

* PROCEDURE DIVISION. * 0-PRINCIPAL SECTION. PERFORM 1-INICIO PERFORM 2-PROCESSO UNTIL CH-FIM EQUAL SIM PERFORM 3-FIM STOP RUN. * 1-INICIO SECTION. OPEN INPUT ENTRADA OUTPUT RELAT PERFORM 11-LER-ENTRADA IF CH-FIM EQUAL SIM DISPLAY ARQUVO DE ENTRADA VAZIO. * 11-LER-ENTRADA SECTION. READ ENTRADA AT END MOVE SIM TO CH-FIM. * 2-PROCESSO SECTION. PERFORM 21-IMPRIMIR-RELAT PERFORM 11-LER-ENTRADA. * 21-IMPRIMIR-RELAT SECTION. IF CT-LIN GREATER 30 PERFORM 211-FAZER-CABECALHO. MOVE RG001E-CODIGO TO LD01-CODIGO MOVE RG001E-NOME TO LD01-NOME WRITE RG002S FROM LD01 AFTER ADVANCING 2 ADD 1 TO CT-LINHA. * 211-FAZER-CABECALHO SECTION. WRITE RG002S FROM LC01 AFTER PAGE
6

MOVE ZEROS TO * 3-FIM SECTION. CLOSE ENTRADA RELAT.

CT-LINHA.

Folha de codificao COBOL


No passado os programadores COBOL escreviam seus programas em formulrios especiais denominados folhas de codificao COBOL. Hoje, com o uso de terminais tais formulrios entraram em desuso, porm as regras de distribuio dos comandos nas linhas de programas se mantm at os dias atuais. Valendo essas regras para codificao de um programa COBOL. Basicamente a rea para edio de um programa COBOL dispe de 72 colunas; as colunas entre 73 a 80 so destinadas identificao do programa. As demais colunas possuem as seguintes finalidades:

COLUNAS DE 1 a 6
Usadas para numerar as linhas de um programa. A numerao em ordem crescente. Opcionalmente podem deixar de ser preenchidas.

COLUNA 7
usada para um "hfen", que significa continuao de literais no numricos, e o smbolo "*" usado para comentrios.

COLUNA 8 a 72
Usadas para sodas as entradas do programa. Note no exemplo que a coluna 8 tem a letra A e a coluna 12 tem a letra B. Estas so as margens. Algumas entradas devem comear na margem A, outras na margem B. Os seguintes itens devem ser iniciados na margem A: Ttulos das divises Ttulos de sees Ttulos de pargrafos Cabealhos de entrada nas descries de arquivos.

AS DIVISES DO COBOL
Um programas COBOL sempre formado par 4 partes principais chamadas DIVISIONS, na seguinte ordem: IDENTIFICATION, ENVIRONMENT, DATA e PROCEDURE. No incio de cada uma delas existe uma declarao especial do COBOL chamada cabealho de diviso.

IDENTIFICATION DIVISION
a menor e mais simples diviso de um programa COBOL. usada para identificar o programa. Ela no possui sees, ao invs disso consiste de pargrafos. Formato: {IDENTIFICATION [PROGRAM-ID.] [AUTHOR. ] [INSTALATION.] [DATE-WRITTEN.] [DATE-COMPILED.] [SECURITY.] [REMARKS.] / ID DIVISION}. nome do programa (COMMON/INITIAL) nome do autor. local de uso. data em que foi escrito o programa. data em que o programa foi compildado. comentrio sobre segurana. comentrios gerais sobre o programa.

Por ser o nome de uma diviso, a IDENTIFICATION DIVISION codificada na margem A. Os nomes dos pargrafos tambm so codificados na margem A, e cada um deles seguido de um ponto final. A nica entrada obrigatria na IDENTIFICATION DIVISION o PROGRAM-ID. O nome que segue o PROGRAM-ID deve ser codificado na margem B. Este nome deve conter no mximo 30 caracteres (letras, dgitos e hfens), mas os 8 primeiros so os que realmente identificam o programa ao computador.

Clusula COMMON
Usada somente em subprogramas (NESTED PROGRAMS programas aninhados). Com a clusula COMMON este programa pode ser chamado por qualquer outro NESTED SUBPROGRAM. (Ver NESTED PROGRAMS no captulo de novidades do COBOL II). Sem a clusula COMMON, este programa s pode ser chamado pelo programa PAI na hierarquia NESTING.

Clusula INITIAL
9

Toda vez que o programa chamado, os campos da WORKING STORAGE aparecem inicializados. Itens com VALUE so posicionados no valor especificado e controles de PERFORM e GO TOs so posicionados no estado inicial e arquivos internos so fechados.

10

ENVIRONMENT DIVISION
As funes da ENVIRONMENT DIVISION so descrever as caractersticas do computador a ser utilizado e definir os arquivos usados no programa, podendo tambm descrever tcnicas e controles especiais para entrada ou sada de dados. Esta diviso composta de duas sees: - Configurao - Entrada e sada CONFIGURATION SECTION INPUT-OUTPUT SECTION

CONFIGURATION SECTION
A seo de configurao fornece informaes sobre o computador e dividida em trs pargrafos: SOURCE -COMPUTER OBJECT-COMPUTER SPECIAL-NAMES Tanto a seo de configurao como os pargrafos a ela associados so opcionais; os pargrafos SOURCE-COMPUTER e OBJECT-COMPUTER so tratados como comentrios.

SOURCE-COMPUTER
Descreve em qual computador o programa fonte ser compilado, e apenas documentacional, sendo tratado como comentrio pelo compilador COBOL.

OBJECT-COMPUTER
Descreve o computador no qual o programa objeto ser executado.

SPECIAL NAMES
Neste pargrafo podem-se definir tcnicas especiais para a programao, como, por exemplo, a alterao da simbologia padronizada pela linguagem. Apresenta o seguinte formato: SPECIAL-NAMES. [nome-de-funo IS nome-simblico] [DECIMAL-POINT IS COMMA].

11

Os nomes de funes vlidos so: SYSIPT SYSPUNCH SYSLST C01 a C12 CSP CONSOLE (Controles de Canal) (Supresso de espao)

Os nomes SYSIPT (leitora de cartes), SYSPUNCH (perfuradora de cartes), SYSLST (impressora) e CON SOLE podem ser associado s a nomes simblicos (definidos pelo programador) para serem utilizados nos comandos ACCEPT e DISPLAY. Os nomes C01 a C12, e CSP se referem aos canais de controle de impresso. A clusula DECIMAL-POINT IS COMMA inverte a funo do ponto decimal (usado nos pases anglo-saxnicos) para vrgula, nos literais numricos e campos numricos editados.

INPUT-OUTPUT SECTION
A seo de entrada e sada define os arquivos utilizados pelo programa COBOL, assim como efetua as relaes entre o programa e o equipamento da mquina. Ela est dividida em dois pargrafos: FILE-CONTROL I-O CONTROL (no ser comentada)

FILE-CONTROL
neste pargrafo que cada arquivo selecionado e designado a uma unidade de entrada ou saida. Aqui so usadas as seguintes clusulas, que devem ser codificadas a partir da margem B: SELECT nome-do-arquivo ASSIGN TO ddname-do-arquivo (JCL) [ORGANIZATION {SEQUENTIAL/ INDEXED/ RELATIVE}] [ACCESS MODE {SEQUENTIAL/ RANDOM/ DYNAMIC}] [RECORD KEY nome-do-campo-chave] [FILE STATUS nome-do-campo para receber cdigo de retorno]. Na clusula SELECT determinada a organizao e o modo de acesso do arquivo. A organizao poder ser seqencial, indexada ou relativa e o modo de acesso pode ser seqencial, direto (randmico) ou ambos (dinmico), se a organizao e o acesso no forem especificadas admite-se como default seqencial para ambos. Neste caso, os registros sero armazenados no dispositivo designado na ordem em que forem processados, um aps o outro e sero acessados tambm na ordem em que foram armazenados.

12

DATA DIVISION
a diviso do COBOL onde codificamos os comandos de definio e especificao dos arquivos, registros de dados e reas de trabalho. formada de duas sees principais a FILE SECTION e a WORKING-STORAGE SECTION.

FUNES DA DATA DIVISION


So especificaes da FILE SECTION: - Definir nome, tamanho e tipo de todos arquivos usados pelo programa. - Definir nome, tamanho, tipo e demais caractersticas dos locais de memria onde cada registro ser lido ou formatado (nvel 01). - Definir o nome, tipo, tamanho e demais caractersticas dos campos e sub-campos de cada registro (nveis 02 a 49). So especificaes da WORKING-STORAGE SECTION: - Definir nome, tipo, tamanho e demais caractersticas das reas de trabalho utilizadas pelo programa.

ESTRUTURA GERAL DA DATA DIVISION


DATA DIVISION. FILE SECTION. FD <descrio do arquivo-1> 01 < descrio dos registros do arquivo-1> . . . FD <descrio do arquivo-N> 01 <descrio dos registros do arquivo-N> Pua especificar um arquivo, utilizando COBOL, devemos considerar as seguintes etapas: - ENVIRONMENT DINVISION - DATA DIVISION - Clusula SELECT - Clusula FD - nvel 01 descrio do registro.

Cada arquivo definido atravs da clusula SELECT deve ter sue respectiva clusula FD.

FILE SECTION
13

Funo: Descrever aspectos gerais dos arquivos. - Nome - Quantidade de registros lgicos por bloco - Tipos de identificao - Nome dos registros - Quantidade de caracteres/bytes por registro lgico - Formato de gravao (fixo, varivel) FILE SECTION. FD <nome-do-arquivo> [ BLOCK CONTAINS [inteiro-1 TO] inteiro-2 { CHARACTERS / RECORDS}] [ RECORDS CONTAINS [inteiro-3 TO] inteiro-4 CHARACTERS] [ RECORDING MODE IS {F / V /U}] LABEL RECORDS {STANDARD/OMITTED}

BLOCK CONTAINS
Para um melhor aproveitamento do espao em disco e para aumentar a velocidade de processamento dos arquivos contidos em discos ou fitas costume-se blocar os registros . Ao blocar, fez-se uma distino entre registro lgico, processado um por vez pelo programa e um registro fsico, isto , a unidade de informao transferida para um dispositivo de entra/sada. Existem trs possibilidades: 1- Arquivo no blocado Neste caso a clusula BLOCK CONTAINS omitida do pargrafo FD. 2- Blocos de comprimento fixo Utilize: BLOCK CONTAINS inteiro-2 CHARACTERS ou BLOCK CONTAINS inteiro-2 RECORDS 3- Blocos de comprimento varivel Ocorre quando os registros lgicos de um arquivo so de tamanho diferentes. Utilize: BLOCK CONTAINS inteiro-1 TO inteiro-2 CHARACTERS ou RECORDS CONTAINS inteiro-1 TO inteiro-2 CHARACTERS

RECORDS CONTAINS

uma clusula opcional porque o compilador, a partir de um nivel-01 da descrio do registro, pode determinar seu comprimento.
14

LABEL RECORDS
Label so registros que opcionalmente so criados no inicio e no final de arquivos em disco e fita. Estes registros no so manuseados pelo programa e contm informaes de identificao do arquivo. OPO OMITTED - Especifica que o arquivo no contm LABEL RECORDS. Deve ser especificado para relatrios. OPO STANDARD - Especifica que o arquivo tem LABEL RECORDS, no formato padro.

RECORDING MODE
Especifica o formato dos registros Fixo ou Varivel.

RECORD DESCRIPTION
Depois de definirmos um arquivo por uma FD, seguem-se as entradas RECORD DESCRIPTION para cada registro do arquivo. Ela vai indicar que itens aparecem no registro, a ordem em que eles aparecem e como esses itens so relacionados entre si. Um nome de registro codificado no nvel 01. Qualquer campo de dado de um registro codificado em nvel subordinado a 01 (podem ser de 02 a 49). Exemplo: NOME DEPTO DIVISO SEO 9(002) 9(003)
PIC PIC PIC PIC PIC X(030). 9(002). 9(003). 9(009)V99. X(038).

SALRIO

FILLER

X(030)
01

9(009)V99

X(038)

RG00lE. 03 RG00lE-NOME 03 RG00 lE-DEPTO. 05 RG00lE-DIVISAO 05 RG00lE-SECAO 03 RG00lE-SALAR10 03 FILLER

item elementar - Item que no tem subdiviso (nome, diviso, seo e salrio). item de grupo - Item que sofre subdivises (RGOOlE, depto).

USAGE
Especifica a representao interna que deve ser utilizada para um item de dado. muitas vezes omitida porque USAGE DISPLAY default, e freqentemente o mais usado.

USAGE IS DISPLAY

15

O item de dado representado no cdigo de caracteres do sistema de computador (EBCDIC ou ASCII), no qual cada caracter alfanumrico representado por um cdigo binrio que requer um byte de memria.

USAGE IS COMPUTACIONAL (COMP)


Representao do COBOL para itens numricos a ser armazenados em formato binrio puro, usado em clculos. A tabela abaixo fornece a quantidade de bytes ocupados por nmeros de dgitos na PICTURE. N de dgitos na Picture 1a4 5a9 10 a 18 Ocupao na memria 2 bytes 4 bytes 8 bytes

USAGE IS COMP-3
Cada item de dado armazenado na memria no formato decimal compactado. H dois dgitos por byte, sendo que o sinal fica definido pelo ltimo meio byte mais esquerda.

CLUSULA OCCURS
Formato para tabelas unidimensionais: nmero-nvel nome-dado OCCURS inteiro TIMES. A clusula OCCURS pode ser utilizada em qualquer nvel com exceo dos nveis 01 e 77. Exemplo:
FILE SECTION .................................... 01 RG001E. 03 NUMERO PIC 9(006). 03 NOME PIC X(020). 03 CURSO PIC X(002). 03 DISCIPLINA OCCURS 5 TIMES. 05 MATERIA PIC X(010). 05 NOTA PIC 9(002)V99.

Disciplina uma tabela de 5 elementos formado por matria e nota. Cada entrada da tabela ter 10+4 = 14 bytes de comprimento, e a tabela toda ter 14 * 5 = 70 bytes.

CLUSULA REDEFINES
utilizada para fornecer uma descrio alternativa para um item de dado de grupo, ou elementar, isto , fazer com que um campo posse ser referenciado por mais de um nome. Formato:
16

nmero-de-nvel data-name2 REDEFINES data-namel Obs: nmero de nvel do data-namel dever ser o mesmo do data-name2 No dever ser usado no nvel 01 da FILE SECTION pois a redefinio automtica. As entradas que sero redefinidas no podem conter a clusula OCCURS.

Exemplo: 01 REG-CLIENTE. 03 NUM-CTA. 05 NOM-AGE 05 TIPO-CTA 05 NUM-CTA 05 DIGITO 03 NOME 03 ENDERECO 03 TEL 03 FONE REDEFINES TEL 03 FILLER

PIC 9(004). PIC 9(002). PIC 9(006). PIC 9(001). PIC X(030). PIC X(030). PIC 9(007). PIC X(007). PIC X(013).

A clusula REDEFINES fez com que os campos TEL e FONE ocupem o mesmo espao de memria. Esse contedo tem duas interpretaes diferentes: TEL numrico ao passo que FONE alfanumrico. Outro exemplo: 01 REG-EMPRESA. 05 DIV-DEPTO PIC 9(004). 05 DIV-DEPTO-RED REDEFINES DIV-DEPTO. 07 DIV PIC 9(002). 07 DEPTO PIC 9(002). Neste exemplo, existe um nico campo no registro que poder ser utilizado como DIV-DEPTO e contm o valor da diviso e do departamento em um nico campo, ou poder ser utilizado como DIV e DEPTO separadamente. o mesmo espao de memria sendo referenciado de dois modos diferentes.

17

WORKING-STORAGE SECTION
A DATA DIVISION como um todo, contm sodas as reas de armazenamento definidas a serem alocadas para o processamento. A WORKING-STORAGE SECTION contm todos os campos que no pertenam s entradas ou s sadas, mas que so necessrios ao processamento. Quaisquer constantes, totais intermedirios, ou reas de trabalho que no faam parte dos arquivos e que afetem o processamento so alocados na WORKING-STORAGE SECTION. Esta seo pode conter duas categorias de campos: itens independentes e itens de grupo que requeiram subdiviso.

Os itens independentes, definidos na WORKING-STORAGE SECTION, so campos individuais, cada um executando uma funo independente e no relacionada a qualquer outro item. A WORKING STORAGE SECTION, como todas as sees, codificada na margem A. Esta entrada vem aps a FILE SECTION e sodas as sues descries, itens independentes recebem o nvel 77 e tambm so codificados na margem A. Os nomes atribudos aos itens desta seo obedecem s regras de formao de nomes criados pelo programador. Todos os itens independentes devem ter sues clusulas PICTURE correspondentes. Indicamos o formato ou o modo de um campo na WORKING-STORAGE como especificado anteriormente: X denota campos alfanumricos 9 denota campos numricos A denota campos alfabticos Exemplo: WORKING-STORAGE SECTION. 77 TOTAL-INTERMEDIARIO PIC 9(005)V99 COMP-3. 77 CONSTANTE-1 PIC X(004). 77 FLD-A PIC A(003). Os itens independentes na WORKING-STORAGE SECTION so geralmente inicializados, ou seja, a eles so dados valores iniciais pela clusula VALUE. Esta clusula no deve ser usada na FILE SECTION da DATA DIVISION. importante recordar que os computadores no limpam automaticamente a memria, quando lem um novo programa. Uma rea que especificada na DATA DIVISION tem um valor indefinido quando comea a execuo de um programa. A menos que o programador indique um valor inicial para o campo, no se pode considerar que o campo esteja limpo com brancos ou zeros. Para nos certificarmos do contedo dos campos da WORKING-STORAGE SECTION, podemos inicializar um tem independente usando a clusula VALUE.

Exemplo 77 TOTAL 77 CONSTANTE-1 PIC 9(003) VALUE ZERO. PIC X(004) VALUE SPACES.

Uma clusu1a VALUE no precisa ser especificada para um item independente. Porm se omitida, nada se pode afirmar sobre o contedo inicial do campo.

ITENS INDEPENDENTES NA WORKING-STORAGE SECTION


1- Nvel 77, codificado na margem A indica ao computador que um item de dado independente vai ser definido. 2- Um nome dado pelo programador define o campo. 3- O tamanho do campo, seu formato e modo de armazenamento so definidos pela clusula PICTURE (PIC). 4- Um valor inicial pode ser armazenado no campo atravs da clusula VALUE. A clusula VALUE conter uma constante literal ou constante figurativa (ZERO, ZEROS, ZEROES, SPACE, SPACES, LOW-VALUES, HIGH-VALUES) para ser colocada no campo. Deve estar no mesmo modo que a clusula PICTURE. Se a PICTURE indica um campo numrico, o valor deve ser um literal numrico ou ZERO. Exemplo: 77 TOTAL 77 CONSTANTE-X 77 FLDA PICTURE 9(004) VALUE ZERO. PIC 9(004) VALUE 76. PIC 9(002)V9(2) VALUE 12.34.

Os literais numricos no podem exceder a 18 dgitos de comprimento. Nesse caso, o VALUE de um item numrico na WORKING-STORAGE SECTION no pode ter mais de 18 dgitos. Uma clusula VALUE no numrica, como um literal no numrico dever aparecer entre aspas e contm um mximo de 120 caracteres. Exemplo: 77 CH-AUX PIC X(003) VALUE 'NAO'.

Caso haja necessidade de continuar a clusula VALUE de uma linha para outra devem ser obedecidas as seguintes regras: 1- Comear o literal entre aspas. 2- Continuar o literal at o fim da linha (no feche com aspas) 3- Coloque um trao (-) na posio de continuao da linha segrunte (coluna 7). 4- Continue o literal na margem B da prxima linha, comeando com aspas.

5- Termine o literal com aspas. Exemplo: 77 TITULO PIC X(080) VALUE 'DEMONSTRATIVO DE LUCROS PERDAS E 'GANHOS DO CONGLOMERADO BANESPA'.

ITENS DE GRUPO NA WORKING-STORAGE SECTION


Os itens de grupo podem ser armazenados na WORECING-STORAGE SECTION. Um item de grupo aquele que subdividido em dois ou mais itens elementares. Exemplo: Um nome de campo subdividido em primeiro e ltimo nome, um nome de data subdividido em dia. ms e ano, etc. Os itens de grupo na WORKING-STORAGE SECTION so codificados como registros no nvel 01. Todos os itens de grupo seguem os itens elementares de nvel 77 e so codificados na margem A, no nvel 01. Exemplo: WORKING STORAGE 77 TOTAL 77 CONST 77 SAVE-AREA 01 DATA-1. 03 DIA 03 FILLER 03 MES 03 FILLER 03 ANO SECTION. PIC 9(005) VALUE ZEROS. PIC X(004) VALUE AAAA. PIC X(003) VALUE SPACES. PIC 9(002) VALUE ZEROS. PIC X(001) VALUE /. PIC 9(002) VALUE ZEROS. PIC X(001) VALUE /. PIC 9(004) VALUE ZEROS.

A WORKING-STORAGE SECTION consiste de duas partes. Todos os itens independentes aparecem no nvel 77 e so seguidos pelos itens de grupo que aparecem no nvel 01. Ambas as entradas 77 e 01 so codificados na margem A, os nveis 02 a 49, se usados so codificados na margem B.

NOMES CONDICIONAIS
Nomes condicionais so nomes fornecidos pelo programador na DATA DIVISION. um nome condicional d nome a um valor especfico que um item de dado pode assumir. Na DATA DIVISION codificado no nvel especial 88. Todas as entradas de nvel 88 so nomes condicionais que indicam valores de itens de dados especficos. Exemplo: 03 MARITAL-STATUS 88 SOLTEIRO 88 CASADO 88 OUTROS 88 STATUS-INVALIDO PIC 9. VALUE 0. VALUE 1. VALUE 2. VALUE 3 THRU 9.

Supondo que o valor 0 associado ao campo MARITAL-STATUS indique o estado civil solteiro, o valor 1 associe o estado civil casado, o valor 2 associe outros estados civis e valores de 3 a 9 associe estado civil invlido poderemos nos referir a esses nomes para identificar o valor contido no campo MAR1TAL-STATUS.

Um nome condicional sempre codificado no nvel 88 e s tem uma clusula VALUE associada a ele. J que um nome condicional no o nome do campo de dados, ele no conter uma clusula PICTURE. Podendo estar associado a qualquer item elementar. Formato: 88 nome-de-condico { VALUE IS/ARE} {[literal-l] [literal-1 {THROUGH/THRU } literal-2] [literal-3 {THROUGH/THRU} literal-4]} Os nomes condicionais so definidos na DATA DIVISION para facilitar o processamento na PROCEDURE DIVISION.

CLUSULA PICTURE
Uma clusula PICTURE estar sempre associada a itens elementares de dados fornecendo as caractersticas do campo associado. Existem trs tipos de campos de dados: - Alfabticos (A) - Alfanumricos (X) - Numrico (9) - um campo que contm letras ou brancos. - um campo que contm qualquer caractere vlido. - um campo que contenha somente nmeros e os sinais de positivo (+) ou negativo (-).

Alm do tipo de dado, torna-se necessrio informar o tamanho desse campo, suponha que tenhamos que especificar um campo numrico de nome FLDA, que dever armazenar um nmero de at 4 posies. podemos expressar este campo das seguintes formas: 77 OU 77 FLDA PIC 9999. Se a este nmero estiver associado seu sinal devemos express-lo como segue: 77 OU 77 FLDA PIC S9999. FLDA PIC S9(004). FLDA PIC 9(004).

exceo da palavra reservada do COBOL, FILLER, todos os outros nomes de dados devem ser nicos, isto , no podemos usar o mesmo nome para campos diferentes. Um campo numrico poder ter valores no inteiros, para que o computador posse interpretar isso, deveremos informar o tamanho da parte inteira e o tamanho da parte decimal. 77 FLDB PIC S9(003)V99 COMP-3 VALUE ZEROS.

OU 77 FLDB PIC S999V99 COMP-3 VALUE ZEROS.

No exemplo acima definimos um item elementar numrico com sinal de 3 posies inteiras e duas posies decimais no formato decimal compactado e inicializado com valor zero. A vrgula definida ('V') no ocupa posio de memria, para o exemplo o campo FLDB ocupa 3 bytes de memria.

PICTURES DE EDIO
As seguintes funes so consideras de edio: Eliminao dos zeros esquerda. Impresso do ponto decimal onde o alinhamento decimal est implcito. Impresso do sinal de dlar, dos pontos e da vrgula Impresso de asteriscos para proteger a verificao. Impresso de sinais de mais ou menos para indicar o valor do campo. Impresso de espaos e zeros como separadores de campos.

ELIMINAO DE ZEROS ESQUERDA


O smbolo de edio "Z" usado para suprimir zeros no significativos e substitui-los por brancos. O uso combinado de "Z" e "9" num item de relatrio permitido desde que todos os "Z" precedam quaisquer "9". Os zeros s podem ser suprimidos se eles precedem valores significativos. Exemplo: CAMPO EMISSOR PICTURE CONTEDO 9(3) 109 9(3) 007 9(3) 000 9(3) 000 9(4) 0002 CAMPO RECEPTOR PICTURE RESULTADO EDITADO ZZZ 109 ZZZ 7 ZZZ ZZ9 0 ZZ99 02

IMPRESSO DOS PONTOS DECIMAIS ONDE O SEU ALINHAMENTO EST IMPLCITO CAMPO EMISSOR PICTURE CONTEDO 99V99 0238 99V99 0003 99V99 0005 CAMPO RECEPTOR PICTURE RESULTADO EDITADO ZZ.ZZ 2.38 ZZ.99 .03 Z9.99 0.05

IMPRESSO DO SINAL DE DLAR, DOS PONTOS E DA VRGULA CAMPO EMISSOR


PICTURE CONTEDO

CAMPO RECEPTOR
PICTURE RESULTADO EDITADO

9(4)V99 99V99 9(5)V999

381234 0500 00000456

$9.999,99 $ZZ,99 $ZZ.ZZ9.999

$3.812,34 $ 5,00 $ 0.456

IMPRESSO DE ASTERISCOS COMO CARACTERE DE PROTEO CAMPO EMISSOR


PICTURE CONTEDO

CAMPO RECEPTOR
PICTURE RESULTADO EDITADO

9(3)V99 9(3)V99 9(4)V99

12345 01234 036278

$***,99 $***,99 $*.***,99

$123,45 $*12,34 $**362,78

IMPRESSO DOS SINAIS DE MAIS OU MENOS PARA INDICAR O VALOR DO CAMPO CAMPO EMISSOR
PICTURE CONTEDO

CAMPO RECEPTOR
PICTURE RESULTADO EDITADO

S999 123-999 -123 S999 1239991239(3) 123 -999 123 S9(3) 123 -999 123 S99V99 0234ZZ.992.34S999 123 +999 +123 S999 123 999 123+ S999 123+999 -123 999 123 +999 +123 IMPRESSO DE ESPAOS OU ZEROS COMO SEPARADORES DE CAMPO: CAMPO EMISSOR
PICTURE CONTEDO

CAMPO RECEPTOR
PICTURE RESULTADO EDITADO

9(9) X(10) X(11) 9(6) 9(3)

089743456 SAOPAULO ETERNAMENTE 150194 123

999B99B9999 XXXBX(7) X(4)BX(2)BX(5) 99B99B99 99900

089 74 3456 SO PAULO ETER NA MENTE 15 01 94 12300

CLUSULA BLANK WHEN ZERO


BLANK WHEN ZERO usado para suprimir zeros substituindo-os por brancos.

Exemplo: 77 FLDC PIC 9(10)BLANK WHEN ZERO.

REGRAS DE ALINHAMENTO
A regra bsica de alinhamento de dados de um item elementar depende da categoria do item receptor. RECEPTOR NMERICO O dado alinhado da posio onde o ponto decimal assumido. Pode haver truncamento direita e/ou esquerda do ponto decimal quando o receptor for menor que o emissor. Quando o receptor for maior, pode haver preenchimento com zeros direita e/ou esquerda do ponto decimal. Se o ponto decimal no for definido explicitamente, o ponto decimal assumido como se estivesse mais a direita do campo. RECEPTOR ALFANUMRICO O dado alinhado a partir do byte mais a esquerda. Se o receptor for menor que o emissor, os dados mais a direita do emissor sero truncados. Se o receptor for maior que o emissor, o receptor ser preenchido com espaos direita.

PROCEDURE DIVISION
a diviso do COBOL que contm sodas as instrues a serem executadas pelo computador. Toda lgica do programa est contida nestas instrues. nesta diviso, que o dado lido, processado e onde se produz a informao de sada.

SUBDIVISES DA PROCEDURE
- A PROCEDURE DIVISION est dividida em sees. Cada seo define uma rotina independente, em uma srie de instrues designadas para realizar uma funo especifica.

- Cada seo, subdividida em declaraes. Uma declarao uma instruo COBOL para o computador. Cada declarao, salvo no caso de testar uma condio comea com um verbo ou operao. - Uma declarao geralmente acaba com um ponto final, que deve ser seguido de pelo menos um espao em branco. Vrias declaraes podem ser escritas em uma linha de codificao COBOL, mas as palavras no podem ser divididas quando termina a linha. - Cada declarao pode tambm ser escrita em linhas separadas. A fim de que fique mais clara a apresentao, esta forma freqentemente a mais preferida. - Todas as declaraes so executadas na ordem em que so escritas, a menos que uma situao de desvio transfira o controle para alguma parte do programa. - Todas as declaraes na PROCEDURE DIVISION so codificadas na margem B. Somente os nomes de seo so escritas na margem A.

COMANDOS DO COBOL
OPEN
Antes que um arquivo de entrada ou sada posse ser lido ou gravado devemos primeiramente abrir o arquivo. Na linguagem COBOL isto feito atravs da declarao OPEN. FORMATO: INPUT arquivo-1 [arquivo-2...] OUTPUT arquivo-3 [arquivo-4...] OPEN I-O arquivo-5 [arquivo-6...] EXTEND arquivo-7 [arquivo-8...] O formato acima especifica que: - Um arquivo pode ser aberto para entrada (INPUT), sada (OUTPUT), entrada e sada (I-O) ou ainda para incluso de novos registros (EXTEND).

CLOSE
A instruo CLOSE encerra o processamento dos arquivos, de maneira geral, desfazendo tudo que foi feito pela instruo OPEN. Antes do final do programa, todos arquivos abertos (OPEN) devero ser fechados (CLOSE). FORMATO: CLOSE arquivo-1 {arquivo-2...} Os arquivos podero ser fechados individualmente ou coletivamente, e em qualquer ordem, podendo ser reaberto para processamento adicional.

Exemplos: 1) CLOSE ENTRADA SAIDA RELAT 2) CLOSE ENTRADA CLOSE SAIDA CLOSE RELAT As duas rotinas acima so equivalentes, porm a menos que os arquivos sejam fechados em diferentes partes do programa, o segundo mtodo considerado ineficiente.

READ
Depois que um arquivo de entrada foi aberto, pode ser lido. Uma declarao READ transmite um dado do dispositivo de entrada, alocado na ENVIRONMENT DIVISION para a rea de entrada de memria definida na FILE SECTION da DATA DIVISION. FORMATO: READ <nome-arquivo> [AT END <sentena-imperativa>] END-READ O nome do arquivo especificado na declarao READ aparece em trs outros lugares do programa. 1) Na clusula SELECT, indicando o nome e o dispositivo alocado para o arquivo. Se por exemplo, uma unidade de disco o dispositivo alocado, a declarao READ transmite o bloco de dados de entrada para a rea de entrada (buffer). 2) Na entrada FD, descrevendo o arquivo 3) Na declarao OPEN, que d acesso ao arquivo. A principal funo da declarao READ transmitir os dados para memria. A clusula AT END na declarao READ testa o fim dos dados de entrada. Uma declarao AT END junto com a declarao READ instrui o computador sobre o que fazer no caso de no haver mais dados para serem lidos.

WRITE
A instruo WRITE pega os dados acumulados na rea de sada da DATA DIVISION e os transmite para os dispositivos especificados na ENVIRONMENT DIVISION. Formato l: WRITE <nome-registro> [END-WRITE]

Deve ser notado um aspecto importante, embora os arquivos sejam lidos, ns gravamos registros. O nome do registro aparece no nvel 01 e geralmente subdividido em campos. A declarao WRITE <nome do registro> usada para criar todos os registros de sada do dispositivo alocado. Exemplo: WRITE RG00lS. OBS: RG001S o nome do registro definido na DATA DIVISION da FD nvel 01. Formato2: WRITE <nome-registro> [FROM nome-de dado] [END-WRITE] Atravs dessa declarao, o contedo de nome-de-dado, rea definida na WORKING-STORAGE SECTION, copiado para o buffer do arquivo de sada para gravao. Exemplo: FD 01 SAIDA BLOCK 0 LABEL RECORDS STANDARD. RGOOlS PIC X(133).

WORKING-STORAGE SECTION. 01 LC01. 05 FILLER PIC X(100) VALUE RELATORIO DE SAIDA'.

PROCEDURE DIVISION. WRITE RG00lS FROM LC01. Formato3:


WRITE <nome-registro> [{AFTER/BEFORE} ADVANCING inteiro LINES.] [END-WRITE]

Amplamente usado na edio de relatrios, a declarao WRITE acompanhada de AFTER/BEFORE utilizado para espacejamento entre linhas de impresso. Exemplo: WRITE RG00lS FROM LC01 AFTER ADVANCING 2 LINES. OU WRITE RG00lS FROM LC01 AFTER 2.

OBS: BEFORE - Imprime depois avana AFTER - Avana depois imprimi Formato4: WRITE <nome-registro> AFTER ADVANCING PAGE. [END-WRITE] Procedimento utilizado para controle de salto de pginas. Neste caso, ocorre o salto de pagina e o contedo do registro impresso.

IF/ELSE
Comando utilizado para comparao entre dois itens de dados, podendo ser alfanumrica ou algbrica, dependendo das definies de tads itens. OBS: 1- Na COMPARAO ALFANUMRICA, os dois itens so comparados byte-a-byte, da esquerda para direita. Se forem de tamanhos diferentes, o menor complementado com brancos direita (apenas para efeito da comparao) at se igualarem em tamanho. 2- Na COMPARAO ALGBRICA, os dois itens so comparados pelo valor algbrico que representam. 3- A COMPARAO ser ALFANUMRICA se um dos itens for um literal no numrico (literal entre aspas), um item de grupo, ou um item elementar PICTURE X ou A. Caso contrrio ser algbrica. Formato l: IF <identificador-l> { [NOT] {LESS/>} THAN <identificador-2>} { [NOT] { GREATER /< } THAN { [NOT] {EQUAL / = } TO {[NEXT SENTENCE/sentena imperative-1 [sentenca-imperativa2] ...} [ELSE {INEXT SENTENCE/sentena imperative-1 [sentenca-imperativa2] ...}] [END-IF] Formato2: IF <identificador-l> { IS [NOT] NUMERIC} {IS [NOT] ALPHABETIC} {[NEXT SENTENCE/sentena imperative-1 [sentenca-imperativa2] ...}] [ELSE {[NEXT SENTENCE/sentena imperative-1 [sentenca-imperativa2] ... }] [END-IF]

Um campo numrico consiste dos dgitos de 0 a 9, com ou sem sinal. Um campo alfabtico consiste dos caracteres A at Z e do "SPACE".

AND e OR
Os operadores AND e OR podero ser usados para compor condies. O operador AND tem precedncia sobre o operador OR, podendo a precedncia ser modificada atravs do uso de parnteses. IF A GREATER B OR B GREATER C AND C GREATER D < sentena imperativa>. IF A GREATER B OR (B GREATER C AND C GREATER D) <sentena imperativa>. Tabela AND e OR 1 Condio V V F F 2 Condio V F V F AND V F F F OR V V V F

INITIALIZE
A instruo INITIALIZE inicializa campos selecionados, com valores pr-determinados. Funcionalmente, ele equivalente a uma ou mais instrues MOVE. Regras da construo INITIALIZE:
A.

Se o identificador-1 / identificador-2 / for definido como um item elementar ou item de grupo, todas as operaes so executadas como se uma srie de MOVEs tivessem sido escritos, sendo que cada um tenha um item elementar como campo receptor. Entretanto, se a rea receptora for um item de grupo, com um item elementar dentro, somente ser afetado se ele pertencer categoria especificada na frase REPLACING. Se a frase REPLACING no for especificada, os itens elementares sero afetados como indicado na regra B. Todos os itens elementares, incluindo todas as ocorrncias de uma tabela dentro do grupo sero afetados com as seguintes excees: Index FILLER de itens de dados elementares Itens contendo uma clusula REFEFINES

B. SPACES est implicito como sendo emissor de campos alfabticos, alfanumricos e itens numricos editados. Zero est implicito como sendo emissor de campos numricos, numricos editados.

C. As regras referenciadas pelo identificador-1 / identificador-2 /... sero inicializados na ordem esquerda para a direita, na ordem e aparecimento de identifier-1 / identifier-2 / ... na instruo. Dentro de um grupo de campos receptores, os itens elementares so inicializados na ordem de suas definies dentro do grupo. Formato 1: INITIALIZE identifier-1 [identifier-2 . . . ] Exemplo: 01 WTG-GERAL-G. 03 WTG-GERAL OCCURS 2 TIMES. 05 WTB-ACUM PIC 9(005). 05 WTB-NOME PIC X(040). 05 WTB-VAL PIC 9(009)V99. 05 WTB-CEP PIC 9(008). 03 WRK-BRANCO PIC X(001). 01 WTG-AGENCIA. 03 WTG-AGEC OCCURS 2 TIMES. 05 WTB-NAGE PIC 9(004). 05 WTB-C OCCURS 3 TIMES. 07 WTB-CC PIC 9(004). 07 WTB-DADOS PIC X(015). PROCEDURE DIVISION. INITIALIZE WTB-GERAL-G WTB-AGENCIA. Obs.: Aps a execuo, as 2 tabelas sero inicializadas com zeros em campos numricos e SPACES em campos alfa. Formato 2: INITIALIZE identifier-1 [identifier-2 . . .] INITIALIZE Identifier-1 ALPHABETIC ALPHANUMERIC NUMERIC ALPHANUMERIC-EDITED NUMERIC-EDITED Identifier-3 DATA BY Literal1 Exemplo: [identifier-2]

REPLACING

01 WTG-AGENCIA. 03 WTG-AGEC OCCURS 2 TIMES. 05 WTB-NAGE PIC 9(004). 05 WTB-C OCCURS 3 TIMES. 07 WTB-CC PIC X(004). PROCEDURE DIVISION. INITIALIZE WTB-NAGE (1) REPLACING NUMERIC BY 1111. INITIALIZE WTB-NAGE (2) REPLACING NUMERIC BY 2222. INITIALIZE WTB-CC (1 1) REPLACING ALPHANUMERIC BY A. INITIALIZE WTB-CC (1 2) REPLACING ALPHANUMERIC BY B. Obs.: Aps a execuo, os campos sero inicializados conforme indicado.

INSPECT
A instruo INSPECT especifica que caracteres em um item de dados sero contados (TALLYING) ou substitudos (REPLACING) ou ambos. Poder ser contado a ocorrncia de um caracter especfico (zero, space, asterisco, etc) em um item de dados. Poder ser preenchido o todo ou parte de um item de dados com zeros ou spaces. Poder ser convertido caracteres de um COLLATING SEQUENCE para outra. As opes TALLYING ou REPLACING devem ser especificadas. Ambas tambm podem ser especificadas. Neste caso, todos os TALLYING sero executados antes de qualquer REPLACING ser executado. Formato: INSPECT Identifier-2 FOR [BEFORE AFTER [REPLACING CHARACTERS BY [BEFORE AFTER Identifier-5 Literal-3 INITIAL Identifier-6 Literal-4] Identifier-1 ALL LEADING CHARACTERS INITIAL [TALLYING] Identifier-3 Literal-1 Identifier-4 Literal-2]

ALL LEADING FIRST [BEFORE [AFTER IDENTIFIER-1

Identifier-5 BY Literal-3 INITIAL

Identifier-7 Literal-5] Identifier-6] Literal-4]

IDENTIFIER-1 o item a ser examinado. Pode ser um item elementar ou item de grupo com USAGE DISPLAY. Todos os identifiers, exceto o identifier-2 (campo de contagem), devem ser itens elementares alfabticos, alfanumricos ou numricos zonados. LITERAL Deve ser no-numrico e pode ser qualquer constante figurativa, exceto ALL literal. Exceto quando as opes BEFORE ou AFTER so especificadas, a inspeo se inicia com o caracter mais a esquerda do item inspecionado (identifier-1) e continua caracter-a-caracter at a posio mais a direita. Os operandos das seguintes opes so comparados da esquerda para a direita na ordem em que forem especificados na instruo INSPECT. TALLYING (LITERAL-1 ou IDENTIFIER-3...) - contando REPLACING (LITERAL-1 ou IDENTIFIER-5...) atualizando.

FOR ALL Indica que vai inspecionar um campo com um nico caracter.

FOR LEADING Indica que o campo a ser inspecionado comea com um identifier ou literal informado.

FOR CHARACTERS Indica que vai inspecionar todos os caracteres de um campo.

INITIAL Primeiro caracter definido de um campo.

Exemplo: INSPECT WRK-NUMBER

TALLYING WRK-NIVEL FOR ALL ZEROS AFTER INITIAL - REPLACING ALL ZEROS BY = AFTER INITIAL -

MOVE
Instruo atravs do qual o contedo de um item de dado copiado para outro ( s) item (itens) de dado(s). O campo origem no alterado pela execuo de uma instruo MOVE. O(s) campo(s) de destino(s) tem seu contedo original substitudo pelo contedo do campo de origem, o contedo original do(s) campo(s) de destino destrudo. Formato: MOVE {<tem-de~ado>/LITERAL} TO <identificador-2> [ <identificador-3> ...]. Exemplo: 01 WS-AREA. 03 AREA-A 03 AREA-B 03 AREA-C 03 AREA-D 1) 2) 3)
4)

PIC PIC PIC PIC

X(005) VALUE CAMPO. X(005). X(003). X(007). depois A = CAMPO depois B = CAMPO depois A = CAMPO depois B = CAM depois A = CAMPO depois B = CAMPObb depois depois depois depois A = CAMPO B = CAMPO C = CAM D = CAMPObb

MOVE AREA-A TO AREA-B

antes A = CAMPO B = ????? MOVE AREA-A TO AREA-C antes A = CAMPO antes B = ??? MOVE AREA-A TO AREA-D antes A = CAMPO antes B = ???????
MOVE AREA-A TO AREA-B AREA-C AREA-D

antes antes antes antes


5) MOVE SPACES TO AREA-A

A = CAMPO B = ????? C = ??? D = ???????

antes A = CAMPO

depois A = bbbbb

MOVE NUMRICO
1) Quando se move um campo transmissor completo ou uma poro do campo transmissor para o campo receptor, o movimento da direita para a esquerda. Todas as posies mais esquerda no preenchidos do campo receptor so preenchidos com zeros.

2) Quando o valor envolver decimais, o movimento da parte decimal da esquerda para direita, comeando do ponto decimal implcito. As posies decimais no preenchidas (mais direita) so preenchidas com zeros.

MOVE ALFANUMRICO
Num movimento alfanumrico, o dado transmitido do campo transmissor para o campo receptor da esquerda para a direita. As posies de mais baixa ordem do campo receptor, que no esto preenchidas so substitudas por espaos.

MOVE CORRESPONDING (CORR)


Formato:
MOVE {CORRESPONDING/CORR} <tem-de-grupo> TO <tem-de-grupo2> [item-de-grupo3...]

A opo MOVE CORRESPONDING usada para substituir uma srie de instrues MOVE simples . Todos os campos no campo transmissor so movidas para os campos de mesmo nome no campo receptor. Todas as regras para operaes MOVE so tambm usadas para a opo MOVE CORRESPONDING. Exemplo: 01 DATA1. 03 MES 03 FILLER 03 DIA 03 FILLER 03 ANO 01 DATA2. 03 DIA 03 FILLER 03 MES 03 FILLER 03 ANO PIC PIC PIC PIC PIC 9(002) VALUE 7. X(001) VALUE '/'. 9(002) VALUE 23. X(001) VALUE '/'. 9(002)VALUE 94.

PIC 9(002). PIC X(001). PIC 9(002). PIC X(003) VALUE 19. PIC 9(002).

MOVE CORR DATA1 TO DATA2.

MOVE ALL
Formato: MOVE ALL <literal> TO <identificador-l> [ <identificador2> ....]

Preenche os campos receptores com o contedo da literal informada.

Exemplo: 77 FLDA PIC X(005). 77 FLDB PIC X(012). MOVE ALL 'X' TO FLDA MOVE ALL '-' TO FLDB Os contedos de FLDA e FLDB aps as instrues acima sero respectivamente XXXXXX e ------------.

PERFORM
Esta instruo permite desviar o programa para uma posio diferente daquela que normalmente executaria dentro da seqncia normal, executando uma seo inteira uma ou mais vezes. Formato 1: PERFORM <nome-seo> nome-seo o nome de uma SECTION da PROCEDURE DIVISION definida pelo programador. A instruo fez com que sodas as instrues existentes na section indicada sejam executadas na seqncia normal, aps o trmino da SECTION a seqncia normal das instrues reassumida na instruo imediatamente posterior instruo PERFORM. Formato 2: PERFORM <nome-seo> UNTIL <condio> A utilizao desta instruo fez com que a seo indicada seja executada at que a "condio" seja satisfeita. Formato 3: PERFORM <nome-seo-1> [ THROUGH/THRU] <nome-seo-2> Permite que n sees sejam executadas, desde nome-seo-1 at nome-seo-2

Formato 4: PERFORM <nome-seo-l> [THROUGH/THRU] <nome-seo-2> [INTEIRO/IDENTIFICADOR] TIMES. Faz com que sejam executados as sees de nome-seo-1 at nome-seo-2 tantas quantas forem o valor de identificador ou inteiro. Formato 5: PERFORM <nome-seo-l> [THROUGH/THRU] <nome-seo-2> [UNTIL <condia] . o mesmo caso do PERFORM anterior com a diferena da condio que at a "condio" ser satisfeita. Formato 6: PERFORM <nome-seo-l> [ [ THROUGH/THRU] <nome-seo-2>] [VARYING<nome-de-dadol> FROM {inteiro/nome-de-dado2} BY {inteiro2 / nome-de-dado3} [UNTIL <condio>] ]. Exemplo: PERFORM LER-ARQUIVO VARYING CONTADOR FROM 1 BY 1 UNTIL CONTADOR GREATER 10. A varivel CONTADOR inicializada de 1, a condio CONTADOR maior que 10 testada e se no for atendida, contador incrementado de 1. Esta seqncia se repetir at que a condio CONTADOR maior que 10 seja atendida. PERFORM IN-LINE PERFORM <nome-seo-l> [ [ THROUGH/THRU] <nome-seo-2>] END-PERFORM

REWRITE
A instruo REWRITE regrava logicamente um dado registro num arquivo de acesso direto. O arquivo de acesso direto associado a instruo REWRITE deve ser aberto no modo I-O.

Formato: REWRITE record-name1 [FROM identifier-1]

[INVALID KEY instruo-imperativa] [NOT INVALID KEY instruo-imperativa] [END-REWRITE]

STOP RUN
O comando STOP RUN instrui o computador para terminar o programa. Todos os programas devem terminar com uma declarao STOP RUN.

OPERADORES ARITMTICOS
Smbolos de operaes numricas usadas no COBOL: - ADIAO (+) - SUBTRAO (-) - MULTIPLICAO (*) - DIVISO (/) A precedncia das operaes aritmticas so resolvidas pelo COBOL, na seguinte ordem: - PARNTESES - MULTIPLICAO E DIVISO - SOMA E SUBTRAO

ADD
ADD A TO B. o mesmo que B = B + A ADD A B C GIVING D. o mesmo que D = A + B + C ADD A B C TO D. o mesmo que D = A + B + C + D Formato-l: ADD {identificador-lAiteral-l } [identificador-2/literal-2] ... TO identificador-m [ROUNDED] [identifcador-n [ROUNDED]]... [ON SIZE ERROR sentena-imperativa] [NOT ON SIZE ERROR sentena-imperativa] [END-ADD]. Formato-2: ADD {identificador-l/literal-1 } [identificador-2/literal-2] ... GIVING identificador-m [ROUNDED] [identificador-n [ROUNDED]]... [ON SIZE ERROR sentena-imperativa] [NOT ON SIZE ERROR sentena-imperativa] [END-ADD]. Formato-3: ADD CORRESPONDING {identificador-l/literal-1 } [identificador-2/literal-2] ... GIVING identificador-m [ROUNDED] [identificador-n [ROUNDED]]... [ON SIZE ERROR sentena-imperativa] [NOT ON SIZE ERROR sentena-imperativa] [END-ADD].

SUBTRACT

SUBTRACT X FROM Y o mesmo que Y = Y - X SUBTRACT X Y Z FROM A. o mesmo que A = A - (X + Y + Z) SUBTRACT X Y Z FROM A GIVTNG B o mesmo que B = A - (X + Y + Z) Formato 1: SUBTRACT {identificador-l/literal-l} [identificador-2/literal-2] ... FROM identificador-m [ROUNDED] [identificador-n [ROUNDED]]... [ON SIZE ERROR sentena imperativa] [NOT ON SIZE ERROR sentena imperativa] [END-SUBTRACT] Formato 2: SUBTRACT {identificador-l/literal-l} [identificador-2/literal-2] ... FROM {identificador-m / literal-m} GIVING identificador-n [ROUNDED] [identificador-o [ROUNDED]] [ON SIZE ERROR sentena imperativa ] [NOT ON SIZE ERROR sentena imperativa] [END-SUBTRACT]

MULTIPLY
MULTIPLY A BY B. o mesmo que B = B * A MULTIPLY A BY B o mesmo que C = A * B Formato 1: MULTIPLY {identificador-l/literal-l} BY identificador-2 [ROUNDED] [identificador-3 [ROUNDED]] [ON SIZE ERROR sentena-imperativa] [NOT ON SIZE ERROR sentena-imperativa] [END-MULTIPLY] Formato 2: MULTIPLY {identificador-l/literal-l} BY identificador-2 GIVING identificador-3 [ROUNDED] [identificador-4 [ROUNDED]]... [ON SIZE ERROR sentena-imperativa] GIVING C.

[NOT ON SIZE ERROR sentena-imperativa] [END-MULTIPLY]

DIVIDE
DIVIDE A INTO B o mesmo que B = B / A. DIVIDE A INTO B GIVING C REMAINDER D. o mesmo que C = B / A e D = resto da diviso. DIVIDE A BY B GIVING C REMAINDER D. o mesmo que C = A / B e D = resto da diviso. OBS: S se usa BY com o comando GIVING. Formato 1: DIVIDE {identificador-l/literal-l} INTO identificador-2 [ROUNDED] [identificador-3 [ROUNDED]]... [ON SIZE ERROR sentena-imperativa] [NOT ON SIZE ERROR sentena-imperativa] [END-DIVIDE] Formato 2: DIVIDE {identificador-l/literal-1} {INTO/BY} {identificador-2 literal-2} GIVING identificador-3 [ROUNDED] [identificador-4 [ROUNDED]]... [ ON SIZE ERROR sentena-imperativa ] [NOT ON SIZE ERROR sentena-imperativa] [END-DIVIDE] Formato 3: DIVIDE {identificador-l/literal-l} {INTO/BY} {identificador-2 /literal-2} GIVING identificador-3 [ROUNDED] [REMAINDER identificador-4] [ ON SIZE ERROR sentena-imperativa ] [NOT ON SIZE ERROR sentena-imperativa] [END-DIVIDE]

COMPUTE
COMPUTE A = (B + C) / D * E. Formato: COMPUTE identificador-1 [ROUNDED] [identificador-2 [ROUNDED] ...

= expresso-aritmtica [ ON SIZE ERROR sentenca-imperativa] [ NOT ON SIZE ERROR sentenca-imperativa] [END-COMPUTE] Exemplo: WORKING-STORAGE SECTION. 01 CPOS. 03 CPO1 PIC 9(002) VALUE 0. 03 CPO2 PIC 9(003) VALUE 3. 03 CPO3 PIC 9(003) VALUE 1. 03 CPO4 PIC 9(003) VALUE 2. PROCEDURE DIVISION. ROT1. COMPUTE CPO1 = CPO2 + CPO3 + CPO4 ON SIZER ERROR GO TO ERRO1. ADD 1 TO CPO2. GO TO ROT1. ERRO1. DISPLAY CPO1 CPO2 CPO3 CPO4.

OPCO ROUNDED
Todas instrues aritmticas (ADD, SUBTRACT, MUTIPLY, DIVIDE e COMPUTE) geram automaticamente instrues em linguagem de mquina para: a) alinhar os pontos decimais dos valores a serem adicionados ou subtrados; b) converter de uma USAGE para outra. Existe a possibilidade do resultado de um clculo necessitar de um nmero maior de cases decimais do que existem no campo que vai receber o resultado. Nesta condio, a ao intrnseca (default) a de truncar (cortar) a quantidade necessria de dgitos direita. Com a finalidade de alterar o processo de truncagem, podemos acrescentar a palavra 'ROUNDED' aps qualquer nome de campo que deve receber o resultado do clculo aritmtico. Com a especificao ROUNDED: 1) quando o digito mais esquerda, a ser truncado, for maior ou igual a cinco, ser somado 1 ao digito mais direita a ser retido (arredondamento para cima). 2) quando o dgito mais esquerda, a ser truncado, for maior ou igual a quatro, o resultado simplesmente truncado, sem alterao do dgito mais direita, que ser retido (arredondamento para baixo).

CLUSULA ON SIZE ERROR


Caso a parte inteira do nmero calculado no caiba no campo destino diz-se que ocorre um estouro de campo (overflow) ou SIZE ERROR. A clusula ON SIZE ERROR permite que o programador especifique um conjunto de instrues que sero executadas apenas em caso de "estouro".

CONTINUE
A instruo CONTINUE permite que seja especificado um desvio de um bloco nulo. Esta intruo indica que nenhuma instruo executvel est presente. A intruo CONTINUE pode ser usada nos lugares em que uma instuo condicional ou imperativa pode ser usada. Exemplo: IF CAMPO EQUAL S CONTINUE ELSE DISPLAY CAMPO DIFERENETE DE S END-IF

DELETE
A instruo DELETE remove um registro de um arquivo indexado ou relativo. O espao fica imediatamente disponvel para a incluso de registro. Para arquivos relativos, o espao fica disponvel para um novo registro com o mesmo valor de RELATIVE KEY. A instruo DELETE deve ser usada apenas para arquivos abertos no modo I-O. Formato: DELETE file-name record [ INVALID KEY sentenca-imperativa-1] [NOT INVALID KEY sentenca-imperativa-2] [END-DELETE]

DISPLAY
A instruc,o DISPLAY planejada para pequenos volumes de impresso em arquivos especiais do sistema (SYSPRINT, SYSOUT, etc) ou no console do operador. Formato: DISPLAY identificador-1 [identificador-2] ... [ UPON nome-especial]. til para depurao de programas e para emitir mensagens de erro. Exemplo: COMPUTE A ROUNDED = (B + C)*(D+E) ON SIZE ERROR

DISPLAY 'ESTOURO DO CAMPO A'.

EVALUATE
A instruo EVALUATE uma notao abreviada para ninho de IFs em srie. Ela pode avaliar mltiplas condies, isto , a instruo IF pode ser constituda de condies compostas. Aes subsequentes do programa obejto depende do resultado dessas avaliaes. A instruo EVALUATE permite codificar a estrutura CASE, da programao estruturada. Considere o seguinte problema: Se A for igual a B, e C diferente de D, e E igual a F, executar a procedure ROT-X. Se A diferente de B, e C igual a D, executar a procedure ROT-Y. Se nenhuma das condies anteriores forem verdadeiras, executar a procedure ROTZ. Soluo: EVALUATE A = B ALSO C = D ALSO E = F WHEN TRUE ALSO FALSE ALSO TRUE PERFORM ROT-X WHEN FALSE ALSO TRUE ALSO ANY PERFORM ROT-Y WHEN OTHER PERFORM ROT-Z END-EVALUATE

Formato: Identifier-1 Literal-1 Expression-1 TRUE FALSE ANY Condition-1 TRUE FALSE NOT Identifier-3 Literal-3 Arithmeticexpression Identifier-2 Literal-2 Expression-2 TRUE FALSE

EVALUATE

[ALSO]

WHEN

[THROUGH THRU [ALSO

Identifier-4 Literal-4 Arithmetic-expression] ANY Condition-2 TRUE FALSE NOT Identifier-5 Literal-5 Arithmeticexpression]

[THROUGH THRU Imperativestatement-2 [WHEN OTHER [END-EVALUATE]

Identifier-6 Literal-6 Arithmetic-expression]

Imperative statement2]

Opes antes da frase WHEN:

So interpretadas de duas maneiras, dependendo de como elas foram especificadas.

Individualmente, elas so chamadas seleo de subjects. Coletivamente, elas so chamadas de set de selees de subjects.

Opes na frase WHEN:

So interpretadas de duas maneiras, dependendo de como elas foram especificadas. Individualmente, elas so chamadas seleo de subjects. Coletivamente, elas so chamadas de set de selees de subjects.

Literal-1 e literal-2 no podem ser constante figurativa zero. ALSO Separa seleo de subjects dentro de um set de seleo de subject. Mltiplas selees de subjects devem ser separados pelo operando ALSO. THROUGH ou THRU Dois operandos conectados por uma frase THRU devem ser da mesma classe. Os dois operandos ento conectados constituem uma seleo de object simples.

ACCEPT
A instruo ACCEPT utilizada para importar dados do Sistema Operacional. Formato: ACCEPT identificador FROM {DATE, DAY, TIME, DAY-OF-WEEK} A instruo ACCEPT poder ser utilizada para entrada de pequenas quantidades de informao a partir do arquivo SYSIN. ACCEPT identificador FROM SYSIN. DATE Tem explicito PIC (06) Formato YYMMDD data gregoriana 04 de julho de 1981 ser expresso como 810704 Tem explicito PIC (05) Formato YYDDD data juliana 04 de julho de 1981 ser expresso como 81185

DAY

DAY-OF-WEEK

Tem explicito PIC (01) Onde: 1=segunda-feira, 2=tera-feira, 3=quarta-feira, 4=quintafeira, 5=sexta-feira, 6=sbado, 7=domingo. Tem explicito PIC (08) Formato HHMMSSCC Hora, minuto, segundo, centsimos de segundo.

TIME

2:41 da tarde ser expresso como 14410000 Exemplo ACCEPT: 5 WRK-DATE PIC 9(06). 5 WRK-TIME PIC 9(08). . . ACCEPT WRK-DATE FROM DATE ACCEPT WRK-TIME FROM TIME Observao: No existe mais CURRENT-DATE nem TIME-OF-DAY.

MANIPULAO DE TABELAS
Uma tabela, usada no processamento de dados, uma coleo de itens de dados similares e que definem uma unidade, para mais fcil recuperao de grupo de dados relacionados, bem como de subgrupos da tabela. O formato para definio de tabelas de comprimento fixo, unidimensionais : nmero-nvel nome-dado OCCURS inteiro TIMES A clusula OCCURS pode ser utilizada em qualquer nvel com exceo do nvel 01. Para que o programador posse especificar "inteiro" ele dever conhecer, antecipadamente, o tamanho da tabela. Uma vez que isto nem sempre possvel, normal dimensionar a tabela de maneira que ela tenha o espao necessrio vida til do programa. Exemplo: 01 TABELA-AGENCIAS. 03 AGENCIA OCCURS 900 TIMES. 05 NOME-AG PIC X(030). 05 ENDERECO-AG PIC X(050). Para o exemplo acima temos uma tabela de 900 ocorrncias "AGENCIA", onde cada ocorrncia composta de dois campos de nvel 05 "NOME-AG" e "ENDERECO-AG" . Para que possamos especificar uma ocorrncia particular da tabela associamos ao item de dado da tabela seu nmero de ocorrncia, conhecido como subscritor. Supondo que desejemos copiar o contedo da segunda ocorrncia de "AGENCIA" para o campo FLDB de 80 bytes poderemos faze-lo da seguinte forma: MOVE AGENCIA(2) TO FLDB. Se desejarmos verificar o contedo da centsima "ENDEREO-AG" da tabela podemos proceder da seguinte forma: DISPLAY ENDERECO-AG(100). O subscritor poder ser um item de dado numrico, definido na WORKING-STORAGE SECTION quando for necessrio que o mesmo assume diferentes valores. Exemplo: Considere o caso no qual lemos de uma entrada conhecida o valor do ms em forma de item numrico (definido como PIC 9) e precisamos imprimir o seu contedo na forma estendida. Assim, se o item lido foi 9 devemos imprimir SETEMBRO. Poderamos utilizar vrios IF's indentados em nosso programa: ocorrncia do campo

IF MES EQUAL 1 MOVE 'JANEIRO' TO MES-EXTENSO ELSE IF MES EQUAL 2 MOVE 'FEVEREIRO' TO MES-EXTENSO ELSE IF MES EQUAL 3 MOVE 'MARCO' TO MES-EXTENSO ............................. IF MES EQUAL 12 MOVE 'DEZEMBRO' TO MES-EXTENSO. Uma segunda forma de solucionar este problema, mais prtica e esttica seria atravs de tabelas como ilustrado a seguir.. 1) Definimos as tabelas na WORKING-STORAGE SECTION. 01 TABELA-MESES. 03 HLLER PIC X(011) 03 ILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) 03 FILLER PIC X(011) VALUE '01JANEIRO'. VALUE '02FEVEREIRO'. VALUE '03MARCO'. VALUE '04ABRIL'. VALUE '05MAIO'. VALUE '06JUNHO'. VALUE '07JULHO'. VALUE '08AGOSTO'. VALUE '09SETEMBRO'. VALUE '10OUTUBRO'. VALUE '11NOVEMBRO'. VALUE '12DEZEMBRO'.

01 TABELA-MESES-2 REDEFINES TABELA-MESES. 03 MES-DEF OCCURS 12 TIMES. 5 NUM-MES PIC 9(002). 5 MES-EXTENSO PIC X(010). Na primeira etapa damos valores a cada entrada do ms e a seguir a redefinimos em um item de grupo para cada, entrada na qual o primeiro item PIC 9(2) e fornece o nmero do ms e o segundo item relaciona o ms na forma estendida. Para referenciar os elementos da tabela devemos declarar o subscritor no nvel 77: 77 SUB PIC 9(002) VALUE ZEROS.

Agora, basta fazermos uma lgica na PROCEDURE DIVISION na qual pesquisamos o nmero do ms lido na tabela e a seguir imprimimos o seu contedo por extenso. PROCEDURE DIVISION. .................................................... MOVE 1 TO SUB.

PERFORM PESQUISA UNTIL SUB GREATER 12. PESQUISA SECTION.

IF MES EQUAL NUM-MES(SUB) MOVE MES-EXTENSO(SUB) TO EXTENSO ADD 12 TO SUB ELSE ADD 1 TO SUB. .................................................... Se associarmos o valor numrico do ms as ocorrncias da tabela, isto Janeiro primeira ocorrncia, fevereiro - segunda ocorrncia, maro - terceira ocorrncia, etc. O problema poderia ser solucionado da forma como segue. 01 TABELA-MESES. 03 FILLER PIC X(009) VALUE 'JANEIRO'. 03 FILLER PIC X(009) VALUE 'FEVEREIRO'. 03 FILLER PIC X(009) VALUE 'MARCO'. 03 FILLER PIC X(009) VALUE 'ABRIL'. 03 FILLER PIC X(009) VALUE 'MAIO'. 03 FILLER PIC X(009) VALUE 'JUNHO'. 03 FILLER PIC X(009) VALUE 'JULHO'. 03 FILLER PIC X(009) VALUE 'AGOSTO'. 03 FILLER PIC X(009) VALUE 'SETEMBRO'. 03 FILLER PIC X(009) VALUE 'OUTUBRO'. 03 FILLER PIC X(009) VALUE 'NOVEMBRO'. 03 FILLER PIC X(009) VALUE 'DEZEMBRO'. 01 TABELA-MESES-2 REDEFINES TABELA-MESES. 03 MES-DEF OCCURS 12 TIMES. 05 MES-EXTENSO PIC X(009). E para determinao do extenso bastaria user a varivel MES como subscritor da tabela. MOVE MES-EXTENSO(MES) TO EXTENSO. Para definirmos uma tabela de duas dimenses, definimos uma tabela de uma dimenso e definimos como uma de sues entradas outra tabela de uma dimenso.

Exemplo: 01 TAB-INDICES. 03 INDICES OCCURS 40 TIMES. 05 COD-IND PIC 9(010). 05 NOME-IND PIC X(030). 05 VALOR-IND OCCURS 30 TIMES. 07 DATA-IND PIC 9(006). 07 VLR-IND PIC S9(14)V999 COMP-3.

No exemplo acima definimos uma tabela de ndices de 40 ocorrncias, cada uma delas contendo cdigo do ndice, nome do ndice e 30 ocorrncias de data e valor dos ndices, expressa atravs da tabela VALOR-IND. Cada ocorrncia da tabela VALOR-IND tem 6 + 9 = 17 bytes e cada ocorrncia da tabela INDICES tem 10 + 30 + 30*(17) = 560 bytes. Logo a tabela TAB-INDICES tem 40 * 560 = 22400 bytes. Se desejarmos verificar o cdigo e o nome da dcima ocorrncia da tabela INDICES emitiramos a instruo: DISPLAY COD-IND(10) ' ' NOME-IND(10) Supondo que alm do cdigo e nome do ndice queremos a data e o valor da terceira ocorrncia da tabela VALOR-IND emitiramos a seguinte instruo: DISPLAY DATA-IND(10 3) ' ' VLR-IND(10 3). Assim para localizar uma ocorrncia numa tabela de duas dimenses devemos nos referir as coordenadas referentes a primeira e a segunda tabela. OBS: Na linguagem COBOL podemos definir tabelas de at trs dimenses. Supondo que desejamos carregar a tabela do exemplo anterior a partir de um arquivo com registros classificados por cdigo de ndice uma soluo seria: IDENTIDCATION PROGRAM-ID. AUTHOR. DATE-WRITEN. DATE-COMPILED. REMARKS. DIVISION. EXEMPLO1. XPTO. DD/MM/AA. EXEMPLO DE USO DE TABELA.

ENVIRONMENT DIVISION. CONI1GURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ENTRADA ASSIGN TO ENTRADA. DATA DIVISION. FILE SECTION. FD ENTRADA BLOCK 0 LABEL RECORDS STANDARD. 01 RG001E. 03 RG00lE-COD-INDICE 03 RG00lE-NOME-INDICE PIC 9(010). PIC X(030).

03 RG00lE-DATA-INDICE 03 RG001E-VALOR-INDICE WORKING-STORAGE 77 77 77 77 77 1

PIC 9(006). PIC S9(014)V99.

SECTION.

FILLER PIC X(060) VALUE INICIO DA WORKING-STORAGE SECTION III'. SUB1 PIC 9(003) VALUE ZEROS. SUB2 PIC 9(003) VALUE ZEROS. CHV-FIM PIC X(001) VALUE 'N'. 88 EOF-ENTRADA VALUE 'S'. CHV-INDICE PIC 9(010) VALUE ZEROS. TAB-INDICES. 03 INDICES OCCURS 40 TIMES. 05 COD-IND PIC 9(010). 05 NOME-IND PIC X(030). 05 VALOR-IND OCCURS 30 TIMES. 07 DATA-IND PIC 9(006). 07 VLR-IND PIC S9(14)V999 C0MP-3.

01

FILLER PIC X(060) VALUE 'FFF FIM DA WORKING-STORAGE SECTION FFF'. DIVISION. SECTION.

PROCEDURE 0-PRINCIPAL

PERFORM 1-INICIO-PGM. PERFORM 2-PROCESSAR-ARQUIVO UNTIL EOF-ENTRADA. PERFORM 3-FIM-PGM. STOP RUN. 1-INICIO-PGM SECTION. OPEN INPUT ENTRADA. PERFORM 11-LER-ENTRADA IF EOF-ENTRADA DISPLAY 'ARQUIVO ENTRADA VAZIO' ELSE NEXT SENTENCE. 11-LER-ENTRADA SECTION. READ ENTRADA AT END MOVE 'S' TO CHV-FIM. 2-PROCESSA-ENTRADA SECTION. PERFORM 21-INICIO-INDICE

PERFORM 22-PROCESSAR-INDICE UNTIL EOF-ENTRADA OR CHV-INDICE NOT EQUAL RG00lE-COD-INDICE. 21-INICIO-INDICE SECTION. ADD 1 TO SUB1 MOVE RG00lE-COD-INDICE TO COD-IND(SUB1) MOVE RG00lE-NOME-INDICE TO NOME-IND(SUB1) MOVE 1 TO SUB2 MOVE RG00lE-INDICE TO CHV-INDICE. 22-PROCESSAR-INDICE MOVE RG00lE-DATA-INDICETO DATA-IND(SUB1 SUB2). MOVE RG00lE-VLR-rNDICE TO VLR-IND(SUB1 SUB2). ADD` 1 TO SUB2. 3-FIM-PGM CLOSE ENTRADA. SECTION.

INDEXADORES
Quando utilizamos subscritores para identificar entrada em tabelas, necessrio que o compilador gere instrues em linguagem de mquina que convertem o valor do subscritor em um endereamento de memria da entrada desejada. Existem itens de dados em COBOL denominados indexadores, utilizados em lugar dos subscritores que tornam os clculos de endereamento em linguagem de mquina mais eficientes. Um valor de indexador representa um deslocamento em uma tabela, isto , corresponde ao nmero que adicionado ao endereo inicial da tabela fornece o endereo da ocorrncia desejada. Os indexadores so mais eficientes que os subscritores, portanto devero ser usados sempre que possvel. A sintaxe da clusula OCCURS, quando se define os indexadores, indicada a seguir. nmero-de-nvel identificador OCCURS inteiro TIMES [ INDEXED BY ] nome-indexador. Exemplo: 01 TAB-AGENCIAS. 3 AGENCIAS OCCURS 10 TIMES INDEXED BY IND. 05 COD-AGENCIA PIC 9(004). 05 NOME-AGENICA PIC X(030). A manipulao dos indexadores diferente dos subscritores feita atravs da instruo SET. Comparativamente teramos: SUBSCRITOR ATRIBUIO MOVE inteiro TO subscritor INCREMENTO ADD inteiro TO subscritor DECREMENTO SUBTRACT inteiro FROM subscritor INDEXADOR SET indexador TO inteiro SET indexador UP BY inteiro SET indexador DOWN BY inteiro

Podemos utilizar os indexadores nas instrues PERFORM e nas condies IF exatamente como se fossem itens de dados numricos.

SEARCH
Instruo COBOL para pesquisa em tabelas, atravs dessa instruo possvel efetuar uma pesquisa em tabelas especificadas, para localizar determinadas condies de pesquisa. Formato1: SEARCH identificador-1 [VARYING{identificador-2/indexador-1}] [AT END sentence imperative] WHEN condiao-1 { sentena-imperativa / NEXT SENTENCE } [ WHEN condio-2 { sentena-imperativa / NEXT SENTENCE } ... [END-SEARCH]
Exemplo:

Desejamos exibir o nome da agncia cujo cdigo tem valor 239 e pode ester na tabela abaixo. 01 TAB-AGENCIAS. 03 AGENCIAS OCCURS 100 TIMES INDEXED BY IND. 05 COD-AG PIC 9(003). 05 NOME-AG PIC X(030). .............................................

Pesquisa sem a instruo SEARCH:


MOVE 'F' TO ACHOU. PERFORM PESQUISAR-TABELA VARYING IND FROM 1 BY 1 UNTIL IND GREATER 100 OR ACHOU EQUAL 'V'. IF ACHOU NOT EQUAL 'V' DISPLAY 'CODIGO NAO ENCONTRADO'. PESQUISAR-TABELA SECTION. IF COD-AGENCIA EQUAL 239 DISPLAY 'NOME DA AGENCIA E ' NOME-AG(IND) MOVE V TO ACHOU ELSE NEXT SENTENCE.

Pesquisa com instruo SEARCH:


SEARCH AGENCIAS VARYING IND AT END DISPLAY 'CODIGO NAO ENCONTRADO' WHEN COD-AGENCIAEQUAL239 DISPLAY 'NOME DA AGENCIA E ' NOME-AG(IND).

SEARCH
A instruo SEARCH ALL executa uma pesquisa binria. O index de pesquisa no necessita ser inicializado pela instruo SET, porque seu setamento variado durante a operao de pesquisa, de forma que seu valor em nenhum momento menor do que o primeiro elemento da tabela, nem maior que o valor do ltimo elemento. Quando uma tabela com muitos elementos tiver a chave classificada em ordem ascendente ou descendente, e no consecutiva, recomendado o uso da instruo SEARCH ALL. Nesse processo a tabela dividida ao meio e verificado em qual das metades poder estar a chave. Essa metade dividida em duas novamente e assim sucessivamente at encontrar o elemento ou concluir que ele no existe. O index usado sempre aquele associado ao primeiro INDEX-NAME especificado na clusula occurs. Formato: SEARCH ALL identificador-1 [AT END sentence imperative] WHEN condiao-1 { sentena-imperativa / NEXT SENTENCE } [END-SEARCH]

SET
A instruo SET estabelece pontos de referncia para operaes de manuseio de tabelas pela colocao de valores associados a elementos de tabela em ndices associados a index-names, ou pela movimentao de dados para nome de condies para tornar a condio verdadeira. Formato1: Index-name-1 SET Identifier-1 [identifier-2] [index-name-2] TO index-name-3 Identifier-3 Literal-1

START
A instruo START prov um meio de posicionamento dentro de um arquivo VSAM indexado ou relativo, para em seguida fazer uma leitura sequencial a partir do ponto de posicionamento. Quando a instruo START executada, o arquivo associado deve ter sido aberto no modo INPUT ou I-O.

Formato: EQUAL TO

START

File-name

[KEY IS

= GREATER THAN > NOT LESS THAN NOT > GREATER THAN OR EQUAL TO >= Imperative-statement] >=

Data-name

[INVALID KEY END-START

STRING
A instruo STRING enfilera o contedo parcial ou completo de dois ou mais itens de dados em um nico item de dado. Uma instruo STRING pode ser codificada em substituio a uma srie de instrues MOVE. Formato: Identifier-1 STRING Literal-1 DELIMITED BY INTO Identifier-7 [WITH POINTER identifier-8] [ON OVERFLOW imperative-statement-1] [NOT ON OVERFLOW imperative-statement-2] [END-STRING] Identifier-3 Literal-3 SIZE

UNSTRING
A instruo UNSTRING permite que dados contguos em um campo emissor sejam separados em mltiplos campos receptores. Uma instruo UNSTRING pode ser codificada em substituio a uma srie de instrues MOVE. Formato: UNSTRING Identifier-1

[DELIMITED BY] [OR] INTO Identifier-4

[ALL] [ALL]

Identifier-2 Literal-1 Identifier-3 Literal-2

[DELIMITER IN delimiter-5] [COUNT IN identifier-6] [IDENTIFIER-7 DELIMITER IN identifier-8 COUNT IN identifier-9 [WITH POINTER identifier-10] [TALLYING IN identifier-11] [ON OVERFLOW imperative-statement-1] [NOT ON OVERFLOW imperative-statement-2] [END-UNSTRING]

SORT
Para muitos processamentos interessante que o arquivo de entrada venha classificado por determinados campos; entretanto nem sempre isso verdadeiro, e para isso a linguagem COBOL implementa a instruo SORT, que classifica (rearranja) os registros lgicos segundo campos especificados pelo programador, podendo ser classificado numa seqncia ascendente ou descendente. Para uso da instruo SORT preciso especificar um arquivo auxiliar para classificao; este arquivo dever ter uma instruo SELECT na ENVIROMENT DIVISION e uma descrio na DATA DIVISION. Formato: Na DATA DIVISION: SD nome-arquivo-classificao [ RECORD CONTAINS inteiro CHARACTERS]. Na PROCEDURE DIVISION. SORT nome-arquivo-classificao ON { ASCENDING / DESCENDING } KEY nome-dado-1 [nome-dado-2] ... [ON {ASCENDING / DESCENDING } KEY nome-dado-3 [ nome-dado-4] ... ] [COLLATING SEQUENCE IS nome-alfabtico] { USING nome-arquivo-2 [ nome-arquivo-3] ...... INPUT PROCEDURE IS nome-seo-1 [ THRU nome seo-2]} { GIVING nome-arquivo-4 OUTPUT PROCEDURE IS nome-seo-3 [THRU nome-seo-4]}

CLUSULA ASCENDIG/DESCENDING KEY


Esta clusula tem como finalidade a identificao das posies das chaves dos registros que sero classificados . No caso dos registros de comprimento varivel exige-se que os campos chave estejam exatamente na mesma posio dentro dos registros.

INPUT PROCEDURE:RELEASE...
Especifica as sees da PRQCEDURE DIVISION usadas para formatar o registro de entrada para classificao. A formatao poder envolver seleo de registros ou de campos de um arquivo de entrada, mas no necessariamente um registro de entrada real dever estar envolvido. Para selecionar o registro para classificao utilizamos pelo menos uma instruo RELEASE. A instruo RELEASE similar instruo WRITE; de fato, podemos encar-la como a gravao de um registro do arquivo de classificao. Formato: RELEASE nome-registro [FROM nome-dado] OBS: O processo de classificao tem incio aps o trmino da INPUT PROCEDURE.

OUTPUT PROCEDURE: RETURN


Especifica as sees da PROCEDURE DIVISION usadas para recuperar registros do arquivo de classificao. Para recuperar um registro do arquivo de classificao utilizamos pelo menos uma instruo RETURN. A instruo RETURN similar instruo READ. Formato: RETURN nome-arquivo-classificao [INTO nome-dado] AT END instruo-imperativa.

SORT...USING...GIVING
Utilizamos estas opes quando no houver necessidade nem de pr-processamento ou ps-processamento de registros lgicos, entretanto, se apenas a classificao for necessria, mais eficiente a utilizao do utilitrio de classificao SORT. Os arquivos vinculados as clusulas USING e GIVING devero estar fechados antes da execuo da instruo SORT. Exemplo: Emitir um relatrio dos funcionrios inscritos nos curves da DIORG, separar em equipes e curves em ordem alfabtica. O arquivo de entrada est classificado em ordem de matrcula dos funcionrios.

RELATRIO DE CURSOS EQUIPE: XXXXXXXXXXXXXXX CURSO XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX XXXXXXXXXXXXX

DD/MM/AA PAG. ZZ9

FUNCIONARIO XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX DIVISION.

ID PROGRAM-ID. AUTHOR. DATE-WRITTEN. DATE-COMPILED. REMARKS.

EXS01. XXXX. DD/MM/AA. EXEMPLO.

ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT ENTRADA ASSIGN TO ENTRADA. SELECT RELAT ASSIGN TO RELAT. SELECT SORTWK01 ASSIGN TO SORTWK01. DATA DIVISION. FILE SECTION. FD ENTRADA BLOCK 0 LABEL RECORDS STANDARD. 01 RG00l E. 88 EOF-ENTRADA 03 MATRICULA 03 NOME 03 EQUIPE 03 CURSO RELAT BLOCK 0 LABEL RECORDS OMITTED. VALUE HIGH-VALUES. PIC 9(006). PIC X(040). PIC X(010). PIC X(020).

FD

01 SD 01

RG001S SORTWK01. SD01. 88 EOF-SD01 03 SD-NOME 03 SD-EQUIPE 03 SD-CURSO

PIC X(133).

VALUE HIGH-VALUES. PIC X(040). PIC X(010). PIC X(010). SECTION. VALUE

WORKING-STORAGE 77 77 77 77 01

FILLER PIC X(030) 'III -INICIO-WORKING-STORAGE-III'. CT-LINHA CT-PAGINA WK-CURSO WK-DATA-1. 03 MES 03 FILLER 03 DIA 03 FILLER 03 ANO WK-DATA-2. 03 DIA 03 FILLER 03 MES 03 FILLER 03 ANO LC01. 03 FILLER 03 FILLER 03 FILLER 03 FILLER 03 LC01-DATA PIC 9(002) PIC 9(003) PIC X(020) PIC 9(002) PIC X(001) PIC 9(002) PIC X(001) PIC 9(002) PIC 9(002) PIC X(001) PIC 9(002) PIC X(001) PIC 9(002)

VALUE ZERO C0MP-3. VALUE 99. VALUE SPACES. VALUE ZEROS. VALUE '/'. VALUE ZEROS. VALUE '/'. VALUE ZEROS. VALUE ZEROS. VALUE '/'. VALUE ZEROS. VALUE '/'. VALUE ZEROS.

01

01

PIC X(001) VALUE SPACES. PIC X(040) VALUE SPACES. PIC X(019) VALUE 'RELATORIO DE CURSOS'. PIC X(030) VALUE SPACES. PIC X(008) VALUE SPACES. PIC X(001) PIC X(007) PIC X(020) PIC X(080) PIC ZZ9. PIC X(001) PIC X(007) VALUE SPACES. VALUE 'EQUIPE:'. VALUE SPACES. VALUE SPACES. VALUE SPACES. VALUE ' CURSO'.

01

01

LC02. 03 FILLER 03 FILLER 03 LC02-EQUIPE 03 FILLER 03 LC01-PAGINA LC03. 03 FILLER 03 FILLER

03 FILLER PIC X(014) VALUE SPACES. 03 FILLER PIC X(011) VALUE 'FUNCIONARIO'. 01 LD01. 03 FILLER PIC X(002) VALUE SPACES. 03 LD01-CURSO PIC X(020) VALUE SPACES. 03 FILLER PIC X(001) VALUE SPACES. 03 LD01-FUNCIONARIO PIC X(040) VALUE SPACES. 01 FILLER PIC X(030) VALUE 'FFF-FIM-WORKING-STORAGE-FFF'. PROCEDURE DIVISION. 0-PRINCIPAL PERFORM 1-INICIO-PGM. PERFORM 2-PROCESSAR. PERFORM 3-FIM-PGM. STOP RUN. 1-INICIO-PGM SECTION.

SECTION.

OPEN INPUT ENTRADA OUTPUT RELAT. PERFORM 11-LER-ENTRADA IF EOF-ENTRADA DISPLAY 'ARQUIVO ENTRADA VAZIO' PERFORM 3-FIM-PGM STOP RUN ELSE PERFORM 12-FORMATAR-DATA. 11-LER-ENTRADA SECTION.

READ ENTRADA AT END MOVE HIGH-VALUES TO RG00lE. 12-FORMATAR-DATA SECTION.

MOVE CURRENT-DATE TO WK-DATA1. MOVE CORR WK-DATA1 TO WK-DATA2. MOVE WK-DATA2 TO LC01 -DATA. 2-PROCESSAR SECTION.

SORT SORTWK01 ON ASCENDING KEY SD-EQUIPE SD-CURSO SD-NOME INPUT-PROCEDURE 21-SELECIONAR-REGISTROS UNTIL EOF-ENTRADA OUTPUT-PROCEDURE 22-lMPRIMIR-RELATOR10. 21 -SELECIONAR-REGISTROS SECTION.

MOVE RG00lE-NOME TO MOVE RG001E-EQUIPE TO MOVE RG001E-CURSO TO RELEASE SD01. PERFORM 11-LER-ENTRADA. 22-lMPRIMIR-RELATORIO

SD-NOME. SD-EQUIPE. SD-CURSO.

SECTION.

IF SORT-RETURN NOT EQUAL ZEROS DISPLAY 'PROBLEMAS NA CLASSIFICA;O DO ARQUIVO' ELSE PERFORM 221-LER-ARQSORT PERFORM 222-PROCESSAR-EQUIPES UNTIL EOF-SD01. 221-LER-ARQSORT SECTION.

RETURN SORTWK01 AT END MOVE HIGH-VALUES TO SD01. 222-PROCESSAR-EQUIPES SECTION.

MOVE SD-EQUIPE TO LC02-EQUIPE PERFORM 2221-PROCESSAR-CURSO UNTIL EOF-SD01 OR SD-EQUIPE NOT EQUAL LC02-EQUIPE. 2221-PROCESSAR-CURSO SECTION.

MOVE SD-CURSO TO LD01-CURSO WK-CURSO. PERFORM 22211-lMPRIMIR-RELATORIO UNTIL EOF-SD01 OR SD-EQUIPE NOT EQUAL LC02-EQUIPE OR SD-CURSO NOT EQUAL WK-CURSO. 22211-IMPRIMIR-RELATORIO SECTION.

MOVE SD-NOME TO LD01-NOME. IF CT-LINHA GREATER 50 PERFORM 222111-FAZER-CABECALHO ELSE WRITE RG00lS FROM LD01 MOVE SPACES TO LD01 ADD 1 TO CT-LINHA. PERFORM 221-LER-ARQSORT. 222111-FAZER-CABECALHO SECTION.

WRITE RG001S ADD 1 MOVE CT-PAGINA WRITE RG00lS WRITE RG00lS MOVE 4 3-FIM-PGM CLOSE ENTRADA.

TO TO FROM FROM TO

CT-PAGINA LC02-PAGINA LC02 LC03 AFTER 2 CT-LINHA. SECTION.

LINKAGE SECTION
Problemas complexos de processamento de dados so resolvidos atravs do uso de programas compilados separadamente mas logicamente interdependentes. Em tempo de execuo, esta separao fsica ser uma nica unidade de processamento. Chamaremos unidade de processamento ao total de cdigo de mquina necessrio para soluo de um problema de processamento de dados. Isto inclui um ou mais programas objetos em COBOL ou outras linguagens fortes. Quando a soluo do problema for dividi-lo em mais de um programa, dever existir comunicao entre estes programas, isto , cada um deles dever transferir e receber o controle do processamento. Esta interao ir requerer uma rea comum para compartilhamento dos dados. Na PROCEDURE DIVISION, um programa chamador pode transferir o controle para um programa chamado e este poder transferir o controle para outro programa chamado, porm no poder haver recursividade isto , um programa chamado, nunca dever direta ou indiretamente transferir o controle para seu programa chamador. Poder retornar o controle ao programa chamador. A rea comum destinada comunicao entre os programas estaro dispostas da seguinte forma: no programa chamador poder estar na FILE ou na WORKING-STORAGE SECTION, existindo rea alocada para esses dados. No programa chamado a rea comum ser descrita numa nova seo da DATA DIVISION denominada LINKAGE SECTION. Esta rea no ser alocada pelo programa chamador, ser na verdade usada a rea definida pelo programa chamador. Portanto, na definio dos dados entre programa chamador e chamado deve haver pares correspondentes na definio da rea comum de cada um deles no havendo necessidade que tenham os mesmos nomes, porm devem ter o mesmo nmero de bytes. Na PROCEDURE DIVISION do programa chamado devero ser relacionados os itens de dados que compe a rea comum atravs da opo USING. Exemplo:
PROGRAMA CHAMADOR WORKING-STORAGE SECTION. .................................. 1 AREA-DRAM. 03 WK-NUMERO PIC 9(008). 03 WK-DIGITO PIC 9(001). 03 WK-RETORNO PIC 9(001). ............................................ PROCEDURE DIVISION. ......................... CALL DRAM0174 USING AREA-DRAM IF WK-RETORNO NOT EQUAL ZEROS DISPLAY ERRO NA ROTINA. ......................... STOP RUN. PROGRAMA CHAMADO LINKAGE SECTION. 1 LK-AREA. 03 LK-NUMERO 03 LK-DIGITO 03 LK-RETORNO PIC 9(008). PIC 9(001). PIC 9(001).

PROCEDURE DIVISION USING LK-AREA. ................................... FIM-ROTINA SECTION. GO BACK.

A instruo CALL no programa chamador transfere o comando para o programa DRAM0174 e a clusula USING informa qual a rea comum de dados (AREA-DRAM). Na LINKAGE SECTION do programa chamado encontramos a definio da rea de dados e uma referncia que estas sero usadas na PROCEDURE DIVISION. Atravs da instruo GOBACK, solicitado o retorno ao programa chamador. Observe que os programas chamado e chamador compem uma unidade de processamento, portanto a instruo STOP RUN s deve ser colocada nos pontos em que desejamos terminar o programa.

CALL ESTTICO
Um CALL esttico caracterizado quando uma unidade de processamento est contida num nico LOAD MODULO, isto , programa chamador e chamados so partes de um mesmo LOAD MODULO. Quando emitida uma instruo CALL, uma vez que o LOAD MODULO est em memria, feito apenas um desvio para a rea do programa chamado. Formato CALL literal/indentifier-1 USING [BY REFERENCE] identifier-2 [BY REFERENCE] [ADDRESS OF] record-name [BY CONTENT] literal-2 / length of identifier-3 [ON OVERFLOW imperative-statement] [ON EXCEPTION imperative-statement] [ON NOT EXCEPTION imperative-statement] END-CALL BY REFERENCE O valor do parmetro passado atravs da frase BY REFERENCE avaliado quando o CALL for executado. O valor ser assinalado para os parmetros correspondentes do programa chamado. O nmero de caracteres em cada parmetro deve ser igual. Entretanto a decrio dos dados pode no ser a mesma. Exemplo CALL BY REFERENCE: 05 05 WRK-NOME-DEPTO WRK-CODI-DEPTO PIC X(30). PIC X(04).

CALL SUBPGM1 USING BY REFERENCE WRK-NOME-DEPTO WRK-CODI-DEPTO BY CONTENT

Para passar um parmetro usando a frase BY CONTENT, parmetro deve ser um literal alfanumrico ou o LENGTH do registrador especial. Exemplo CALL BY CONTENT: MOVE PT TO WRK-NOME-DEPTO MOVE LENGTH OF WRK-NOME-DEPTO TO WRK-LENGDEPT CALL SUBPGM1 USING BY CONTENT LENGTH OF WRK-NOME-DEPTO

CALL DINMICO
Neste formato, os programas chamados no esto link-editados no programa chamador, isto , os programa chamador e chamados esto em LOAD MODULOS diferentes. Assim em tempo de execuo, quando emitida uma instruo CALL, o LOAD do programa chamado carregado para memria, sendo ento efetuado o desvio para a mesma. A primeira instruo CALL efetua a carga do LOAD MODULO do programa chamado. Instrues CALL subsequentes para o mesmo programa, sero apenas desvios para este mesmo endereo de memria.

ADDRESS OF SPECIAL REGISTER


Implicitamente, um ADDRESS OF REGISTRADOR ESPECIAL existe para uma rea definida com nvel 01 ou 77 na LINKAGE SECTION. Um ADDRESS OF REGISTRADOR ESPECIAL pode ser especificado na frase using do comando CALL. Isto torna possvel passar ou receber o endereo de uma rea. A rea ou RECORD-NAME dever ser definido na LINKAGE SECTION. provido um ADDRESS OF REGISTRADOR ESPECIAL para cada RECORD-NAME definido na LINKAGE SECTION.

LENGTH REGISTRADOR ESPECIAL


O registrador especial LENGTH contm o nmero de bytes usado por um identificador. LENGTH cria implicitamente um registrador especial cujo contedo igual ao tamanho corrente (em bytes) do item de dados em referncia pelo identificador. LENGTH pode ser usado na PROCEDURE DIVISION em qualquer lugar que um item de dados tendo a mesma definio do registrador especial LENGTH puder ser usado. Cada registrador especial tem implicita a seguinte definio:

Formato: 05 WRK-LENGTH PIC 9(09) COMP. LENGTH no pode ser: Um item dados receptor Um subscritor Quando o registrador especial LENGTH for usado num comando CALL, a instruo deve ser CALL BY CONTENT. Quando um elemento de uma tabela for especificado, o registrador especial LENGTH conter o tamanho em bytes de uma ocorrncia. Quando se referir a um elemento de uma tabela, este no necessita ser subscrito. Exemplo: MOVE LENGTH OF WRK-CAMPO TO WRK-LENGTH CALL PROGX USING BY REFERENCE WRK-CAMPO BY CONTENT LENGTH OF WRK-CAMPO.

PASSAGEM DE PARAMETROS PELA JCL


Uma das formas de passar dados para um programa, atravs do parmetro PARM da JCL. Quando isto for necessrio, a rea para esses dados dever ser definida na LINKAGE SECTION. Um programa que ir receber dados da JCL dever ter o seguinte formato: LINKAGE SECTION. 01 PARM-LIST. 03 TAMANHO-PARM 03 ITEM-DADO-1 03 ITEM-DADO-2 ................................ 03 ITEM-DADO-N PROCEDURE

PIC S9(004) PIC X(???). PIC X(???). PIC X(???).

COMP.

DIVISION

USING PARM-LIST.

No campo TAMANHO-PARM informado o nmero de bytes que compem a lista de parmetros esta informao proveniente do sistema operacional vir em formato binrio. O campo de tamanho dever ser o primeiro da LINKAGE SECTION em seguida definimos os itens de dados que compem a lista de parmetros. Exemplo: //STEP1 EXEC PGM=TESTE,PARM='000100050275000' //STEPLIB DD DSN=MY.LIBRARY,DISP=SHR LINKAGE 01 AREA-PARM. 03 TAM-PARM 03 CODIGO 03 DECIMAIS 03 VALOR SECTION. PIC PIC PIC PIC 9(003) COMP. 9(007). 9(001). 9(005)V99. USING AREA-PARM.

PROCEDURE DIVISION .....................................................

Para o exemplo acima, o tamanho do parm dever conter o valor 15, podendo este campo ser usado para consistncia do parm recebido. O campo cdigo ter o contedo 0001000, o campo decimais 5 e o campo valor 0275000.

COMPILAO/LINK-EDIO
Para compilao e link-edio dos programas, podero ser utilizadas as procs ROSCOB (compilao) ou ROSCOBL(compilao e link-edio) para fontes no ROSCOE ou PANCOB (compilao) e PANCOBL (compilao e link-edio) para fontes no PANVALET.

> APPLID(ROSCO103) USER(DIN,T707C33) > AWS(DIN.ROSCOBL) SCRL CSR COLS 00001 00072 A<ROS1> > <...+....}...}+....2....+....3....+....}....+....5....+....6....+....7.. ...... ================================ T O P ================================= 000001 //T707C331 JOB (707,TS),'HELIO-DESIS-DSA',REGION=2048K, 000002 // CLASS=C,TIME=0001,PRTY=07,MSGLEVEL=(1,1),NOTIFY=ROSDDIN, 000003 // MSGCLASS=3 000004 //* 000005 //*------------------------------------------------------------------------------------------------* 000006 //* COMPILA E LINKEDITA FONTES DA BIBLIOTECA DO ROSCOE * 000007 //*------------------------------------------------------------------------------------------------* 000008 //* 000009 //ST01 EXEC ROSCOBL,PREFIX=DIN,MEMBER=FJAN0205, 000010 // P2='CLI,DYNAM,RESIDENT,COUNT,DBOUT' 000011 //COB.SYSLIB DD DSN=T707C33.FONTES.COBOL,DISP=SHR 000012 //LKED.SYSLMOD DD DSN=T9695.MODULO.LOAD(FJAN0205),DISP=SHR ...... ============================= B O T T O M =============================

Proc Roscobl Na proc acima ilustrada, basta substituir o prefixo e o member-name ROSCOE e especificar em que biblioteca LOAD o programa dever ser armazenado. A proc ROSCOBL, executar os seguintes passos: 1) Criar um mdulo fonte, expandindo as referncias ao PANVALET existentes no Programa. 2) O mdulo fonte, entrada para o compilador COBOL (IKFCBL00), ir gerar o mdulo objeto, isto , traduzir as instrues em linguagem COBOL para linguagem de mquina, alm de gerar uma relatrio de compilao; o mdulo objeto s ser de fato criado se todas instrues COBOL estiverem corretas. Caso contrrio devero ser feitas as correes necessrias. 3) Aps a criao do mdulo objeto, rotinas do sistema e/ou subprogramas devero ser link-editados ao modulo objeto e esta tarefa desempenhada pelo programa LINKAGE-EDITOR (EWL), que finalmente cria o mdulo LOAD (mdulo executvel).

EXECUO DO PROGRAMA
Para que possamos executar nosso programa, devemos editar uma JCL descrevendo as necessidades do programa, como bibliotecas, arquivos de entrada e sada e arquivos do sistema (sysout, sysudump, etc). Como exemplo, faremos a JCL do programa da pgina 04, para tanto iremos supor que ele foi compilado e linkeditado e seu mdulo load est armazenado na biblioteca T9999.MODULO.LOAD. //STEP1 EXEC PGM=EX01 //STEPLIB DD DSN=T9999.MODULO.LOAD,DISP=SHR // DD DSN=DESIS.USER.LOADLIB,DISP=SHR // DD DSN=DESIS.DX.LOADLIB,DISP=SHR //ARQ1 DD DSN=T9999.ENTRADA,DISP=SHR //ARQ2 DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* No carto 1 especificamos, junto ao parmetro EXEC, o programa que queremos executar. Nos cartes 2, 3 e 4 definimos quais bibliotecas e a seqncia que devero ser pesquisadas para execuo do programa (STEPLIB). No carto 5 especificamos o arquivo de entrada, que mantm um elo com o programa pelo DDNAME ARQ1. No carto 6 especificamos que o relatrio de DDNAME ARQ2 dever ser direcionado para um arquivo do sistema denominado SYSOUT. O carto 7 especifica que mensagens (DISPLAY) do programa devero ser direcionados para esta SYSOUT. O carto 8 especifica que, em caso de ABEND, o DUMP gerado seja direcionado para uma SYSOUT. Cada uma das SYSOUTs independente da outra.

NOVIDADES NO COBOL II
1. DUMPS FORMATADOS Endereo relativo da prxima instruo Contedo dos campos no abend

2. DEPURAO BATCH Mostrar contedo de campos em determinado ponto Fazer teste do contedo de campos

3. PROGRAM-ID SSNNN (COMMON INITIAL) Clusula COMMON Usado somente em subprogramas (nested programs). Significa que este programa pode ser chamado por qualquer outro nested programa. Sem a clasula COMMON, este programa s pode ser chamado pelo programa PAI na hierarquia nesting. Clusula INITIAL Toda vez que o programa chamado, os campos da working, controles de PERFORM e GO TO aparecem inicializados e arquivos internos so fechados. 4. TITLE nome do cabealho Mensagens de erro saem logo aps a linha com erro. Referncia cruzada indica se campo est sendo apenas referenciada ou alterado. Referncia cruzada de nomes de pargrafo indicam se a referncia por GO TO, PERFORM ou ALTER. Mapa dos dados com alterao. Com a instruo TITLE pode-se especificar um ttulo/cabealho a ser impresso no topo de cada pgina da compilao. Se a instruo TITLE no for encontrada, um ttulo contendo identificao do compilador e outras informaes ser gerado. TITLE no tem efeito na compilao ou execuo do programa.

TITLE no pode ter continuao em outra linha. Pode apenas em rea A ou B. Pode estar em qualquer lugar de qualquer diviso do COBOL e recomenda-se codificar como ltimo comando da IDENTIFICATION DIVISION. 5. COLLATING SEQUENCE COLLATING SEQUENCE IS NOME-ALFABETO Define a ordem dos caracteres para SORT e comparaes. 6. SPECIAL-NAMES ALPHABET NOME-ALFABETO IS NATIVE STANDARD-1 (Sequncia ASCII) STANDARD-2 (Sequncia ISO7) LITERAL, LITERAL THRU LITERAL, LITERAL ALSO LITERAL Define o nome alfabeto (sequncia de caracteres) para comparao. SYMBOLIC LABEL IS (posio alfabeto) Atribui um label ao caracter definido pela posio alfabeto. 7. APPLY WRITE-ONLY ON ARQUIVO Utilizado somente para arquivo QSAM (varivel blocado). Otimiza a carga do buffer de leitura, truncando o buffer somente quando o prximo registro a ser lido no couber no espao disponvel do buffer. Ser esta clusula, o buffer ser sempre truncado pelo tamanho mximo dos registros. 8. RECORD IS VARYING FROM N1 TO N2 DEPENDING ON CAMPO. A comparao de registros variveis feita na clusula RECORD da FD. 9. 03 LABEL-1 . . . OCCURS. 03 LABEL-1 PIC --03 LABEL-2 . . . OCCURS . . . DEPENDING ON LABEL-2. Se LABEL-1 receptor de dados (MOVE ...), LABEL-2 no precisa ser previamente inicializado. O COBOL II assume para o OCCURS o mximo tamanho da tabela.

10. VALUE com OCCURS Exemplo: 1 TAB. 02 TABX OCCURS 15 TIMES. 03 CPO1 PIC X(02) VALUE AA. 03 CPO2 PIC 9(02) VALUE 99. 03 CPO3 PIC 9(03) VALUE ZEROS.

Pode-se utilizar a clusula VALUE, dentro de um OCCURS para inicializar as ocorrncias de uma tabela. 11. 05 LABEL-1 . . . DEPENDING ON . . . 05 LABEL-1 . . . DEPENDING ON . . . 05 LABEL-2 . . . DEPENDING ON . . . Pode-se ter tabelas variveis dentro de tabelas variveis. Exemplo: 01 TABELAA. 02 LINHA PIC 999. 02 COLUNA PIC 999. 02 TABELAB OCCURS 1 TO 10 TIMES DEPENDING ON LINHA. 03 TABELAC OCCURS 1 TO 5 TIMES DEPENDING ON COLUNA. 05 CELULA PIC X(10). 12. PONTO-FLUTUANTE. Expresses aritmticas com ponto flutuante so mais precisas. 13. AJUSTE EM OCORRNCIAS. Ajustes: CAMPO (A+-B) podem ser usados tanto em indexao como em subscrio. 14. Campo (INDEX, SUBSCRITOR). Em tabelas de mltiplas entradas, podem ser misturados INDEXADORES e SUBSCRITORES.
15.

REFERENCE MODIFICATION (MOVE parcial). MOVE A (N1 : N2) TO B Reference modification permite mover parte de um item alfanumrico para outro. No exemplo acima, movido a parte do item A, que vai do byte N1 at o byte N2.

16. INDEX Um INDEX definido para uma tabela pode ser usado em outras tabelas, mesmo que estas outras tabelas no tenham a clusula INDEXED BY. 03 LABEL-1 USAGE IS INDEX Pode-se definir um campo INDEX independente. Ele pode ser aplicado a qualquer tabela. 17. 03 LABEL-2 USAGE IS POINTER VALUE IS NULL. O campo LABEL-2 se destina a salvar endereos de memria. 18. SCOPE TERMINATORS (delimitadores de escopo) O uso de delimitadores de escopo fica claro onde termina o escopo de um comando (ou conjunto de comandos), tornando a lgica do programa muito mais fcil de se compreender. Foram criados os seguintes delimitadores de escopo: END-ADD END-CALL END-COMPUTE END-DELETE END-DIVIDE END-EVALUATE Exemplo1: IF A > B IF C > D MOVE XYZ TO LIT END-IF MOVE ABC TO TEXT ELSE MOVE 123 TO NUM END-IF. END-IF END-MULTIPLY END-PERFORM END-READ END-RETURN END-REWRITE END-SEARCH END-START END-STRING END-SUBTRACT END-UNSTRING END-WRITE

Exemplo2: READ ARQUIVO01 INVALID KEY IF STATUS-F = 123 DISPLAY ERRO. NAO ENCONTRADO ELSE DISPLAY ERRO. FILE-STATUS: STATUS-F CALL ABEND END-IF END-READ. 19. EVALUATE Melhora e simplifica a lgica do programa, pois vrios IFs podem ser substitudos por um EVALUATE. EVALUATE WHEN WHEN ................................... END-EVALUATE Exemplo: EVALUATE WK-SEXO WHEN M DISPLAY MASCULINO WHEN F DISPLAY FEMININO WHEN DISPLAY NAO INFORMADO WHEN OTHER DISPLAY ERRO. INFORMADO INVALIDA END-EVALUATE.
20.

EXPRESSAO TRUE FALSE TRUE FALSE OTHER

ALSO

ALSO . . . COMANDO-1 COMANDO-2

PERFORM IN-LINE PERFORM ROTINA WITH TESTE (BEFORE/AFTER) UNTIL CONDICOES Com o uso de PERFORM IN-LINE a complexidade do fluxo dos programas reduzida, eliminando-se a necessidade de transferncia de controle para outros pargrafos, tornando a lgica do programa mais fcil de se compreender. Exemplo: OUT-OF-LINE PERFORM IN-LINE PERFORM

PERFORM ROT-ACHA UNTIL TAB(I) = ARG ROT-ACHA. ADD 1 TO I.

PERFORM UNTIL TAB(I) = ARG ADD 1 TO I END-PERFORM

21. COPYS aninhados O COBOL II permite que uma rea COPY (BOOK) contenha outros COPYS COPY AREA REPLACING = = TAG = = BY = = VALOR = = SUPPRESS TAG um conjunto de caracteres pesquisados e trocados por valor SUPPRESS elimina a impresso da rea copiada. Exemplo: BOOK: ZDREG01 01 REG-01. 03 REG01-CPO1 03 REG01-CPO2 03 REG01-CPO3. COPY ZDREG02. 03 REG01-CPO4 03 REG01-CPO5 BOOK: ZDREG01 03 REG02-CPO31 03 REG02-CPO32 03 REG02-CPO33 FONTE DO PROGRAMA COPY ZDREG01. LISTAGEM DA COMPILAO COPY ZDREG01. 01 REG-01. 03 REG01-CPO1 03 REG01-CPO2 03 REG01-CPO3. COPY ZDREG02. 05 REG02-CPO31 05 REG02-CPO32 05 REG02-CPO33 PIC X(02). PIC 9(03). PIC X(10). PIC 9(02). PIC 9(03).

PIC X(10). PIC 9(08).

PIC X(10). PIC 9(08).

PIC X(10). PIC 9(02). PIC 9(03).

03 REG01-CPO4 03 REG01-CPO5 22. CONTINUE

PIC X(02). PIC 9(03).

O comando CONTINUE no gera obejto (NO OPERATION), mas interrompe o comando dentro do qual est colocado. 23. INITIALIZE INITIALIZE CAMPO OU INITIALIZE GRUPO REPLACING (ALFABETIC/NUMERIC) BY CAMPO-2

Quando aplicado a u nvel de grupo, inicializa cada campo elementar com zeros ou spaces, conforme a categoria do campo, ou pelo valor do CAMPO-2 declarado no REPLACING.
24.

SORT/MERGE O arquivo passado diretamente ao SORT, quando no existe INPUT/OUTPUT PROCEDURE.

25.

SORT . . . WITH DUPLICATES IN ORDER Conserva os campos com mesma chave na ordem de entrada.

26. FILE-STATUS / VSAM-CODE. O VS/COBOL II d aos programadores um modo de obter informaes mais detalhadas sobre as INPUT/OUTPUTs necessrias ao VSAM. Na clusula FILESTATUS, o VSAM-CODE d o cdigo de retorno do prprio VSAM ao acesso feito. Exemplo: FILE-STATUS IS FS-CODE, VSAM-CODE O FS-CODE possui uma rea com dos caracteres. O VSAM-CODE possui uma rea com 6 bytes para receber informao do VSAM. Foram adicionados novos FILE-STATUS do VSAM no COBOL II: STATUS-CODE 04, 14, 24 05, 35 07, 37 38 39 41 at 49 SIGNIFICADO Tamanho e limites desencontrados Cdigos opcional de arquivo OPEN e CLOSE no permitidos para o arquivo Tentar abrir um arquivo fechado WITH LOCK Conflito de atributos de arquivo FIXED Erro de lgica (no lugar do cdigo 92)

Exemplo: INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SAIDA ASSIGN TO SAIDA ORGANIZATION IS INDEXED ACCESS MODE IS SEQUENTIAL RECORD KEY IS VENDOR-NOX FILE STATUS IS WK-FS, VSAM-CODE. DATA DIVISION. FILE SECTION. FD SAIDA. 01 MASTER-REC. 05 VENDOR-NOX PIC X(15). 05 VENDOR-NO REDEFINES VENDOR-NOX PIC 9(15). 05 VENDOR-NAME PIC X(15). EJECT WORKING-STORAGE SECTION. 77 WK-FS PIC XX VALUE SPACES. 77 WZERO PIC S99 VALUE +0. 01 VSAM-CODE. 03 VSAM-COD2 PIC X(06) VALUE SPACES. 03 VSAM-CODR REDEFINES VSAM-COD2. 05 VSAM-R15 PIC 9(02) COMP. 05 VSAM-FC PIC 9(01) COMP. 05 VSAM-FF PIC 9(03) COMP. PROCEDURE DIVISION. INICIO. OPEN OUTPUT SAIDA IF WK-FS NOT EQUAL 00 DISPLAY ERRO OPEN. FS = WK-FS - R15 = VSAM-R15 - FC = VSAM-FC - FF = VSAM-FF GO TO ENCERRA. 27. SET . . . TO TRUE SET NIVEL-88 TO TRUE. Carrega valor simblico de NIVEL-88 SET CAMPO-POINTER TO ADDRESS OF CAMPO-LINKAGE SET ADDRESS OF CAMPO-LINKAGE TO CAMPO-POINTER Carrega o endereo de rea de LINKAGE em CAMPO-POINTER ou Enderea campo da LINKAGE pelo valor de CAMPO-POINTER. 28. RECORD KEY

Usar em substituio a NOMINAL KEY no COBOL. 29. ALTERNATE RECORD KEY Usar em substituio a ACTUAL KEY no COBOL.
30.

DISPLAY Usar em substituio a DISP no COBOL.

31.

INSPECT Usar em substituio a EXAMINE no COBOL.

32.

ACCEPT LABEL FROM DATE Usar em substituio a CURRENT-DATE no COBOL.

33.

ACCEPT LABEL FROM TIME Usar em substituio a TIME-OF-DAY no COBOL.

34. ADDRESS OF Usar em substituio a BLL no COBOL. 35. EXPONENCIAO Exponenciao aproximados. Exemplo: COMPUTE FIXED-POINT1 = FIXED-POINT2 == 100000 Ser computado mais rapidamente e mais aproximado ser for codificado como: COMPUTE FIXED-POINT1 = FIXED-POINT2 == 100000.E+00 COMPUTE FIXED-POINT1 = FIXED-POINT2 == 100000.E-04 36. PROGRAMAS ANINHADOS (NESTED PROGRAMS) O COBOL II permite que dois ou mais programas, escritos num mesmo fonte, sejam comipilados, gerando um nico obejto (conceito de su-rotina). Com isto, pode-se criar funes modulares, dentro das tcnicas de programao estruturada, sendo estas funes executadas atravs de PERFORM, com a vantagem da proteo dos dados (Variveis Locais). com ponto flutuante sempre resulta em resultados mais

Os comandos utilizados para se criar programas aninhados so: - PROGRAM-ID. PROGRAM-ID. PROGRAM-NAME COMMON / INITIAL COMMON: INITIAL: Indica que o programa est contido dentro de outro programa. Indica que ao ser chamado o programa estar em seu Estado Inicial. Entende-se por Estado Inicial de um programa como sendo a situao de seus dados na primeira vez em que foi executado, ou seja, os campos de WORKING-STORAGE com seus respectivos VALUES, arquivos fechados.

END PROGRAM. END PROGRAM PROGRAM-NAME. Indica fim de um programa aninhado. O exemplo a seguir mostra o relacionamento entre programas aninhados: PROGRAM-ID. A. PROGRAM-ID. A1. PROGRAM-ID. A11. PROGRAM-ID. A111. END PROGRAM A111. END PROGRAM A11. PROGRAM-ID. A12 COMMON. END PROGRAM A12. END PROGRAM A1. PROGRAM-ID. A2 COMMON. END PROGRAM A2. PROGRAM-ID. A3 COMMON. END PROGRAM A3. END PROGRAM A.

A tabela a seguir mostra a Hierarquia de Chamada dos programas. Note que os programas A12, A2 e A3 so identificados como COMMON, o que resulta em diferenas nos CALLS associados a eles. PROGRAMA A A1 A11 A111 A12 A2 A3 Note:

PODE CHAMAR PROGRAMA A1, A2, A3 A11, A12, A2, A3 A111, A12, A2, A3 A12, A2, A3 A2, A3 A3 A2

PODE SER CHAMADO POR PROGRAMA NENHUM A A1 A11 A1, A11, A111 A, A1, A11, A111, A12, A3 A, A1, A11, A111, A12, A2

A2 no pode chamar A1, pois A1 no COMMON e no est contido em A2. A111 no pode chamar A11, pois isto seria um CALL RECURSIVO. A1 pode chamar A2, pois A2 COMMON.

37. FD LABEL IS (EXTERNAL / GLOBAL) EXTERNAL indica que a FD deste arquivo est associada ao JOB e no aos programas que declaram esta FD, ou seja, os dados da FD esto disponveis a todos os programas do JOB. GLOBAL indica que a FD deste programa est disponvel a todos os programas contidos no programa que acessa o arquivo. Compartilhamento de arquivos e dados. Arquivos e dados podem ser compartilhados, usando-se o atributo EXTERNAL na FD. Assim, programas compilados separadamente podem fazer uso dos mesmos arquivos. Exemplo:
PGM PRINCIPAL

PGM ABREARQ

(1)

(2)

PGM LEARQ

PGM ATUARQ

(3)

ARQ

Temos 3 programas, cada um deles executando funes diferentes sobre o mesmo arquivo. 38. Campo EXTERNAL GLOBAL na WORKING-STORAGE SECTION. 01 CAMPO EXTERNAL GLOBAL EXTERNAL especifica que o valor do campo est disponvel a todos os programas do JOB que declaram este campo. GLOBAL especifica que o valor do campo est disponvel em todos os programas contidos no programa que inicializa a varivel. 39. COMPARTILHAMENTO DE ARQUIVOS. EXEMPLO: Vamos imaginar 4 programas. O primeiro (PGPRIM) ser o programa principal, cujo objetivo ser chamar os outros trs programas. O segundo (PGOPEN) far o OPEN do arquivo de sada. O terceiro (PGWRIT) far a incluso de registros no arquivo de sada. O ltimo (PGCLOS) fechar o arquivo de sada. PROGRAMA: PGPRIM ID DIVISION. PROGRAM-ID. PGPRIM. * * PGM PRINCIPAL, CHAMA OS OUTROS 3 PGMS * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT AZDKSDS ASSIGN AZDKSDS FILE STATUS IS STATUS-01 ORGANIZATION IS SEQUENTIAL. FD AZDKSDS IS EXTERNAL RECORD CONTAINS 80 CHARACTERS RECORDING MODE IS F. 01 REGISTRO. 03 CORPO PIC X(80). WORKING-STORAGE SECTION. 01 STATUS-01 PIC 9(02) EXTERNAL. PROCEDURE DIVISION. CALL PGOPEN MOVE REGISTRO DE CONTROLE TO CORPO CALL PGWRIT CALL PGCLOS GOBACK. PROGRAMA: PGOPEN

ID DIVISION. PROGRAM-ID. PGOPEN. * * FAZ OPEN DO ARQUIVO * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT AZDKSDS ASSIGN AZDKSDS FILE STATUS IS STATUS-01 ORGANIZATION IS SEQUENTIAL. FD AZDKSDS IS EXTERNAL RECORD CONTAINS 80 CHARACTERS RECORDING MODE IS F. 01 REGISTRO. 03 CORPO PIC X(80). WORKING-STORAGE SECTION. 01 STATUS-01 PIC 9(02) EXTERNAL. PROCEDURE DIVISION. OPEN OUTPUT AZDKSDS IF STATUS-01 NOT EQUAL ZEROS DISPLAY ERRO. OPEN DO ARQUIVO. STATUS: STATUS-01 STOP RUN END-IF GOBACK. PROGRAMA: PGWRIT ID DIVISION. PROGRAM-ID. PGWRIT. * * FAZ WRITE DO ARQUIVO * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT AZDKSDS ASSIGN AZDKSDS FILE STATUS IS STATUS-01 ORGANIZATION IS SEQUENTIAL. FD AZDKSDS IS EXTERNAL RECORD CONTAINS 80 CHARACTERS RECORDING MODE IS F. 01 REGISTRO. 03 CORPO PIC X(80). WORKING-STORAGE SECTION. 01 STATUS-01 PIC 9(02) EXTERNAL. PROCEDURE DIVISION. WRITE REGISTRO IF STATUS-01 NOT EQUAL ZEROS DISPLAY ERRO. WRITE DO ARQUIVO. STATUS: STATUS-01

STOP RUN END-IF GOBACK. PROGRAMA: PGOPEN ID DIVISION. PROGRAM-ID. PGCLOS. * * FAZ CLOSE DO ARQUIVO * ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT AZDKSDS ASSIGN AZDKSDS FILE STATUS IS STATUS-01 ORGANIZATION IS SEQUENTIAL. FD AZDKSDS IS EXTERNAL RECORD CONTAINS 80 CHARACTERS RECORDING MODE IS F. 01 REGISTRO. 03 CORPO PIC X(80). WORKING-STORAGE SECTION. 01 STATUS-01 PIC 9(02) EXTERNAL. PROCEDURE DIVISION. CLOSE AZDKSDS IF STATUS-01 NOT EQUAL ZEROS DISPLAY ERRO. CLOSE DO ARQUIVO. STATUS: STATUS-01 STOP RUN END-IF GOBACK. 40. Dimenso do papel e sequncia de classificao. LINAGE IS N LINES WITH FOOTING AT M LINES AT TOP N RECORDING MODE IS S (SPANNED) CODE-SET IS NOME-ALFABETO. A declarao de dimenso do papel, formato dos registros e sequncia de classificao feita na clusula RECORD da FD. 41. Passando dados por REFERNCIA ou CONTEDO entre programas. Os dados passados por contedo no podem ser alterados pelo programa CHAMADOR. J os dados passados por referncia ocupam a mesma rea do programa CHAMADOR e qualquer alterao em seu contedo pelo programa CHAMADO ser refletida no programa CHAMADOR.

Exemplo: PGM1. WORKING-STORAGE SECTION. 01 AREA1 PIC X VALUE A. 01 AREA2 PIC X VALUE A. PROCEDURE DIVISION. CALL PGM2 USING BY REFERENCE AREA1 BY CONTENT AREA2 . . . PGM2. . . LINKAGE SECTION. 1 AREAX. 1 AREAY. PROCEDURE DIVISION. MOVE X TO AREAX MOVE Y TO AREAY. . . Aps a execuo do CALL, o valor da AREA1 ser X e o valor da AREA2 ser A.

NDICE REMISSIVO
A
ACCEPT..........................................................12, 47, 48, 81 ALL..............................................................................35, 37 AND...................................................................................30

- 11, 13, 14, 15, 19, 20, 22, 24, 25, 26, 29, 37, 40, 41, 51

C
CALL.............................................67, 68, 69, 77, 83, 84, 87 CLOSE.............................................7, 26, 27, 54, 65, 79, 86 COBOL II....................................................9, 74, 78, 79, 81 COMPILAO.................................................................78 CONTENT.......................................................67, 68, 69, 87

D
DISPLAY...6, 12, 15, 33, 43, 44, 45, 49, 52, 53, 56, 63, 64, 72, 77, 80, 81, 85, 86 DSN..............................................................................70, 72

E
ELSE............................29, 44, 50, 51, 53, 56, 63, 64, 76, 77 EXEC...........................................................................70, 72

I
IF 6, 29, 30, 44, 45, 49, 50, 51, 53, 55, 56, 63, 64, 76, 77, 80, 85, 86 INPUT....................................................6, 26, 53, 59, 60, 63 INSPECT...............................................................32, 33, 81

J
JCL.........................................................................12, 70, 72

L
LIBRARY..........................................................................70 LINKAGE............................................66, 67, 68, 70, 80, 87

M
MOVE....6, 7, 30, 34, 35, 37, 49, 50, 51, 53, 54, 55, 56, 58, 63, 64, 65, 68, 69, 74, 75, 76, 84, 87

O
OPEN...................................6, 26, 27, 53, 63, 79, 80, 84, 85 OPERADORES..................................................................40 OR........................................................30, 54, 56, 58, 59, 64

P
PERFORM. 6, 10, 37, 38, 45, 51, 53, 54, 55, 56, 63, 64, 73, 77, 78, 81 PICTURE.......................................16, 18, 19, 22, 23, 24, 29

R
READ....................................................6, 27, 53, 60, 63, 77 REFERENCE...................................................67, 69, 75, 87 RELEASE....................................................................60, 64 RUN.............................................................6, 39, 53, 63, 67

S
SEARCH................................................................55, 56, 57 SELECT...........................................5, 12, 13, 27, 52, 59, 61 SET....................................................................................55 SORT.........................................................59, 60, 63, 74, 79 SPACE.........................................................................19, 30 STOP...............................................6, 39, 53, 63, 67, 85, 86 STRING.............................................................................58

T
TAB..............................................................................50, 51 Tabela.................................................................................30 TIME..................................................................................47

U
UNSTRING........................................................................58

W
WRITE......................................6, 27, 28, 29, 60, 64, 65, 85

Você também pode gostar