Download pdf - Apostila Cobol

Transcript

COBOL II

1

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

2

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

3

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

4

Exemplo de um programa COBOLEm 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 PAGE6

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

CT-LINHA.

7

Folha de codificao COBOLNo 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 6Usadas 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 72Usadas 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.

8

AS DIVISES DO COBOLUm 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 COMMONUsada 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 INITIAL9

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 DIVISIONAs 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 SECTIONA 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-COMPUTERDescreve em qual computador o programa fonte ser compilado, e apenas documentacional, sendo tratado como comentrio pelo compilador COBOL.

OBJECT-COMPUTERDescreve o computador no qual o programa objeto ser executado.

SPECIAL NAMESNeste 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 SECTIONA 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 DIVISIONSo 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 DIVISIONDATA DIVISION. FILE SECTION. FD 01 < descrio dos registros do arquivo-1> . . . FD 01 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 SECTION13

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 [ 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 CONTAINSPara 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 RECORDSLabel 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 MODEEspecifica o formato dos registros Fixo ou Varivel.

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

USAGEEspecifica 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-3Cada 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 OCCURSFormato 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 SECTIONA 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 SECTION1- 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 SECTIONOs 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 CONDICIONAISNomes 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 PICTUREUma 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 EDIOAs 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 ESQUERDAO 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 EMISSORPICTURE CONTEDO

CAMPO RECEPTORPICTURE 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 EMISSORPICTURE CONTEDO

CAMPO RECEPTORPICTURE 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 EMISSORPICTURE CONTEDO

CAMPO RECEPTORPICTURE 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 EMISSORPICTURE CONTEDO

CAMPO RECEPTORPICTURE 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 ZEROBLANK WHEN ZERO usado para suprimir zeros substituindo-os por brancos.

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

REGRAS DE ALINHAMENTOA 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 COBOLOPENAntes 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).

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

READDepois 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 [AT END ] 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.

WRITEA 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 [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 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 [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 [{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 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/ELSEComando 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 { [NOT] {LESS/>} THAN } { [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 { 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 OROs 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) . 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

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

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

MOVEInstruo 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 {/LITERAL} TO [ ...]. 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 antes5) MOVE SPACES TO AREA-A

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

antes A = CAMPO

depois A = bbbbb

MOVE NUMRICO1) 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 ALFANUMRICONum 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} TO [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 ALLFormato: MOVE ALL TO [ ....]

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

PERFORMEsta 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 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 UNTIL A utilizao desta instruo fez com que a seo indicada seja executada at que a "condio" seja satisfeita. Formato 3: PERFORM [ THROUGH/THRU] Permite que n sees sejam executadas, desde nome-seo-1 at nome-seo-2

Formato 4: PERFORM [THROUGH/THRU] [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 [THROUGH/THRU] [UNTIL NOT LESS THAN NOT > GREATER THAN OR EQUAL TO >= Imperative-statement] >=

Data-name

[INVALID KEY END-START

STRINGA 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

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

SORTPara 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 KEYEsta 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: RETURNEspecifica 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...GIVINGUtilizamos 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 SECTIONProblemas 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 ESTTICOUm 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 DINMICONeste 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 REGISTERImplicitamente, 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 ESPECIALO 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 JCLUma 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-EDIOPara 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 > 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 REMISSIVOAACCEPT..........................................................12, 47, 48, 81 ALL..............................................................................35, 37 AND...................................................................................30

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

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

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

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

IIF 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

JJCL.........................................................................12, 70, 72

LLIBRARY..........................................................................70 LINKAGE............................................66, 67, 68, 70, 80, 87

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

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

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

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

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

TTAB..............................................................................50, 51 Tabela.................................................................................30 TIME..................................................................................47

UUNSTRING........................................................................58

WWRITE......................................6, 27, 28, 29, 60, 64, 65, 85