46
Gennari & Peartree Projetos e Sistemas Programa de Treinamento – Linguagem de Programação COBOL 1. INTRODUÇÃO............................................................2 2. ESTRUTURA DA LINGUAGEM................................................2 2.1. DIVISÕES...........................................................2 2.2. SEÇÕES.............................................................2 2.3. PARÁGRAFOS......................................................... 2 2.4. SENTENÇAS..........................................................2 2.5. PONTUAÇÃO E CODIFICAÇÃO...............................................2 2.6. FOLHA DE CODIFICAÇÃO COBOL............................................3 3. COMPONENTES DA LINGUAGEM..............................................3 3.1. PALAVRAS...........................................................3 3.2. NOMES............................................................. 4 3.3. LITERAIS...........................................................4 3.4. COMENTÁRIOS.........................................................4 3.5. PALAVRAS UTILIZADAS JUNTO A COMANDOS....................................5 3.6. REGISTRADORES ESPECIAIS...............................................5 4. IDENTIFICATION DIVISION...............................................6 5. ENVIRONMENT DIVISION..................................................6 6. DATA DIVISION.........................................................6 6.1. WORKING-STORAGE SECTION..............................................7 6.2. FILE SECTION....................................................... 7 6.3. LINKAGE SECTION.....................................................8 6.4. NÚMEROS DE NÍVEL....................................................8 6.4.1. Nível 01 – itens de grupo........................................................................................................... 8 6.4.2. Níveis de 02 a 49 – itens elementares...................................................................................... 8 6.4.3. Nível 77 – itens independentes................................................................................................. 8 6.4.4. Nível 66 – Cláusula RENAMES................................................................................................... 8 6.4.5. Nível 88 – nomes de condições................................................................................................. 8 6.5. TRATAMENTO DE SAÍDAS.................................................9 6.6. CLÁUSULAS.........................................................10 7. PROCEDURE DIVISION...................................................12 7.1. INSTRUÇÕES ARITMÉTICAS...............................................12 7.2. INSTRUÇÃO IF......................................................13 7.3. INSTRUÇÃO PERFORM..................................................14 7.4. TERMINANDO UM PROGRAMA..............................................14 7.5. INSTRUÇÃO MOVE....................................................14 7.6. INSTRUÇÃO GO TO...................................................15 7.7. INSTRUÇÃO EXIT....................................................16 7.8. USAGE............................................................16 8. TABELAS..............................................................17 8.1.1. Cláusula OCCURS..................................................................................................................... 17 8.1.2. Manipulando um índice de tabela......................................................................................... 18 8.1.3. Cláusula REDEFINES................................................................................................................. 19 8.1.4. Zerando uma tabela por expansão........................................................................................ 19 9. MANIPULAÇÃO DE ARQUIVOS..............................................20 9.1.1. Instrução OPEN........................................................................................................................ 20 9.1.2. Instrução CLOSE....................................................................................................................... 20 9.1.3. Instrução WRITE....................................................................................................................... 20 Por Luiz Roberto de Souza Página 1 de 46

Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Embed Size (px)

Citation preview

Page 1: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

1. INTRODUÇÃO................................................................................................................................................22. ESTRUTURA DA LINGUAGEM.................................................................................................................2

2.1. DIVISÕES....................................................................................................................................................22.2. SEÇÕES.......................................................................................................................................................22.3. PARÁGRAFOS..............................................................................................................................................22.4. SENTENÇAS.................................................................................................................................................22.5. PONTUAÇÃO E CODIFICAÇÃO......................................................................................................................22.6. FOLHA DE CODIFICAÇÃO COBOL................................................................................................................3

3. COMPONENTES DA LINGUAGEM...........................................................................................................33.1. PALAVRAS..................................................................................................................................................33.2. NOMES........................................................................................................................................................43.3. LITERAIS.....................................................................................................................................................43.4. COMENTÁRIOS............................................................................................................................................43.5. PALAVRAS UTILIZADAS JUNTO A COMANDOS............................................................................................53.6. REGISTRADORES ESPECIAIS........................................................................................................................5

4. IDENTIFICATION DIVISION.....................................................................................................................65. ENVIRONMENT DIVISION.........................................................................................................................66. DATA DIVISION............................................................................................................................................6

6.1. WORKING-STORAGE SECTION....................................................................................................................76.2. FILE SECTION.............................................................................................................................................76.3. LINKAGE SECTION......................................................................................................................................86.4. NÚMEROS DE NÍVEL...................................................................................................................................8

6.4.1. Nível 01 – itens de grupo...................................................................................................................86.4.2. Níveis de 02 a 49 – itens elementares................................................................................................86.4.3. Nível 77 – itens independentes...........................................................................................................86.4.4. Nível 66 – Cláusula RENAMES.........................................................................................................86.4.5. Nível 88 – nomes de condições..........................................................................................................8

6.5. TRATAMENTO DE SAÍDAS...........................................................................................................................96.6. CLÁUSULAS..............................................................................................................................................10

7. PROCEDURE DIVISION............................................................................................................................127.1. INSTRUÇÕES ARITMÉTICAS.......................................................................................................................127.2. INSTRUÇÃO IF..........................................................................................................................................137.3. INSTRUÇÃO PERFORM...............................................................................................................................147.4. TERMINANDO UM PROGRAMA..................................................................................................................147.5. INSTRUÇÃO MOVE..................................................................................................................................147.6. INSTRUÇÃO GO TO..................................................................................................................................157.7. INSTRUÇÃO EXIT.....................................................................................................................................167.8. USAGE....................................................................................................................................................16

8. TABELAS.......................................................................................................................................................178.1.1. Cláusula OCCURS...........................................................................................................................178.1.2. Manipulando um índice de tabela....................................................................................................188.1.3. Cláusula REDEFINES.....................................................................................................................198.1.4. Zerando uma tabela por expansão...................................................................................................19

9. MANIPULAÇÃO DE ARQUIVOS.............................................................................................................209.1.1. Instrução OPEN...............................................................................................................................209.1.2. Instrução CLOSE.............................................................................................................................209.1.3. Instrução WRITE..............................................................................................................................209.1.4. Instrução READ...............................................................................................................................219.1.5. Instrução REWRITE.........................................................................................................................219.1.6. Instrução DELETE...........................................................................................................................229.1.7. Tabela de valores de file status........................................................................................................22

9.2. INSTRUÇÃO START.................................................................................................................................2210. COMUNICAÇÃO ENTRE PROGRAMAS..............................................................................................23

10.1. INSTRUÇÃO CALL..................................................................................................................................2310.2. PROCEDURE DIVISION PARA PROGRAMAS CHAMADOS POR OUTROS..............................................2310.3. LINKAGE SECTION............................................................................................................................24

11. EXERCÍCIOS..............................................................................................................................................25

Por Luiz Roberto de Souza Página 1 de 31

Page 2: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

1. INTRODUÇÃOA linguagem COBOL (COmmon Business Oriented Language – Linguagem Comum

Orientada aos Negócios) foi desenvolvida no ano de 1959, por um grupo chamado Comitê CODASl (COference on DAta SYstem Languages). Esse grupo era formado por fabricantes e grupos de usuários, cujo objetivo era a criação de uma linguagem comum de programação, visando o uso em aplicações comerciais.

O COBOL For MVS & VM (versão mais recente do COBOL IBM) foi projetado de acordo com as especificações do padrão da instituição ANSI (American National Standards Institute – Instituto Nacional Americano de Padronizações) de 1985.

2. ESTRUTURA DA LINGUAGEMA Linguagem COBOL é estruturada em : Divisões Seções Parágrafos Sentenças * Cláusulas (nas três primeiras divisões) * Comandos (na Procedure Division)

2.1. DivisõesUm programa Cobol é estruturado em quatro divisões de codificação obrigatória. Mesmo

que uma delas não se faça necessário, pelo menos o seu nome deverá ser digitado. IDENTIFICATION DIVISION Informações sobre o programa ENVIRONMENT DIVISION Definição do ambiente físico DATA DIVISION Definição da estrutura lógica dos arquivos e áreas de trabalho PROCEDURE DIVISION Procedimentos a serem executados

2.2. Seções Definidas na ENVIRONMENT DIVISION e DATA DIVISION conforme requeridas. Definidas na PROCEDURE DIVISION para especificar a segmentação do programa.

2.3. ParágrafosNa PROCEDURE DIVISION são utilizados para agrupar sentenças, permitindo a alteração

do fluxo lógico. Devem terminar com um ponto.

2.4. SentençasFormadas por uma ou mais cláusulas ou comandos. São terminadas por um ponto.

2.5. Pontuação e codificaçãoUm programa Cobol segue algumas regras que devem ser respeitadas durante a codificação

dos programas: Ao final de cada nome de divisão, seção parágrafo deve ser colocado um ponto; Deve haver pelo menos um espaço entre cada palavra do programa. Quando na mesma linha, deve ser deixado pelo menos um espaço entre o ponto e o

início da próxima sentença. Todas as palavras (instruções, cláusulas, etc.) devem ser digitadas em letras maiúsculas.

Por Luiz Roberto de Souza Página 2 de 31

Page 3: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

2.6. Folha de codificação CobolAo se digitar um programa Cobol, devemos observar alguns aspectos relativos a disposição

das informações nas linhas. Observe o exemplo abaixo:

Codificação das colunas: 1 a 6 Utilizadas para numerar as linhas. Será de uso opcional. Coluna 7 Pode conter um hífen (-) para indicar que a linha é continuação da anterior,

um asterisco (*) para indicar uma linha de comentário ou uma barra (/) para indicar um salto de página na listagem de compilação.

8 a 11 Representam a margem A, onde começam os nomes de divisão, seção e parágrafos.

12 a 72 Representam a margem B, onde estarão todos os comandos. 73 a 80 Pode ser utilizada para comentários quaisquer, pois são ignoradas pelo

compilador.

3. COMPONENTES DA LINGUAGEM3.1. Palavras

Uma palavra em COBOL é um conjunto de caracteres de até 30 bytes de comprimento. Pode ser definida pelo programador ou ser um nome do sistema. Os identificadores e verbos de comando também são considerados palavras.

As palavras que tem um significado específico para o compilador COBOL são chamadas reservadas, não podendo dessa forma ser utilizadas para outros fins pelo programador. Exemplos de palavras reservadas: IDENTIFICATION, LABEL, RECORD, READ, WRITE.

As palavras reservadas podem ser dividias em constantes figurativas, palavras opcionais e palavras-chave, conforme descrição a seguir:

Constantes FigurativasSão palavras associadas a um valor em particular. ALL 'literal' uma ou mais ocorrências de literal ZERO, ZEROS, ZEROES valor zero SPACE, SPACES brancos QUOTE, QUOTES apóstrofe HIGH-VALUE, HIGH-VALUES maior valor (HEXA FF) LOW-VALUE, LOW-VALUES menor valor (HEXA 00)

Por Luiz Roberto de Souza Página 3 de 31

Page 4: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Palavras opcionaisO uso destas palavras é opcional.ExemploIF WS-CAMPO IS GREATER THAN 10 = IF WS-CAMPO GREATER 10Logo, IS e THAN são opcionais.

Palavras-chaveDeterminam a função da cláusula ou comando.ExemploADD, READ, IF

Regras para formação de nomes de palavras Pode conter apenas caracteres alfabéticos (A-Z), numéricos (0-9) e hifen. Devem começar com um caracter alfabético. Isso implica na existência de pelo menus

um caractere alfabético na palavra. Não podem terminar com hífen. Deve haver pelo menos um espaço em branco entre as palavras. O tamanho máximo para palavras no COBOL é de 30 caracteres.

3.2. NomesSão atribuídos pelo programador. Palavras reservadas não podem ser usadas como nomes.Tipos : Nomes de dados Nomes de registro Nomes de arquivo Nomes de parágrafo Nomes de seção

3.3. LiteraisConjuntos de caracteres cujo valor é especificado. Existem dois tipos: as literais numéricas e

as alfanuméricas.Numéricas são compostas por dígitos de 0 a 9 e/ou um sinal (+ ou -) e/ou um ponto

decimal (vírgula), contém no máximo 18 dígitos.Alfanuméricas Contém todo tipo de caractere EBCDIC, num tamanho máximo de 120

caracteres, devendo estar entre apóstrofes. Um hífen deve ser colocado na coluna 7 para a continuação da literal na linha seguinte.

3.4. ComentáriosNão são considerados pelo compilador, servindo somente para documentação.REMARKS Parágrafo da IDENTIFICATION DIVISION* na coluna 7 Linha toda como comentário/ na coluna 7 Salta uma página considerando o comentárioPode-se ainda utilizar o recurso de comentários para informações que auxiliem na

compreensão do programa. Para auxiliar na estética do programa, podemos utilizar as instruções SKIP e EJECT na coluna 12.

EJECT Salta páginaSKIP1 Salta 1 linhaSKIP2 Salta duas linhas

Por Luiz Roberto de Souza Página 4 de 31

Page 5: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

SKIP3 Salta três linhasTais instruções serão executadas diretamente pelo compilador, refletindo seus resultados na

listagem de compilação.

3.5. Palavras utilizadas junto a comandos Condição NUMERIC ALPHABETIC POSITIVE NEGATIVE ZERO(ES)

Relação GREATER (>) LESS (<) EQUAL (=) NOT GREATER (<=) NOT LESS (>=)

Conecção AND OR Negação NOT

Operadores + Adição - Subtração * Multiplicação / Divisão ** Exponenciação

3.6. Registradores EspeciaisCURRENT-DATECampo de 8 bytes alfanuméricosFormato : MM/DD/AAAcesso : MOVE

TIME-OF-DAYCampo de 6 bytes zonadosFormato : HHMMSS Acesso : MOVE

DATE Campo de 6 bytes zonados Formato : AAMMDD Acesso : ACCEPT

Por Luiz Roberto de Souza Página 5 de 31

Page 6: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

DAY Campo de 5 bytes zonados Formato : AADDD Acesso : ACCEPT

TIME Campo de 8 bytes zonados Formato : HHMMSSCC Acesso : ACCEPT

4. IDENTIFICATION DIVISIONDivisão de identificação do programa. Segue o formato:

IDENTIFICATION DIVISION.PROGRAM-ID. <NOME-DO-PROGRAMA>.AUTHOR. <NOME-DO-PROGRAMADOR>.DATE-WRITTEN. <DATA QUE O PROGRAMA FOI CRIADO OU ALTERADO>.DATE-COMPILED. <DATA DE COMPILAÇÃO DO PROGRAMA (não digitar)>.REMARKS. <COMENTÁRIOS – OBJETIVO DO PROGRAMA>.SECURITY. <COMENTÁRIOS SOBRE SEGURANÇA>.

5. ENVIRONMENT DIVISIONÉ a divisão onde configuramos o ambiente de trabalho do programa. Encontra-se dividida

em duas seções. A configuration section (seção de configuração), onde configuramos parâmetros de ambiente do programa e a input-output section (seção de entrada e saída), onde selecionamos os arquivos que serão utilizados pelo programa. A estrutura é:

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SPECIAL-NAMES.

DECIMAL-POINT IS COMMA.C01 IS <NOME>.

INPUT-OUTPUT SECTION.SELECT <NOME-ARQUIVO> ASSIGN TO <DISK|TAPE|PRINTER>

ORGANIZATION IS <SEQUENTIAL|LINE SEQUENTIAL|INDEXED|RANDOM>

ACCESS MODE IS <SEQUENTIAL|RANDOM|DYNAMIC>RECORD KEY IS <NOME-DE-CAMPO>ALTERNATE RECORD KEY IS <NOME-DE-CAMPO>FILE STATUS IS <VARIÁVEL>

6. DATA DIVISIONSeção na qual definimos todos os dados com os quais trabalharemos no programa. Não é

possível utilizar qualquer variável, campo, registro ou arquivo sem que os mesmos não sejam primeiramente definidos nesta divisão.Por Luiz Roberto de Souza Página 6 de 31

Page 7: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

6.1. Working-Storage SectionNa seção de armazenamento e trabalho, iremos definir as variáveis que serão utilizadas pelo

nosso programa. Todas, sem exceção devem ser declaradas. A cláusula VALUE poderá inicializar uma variável já em sua criação.

EstruturaDATA DIVISION.

WORKING-STORAGE SECTION.NÍVEIS (01, 02-49, 77) <IDENTIFICADOR> PICTURE VALUE <VALOR>

6.2. File SectionÉ necessário que os arquivos selecionados na divisão de ambiente sejam declarados nesta

seção.Forma geralFILE SECTION.FD <NOME-ARQUIVO>

BLOCK CONTAIS <N> <CHARACTERS|RECORDS>RECORD CONTAINS <N> CHARACTERSLABEL RECORD IS <STANDARD|OMITTED>DATA RECORD IS <NOME-REGISTRO>RECORDING MODE IS <F|U|V|S> (fix or variable)VALUE OF FILE-ID IS <NOME-ARQUIVO NO DISCO> (amb. micro)

NOME-REGISTRO<DEFINIÇÕES DOS CAMPOS>Onde: NOME-ARQUIVO é o definido na cláusula SELECT da ENVIRONMENT

DIVISION; BLOCK determina o tamanho do bloco (registro físico) do arquivo, em número de

registros ou caracteres. O bloco pode ter tamanho variável. Caso esta cláusula seja omitida, o arquivo será considerado desblocado;

RECORD determina o tamanho do registro (registro lógico) do arquivo; LABEL RECORD é padrão (standard) no caso de arquivos em disco ou tape e

omitido (omitted) no caso de arquivos de impressão ou em cartões que não possuem label;

DATA RECORD nome de dado de nível 01 utilizado posteriormente para identificar o registro

RECORDING determina o formato de registro que o arquivo possui. Basicamente, podemos declarar os seguintes formatos F todos os registros do arquivo são do mesmo tamanho e cada um está inteiramente

contido em um bloco;U os registros podem ser fixos ou variáveis. Contudo, existe apenas um registro por

bloco. Não existem campos de descrições de comprimento de registro ou bloco;V os registros podem ser fixos ou variáveis, inteiramente contidos em um bloco. Os

blocos podem conter mais de um registro. Cada registro inclui a descrição dos campos de comprimento do registro e cada bloco inclui a descrição do tamanho do

Por Luiz Roberto de Souza Página 7 de 31

Page 8: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

bloco. Este campos não são descritos na DATA DIVISION. Sua previsão é feita automaticamente e não estão disponíveis para o programador;

S os registros podem ser fixos ou variáveis, podendo até mesmo ser maiores que o bloco. Sem um registro for maior que o espaço disponível em um bloco (SPANNED), um segmento do registro será escrito de modo a preencher o bloco. O resto é armazenado no próximo bloco (se necessário, será usado mais de um).

6.3. Linkage SectionÉ utilizada para definir as áreas de comunicação (commom area) entre programas. Tem

formato parecido com a WORKING-STORAGE section com a diferença que os dados definidos serão utilizados por mais de um programa. Será vista com maiores detalhes no item comunicação entre programas.

6.4. Números de nível6.4.1. Nível 01 – itens de grupo

São identificadores que agrupam variáveis. Podem ser utilizados para simplesmente melhorar o entendimento do programa ou para fins específicos, como grupo de valores que podem ser acessados individualmente ou de uma só vez. São indicados pelo número de nível 01.

Exemplo:

WORKING-STORAGE SECTION.01 DATA-SISTEMA.

6.4.2. Níveis de 02 a 49 – itens elementaresSão aqueles que estarão dentro dos itens de grupo, representados pelos números de nível de

02 a 49. São as variáveis simples. Pode-se utilizar o recurso de quebra de nível para dividir essas variáveis em outras e utilizar individualmente seus valores.

Exemplo:

WORKING-STORAGE SECTION.DATA-SISTEMA.05 WS-DIA PIC 99 VALUE 0.05 WS-MES PIC 99 VALUE 0.05 WS-ANO PIC 99 VALUE 0.

6.4.3. Nível 77 – itens independentesSão idênticos aos itens elementares porém, não aceitam quebra de nível e estão fora de um

grupo de variáveis.

6.4.4. Nível 66 – Cláusula RENAMESEsse nível identifica que os itens devem conter a cláusula RENAMES.

6.4.5. Nível 88 – nomes de condiçõesSão definidos no nível 88 e representam uma determinada condição conforme o valor de

uma variável.

Por Luiz Roberto de Souza Página 8 de 31

Page 9: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Exemplo:

02 CONFIRMACAO PIC X VALUE ‘ ‘.88 CONFIRMADO VALUE ‘S’.

6.5. Tratamento de saídasOs dados em Cobol podem ser tratados como informações que serão processadas apenas em

memória ou que serão destinadas única e exclusivamente para exibição ao usuário. Para fazer tal configurações, faremos uso de PICTURES, que são características dos itens elementares e definem seu tipo de dado, tamanho e a maneira como serão apresentados em um dispositivo de saída.

Para valores numéricos, em pictures de exibição, utilizaremos principalmente os caracteres Z (que suprime a exibição de zeros não significativos) e , (vírgula, que exibe uma vírgula decimal – requer também a declaração DECIMAL-POINT IS COMMA).

Símbolos para PICTURES X ...................................... Caractere alfanumérico do conjunto ASCII. 9 ....................................... Algarismo de um número (máx. 18 por número). 0 ....................................... Insere zero na posição indicada. S ...................................... Sinal aritmético do número. V ...................................... Posição da vírgula (ou ponto) decimal. Z ...................................... Supressão de zeros não significativos. B ...................................... Insere espaço(s) em branco na posição desejada. A ...................................... Caractere alfabético ou espaço em branco. , ........................................ Insere vírgula na posição indicada, podendo haver apenas uma vírgula no caso de DECIMAL- POINT IS COMMA. . ........................................ Insere ponto na posição indicada, podendo haver mais de um ponto no caso de DECIMAL-POINT IS COMMA. / ........................................ Insere uma barra na posição indicada. - ........................................ Colocado à direita da PICTURE, insere um sinal de menos após o número, se este for negativo. Colocado à esquerda, adquire características flutuantes, sendo o sinal impresso antes do número, se este for negativo. +........................................ Colocado à direita da PICTURE, insere um sinal de mais após o número, se este for positivo. Colocado à esquerda, adquire características flutuantes, sendo o sinal impresso antes do número, se este for positivo. * ....................................... Substitui zeros não significativos por asteriscos. $ ....................................... Insere um cifrão antes do primeiro algarismo significativo e supre os zeros não significativos. CR .................................... Colocado à esquerda, nas duas últimas posições, imprime um sinal de crédito (CR) à direita do número, se este for positivo. DB .................................... Colocado à esquerda, nas duas últimas posições, imprime um sinal de débito (DB) à

Por Luiz Roberto de Souza Página 9 de 31

Page 10: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

direita do número, se este for negativo. P ....................................... Fator de escala para especificar a posição do ponto decimal, representando uma ou mais posições, inteiras ou fracionárias, às quais não é reservado espaço em memória e cujo valor será sempre assumido zero. É contado na determinação do tamanho máximo da PICTURE em itens numéricos ou numérico-editados.

ExemplosPIC X(01) ........................ Alfanumérico de 1 bytePIC 9(02) ........................ Numérico sem sinal de 2 bytes e 2 dígitosPIC S9(05) ...................... Numérico com sinal de 5 bytes e 5 dígitosPIC S9(09) COMP .......... Binário com sinal de 4 bytes e 9 ou 10 dígitosPIC S9(03) COMP-3 ....... Compactado com sinal de 2 bytes e 3 dígitos

MEMÓRIA PICTURE VALOR REAL503 9(3) ou 999 503125 9V(2) 1,25-245 S9V9(2) -2,41

ALBA123 X(7) ALBA123BABA52 BBX(6) BABA52ZIL15A X(2)BX(4) Zi L15A

BOZZANO X(5) BOZZA1234 9(2) 34

OBSERVAÇÕES IMPORTANTES 1) Sempre que forem exibidos valores numéricos, fazer com que seja exibido ao menos um

zero (ex: zz9,99 para 0,00)

2) Todos os dados alfanuméricos serão alinhados à esquerda, ao passo que os dados numéricos serão alinhados à direita, tendo as posições livres preenchidas com zeros.

PIC X(10) para “LUIZ”L U I Z

PIC 9(8)V99 para 12,340 0 0 0 0 0 1 2 3 4

6.6. Cláusulas Serão citadas apenas as mais utilizadas. São elas: VALUE Utilizada para atribuir valores iniciais aos campos ou para uso no nível 88 com

valor de condição. Não utilizar na FILE SECTION, LINKAGE SECTION (exceto para itens de nível 88), nem para itens relacionados com OCCURS ou REDEFINES.

Por Luiz Roberto de Souza Página 10 de 31

Page 11: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Exemplos

03 AC-LIDOS PIC S9(17) COMP-3 VALUE 0.

Neste exemplo o acumulador está sendo inicializado com zeros.

03 CH-ACHOU PIC X(01) VALUE 'N'.88 ACHOU-REG VALUE 'S'.

Neste exemplo a palavra chave ACHOU-REG é um nome de condição que estará validado quando o campo CH-ACHOU tiver o conteúdo 'S'.

REDEFINES Utilizada para redefinir um campo com uma configuração diferente da original. Veremos este conceito em tabelas.

OCCURS Utilizada para especificar tabelas cujos elementos podem ser referenciados

pela indexação ou subscrição. Cria uma tabela.

USING Utilizada para indicar os campos definidos em um programa chamador que serão passados para um programa chamado como parâmetros.

C01 Utilizada na SPECIAL-NAMES. Permite que seja definido um nome a ser utilizado quando for necessário saltar uma página. Observe o exemplo:

SPECIAL-NAMES.DECIMAL-POINT IS COMMAC01 IS SALTO.

FILLER Indica um item elementar cuja informação nunca será referenciada durante a execução do programa. Sempre será definido pela picture X.

Por Luiz Roberto de Souza Página 11 de 31

Page 12: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

7. PROCEDURE DIVISIONQuando aplicarmos a lógica de programação para resolver um problema em um programa

Cobol, deixaremos nossa divisão de procedimentos com três partes a saber:

7.1. Instruções aritméticasCOMPUTECalcula uma expressão armazenando seu resultado em uma variável numérica.Sintaxe:

COMPUTE <VARIÁVEL> = <EXPRESSÃO>

Exemplos:

COMPUTE D = B ** 2 – 4 * A * CCOMPUTE R = (B * (-1) + D ** 0.5) / (2 * A)

ADD

ADD B A TO C.( C = C + B + A).ADD B A GIVING C.( C = B + A).

Por Luiz Roberto de Souza Página 12 de 31

Page 13: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

SUBTRACT

SUBTRACT B FROM A.(A = A – B)SUBTRACT B FROM A GIVING C.(C = A – B)

MULTIPLY

MULTIPLY A BY B.(B = B * A)MULTIPLY A BY B GIVING C.(C = A * B)

DIVIDE

DIVIDE A INTO B. (B = B / A)DIVIDE A INTO B GIVING C. (C = B / A, B = B / A)DIVIDE A BY B GIVING C. (C = B / A)DIVIDE A BY B GIVING C REMAINDER RESTO.

7.2. Instrução IFExecuta um bloco de instruções dependendo de uma determinada expressão lógica.Sintaxe:

IF <condição> <sentença 1 | NEXT SENTENCE>ELSE <sentença 2 | NEXT SENTENCE>.

Obs: ponto final indica o final da estrutura lógica. No caso de IFs aninhados, os IFs internos não possuem ponto. A instrução NEXT SENTENCE pode ser usada para saltar para a próxima sentença

(instrução) imediatamente posterior ao IF.

Teste de condição de classe

IF <identificador> IS [NOT] <NUMERIC | ALPHABETIC>

Operadores Relacionais

IF <identificador 1> IS [NOT] GREATER (>) <identificador 2>IF <identificador 1> IS [NOT] LESS (<) <identificador 2>IF <identificador 1> IS [NOT] EQUAL (=)<identificador 2>

Teste de condição de sinal

IF <identificador> IS [NOT] <POSITIVE | NEGATIVE | ZERO>

Por Luiz Roberto de Souza Página 13 de 31

Page 14: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

7.3. Instrução PerformDetermina a execução de um ou mais parágrafos localizados em pontos diversos da

PROCEDURE DIVISION. Após a execução do(s) procedimento(s) o fluxo de execução do programa volta para a instrução imediatamente posterior a linha do perform.

SINTAXES:

PERFORM <PARÁGRAFO>PERFORM <PARÁGRAFO1> THRU <PARÁGRAFO2>PERFORM <PARÁGRAFO> <N> TIMESPERFORM <PARÁGRAFO> UNTIL <CONDIÇÃO>PERFORM <PARÁGRAFO> VARYING <VARIÁVEL>

FROM <VL.INICIAL> BY <INCREMENTO>UNTIL <CONDIÇÃO>

É possível utilizar elementos das várias sintaxes em uma única linha de comando, conforme se tornar necessário.

EXEMPLOS

PERFORM PROCESSA.PERFORM LE-ARQUIVO THRU ATUALIZA-ARQUIVO.PERFORM LE-ARQUIVO UNTIL FIM-ARQUIVO.PERFORM LE-MOV THRU ATUALIZA-MOV

UNTIL WS-PROCESSO IS EQUAL “OK”.PERFORM CALC-SALARIO 10 TIMES.

OBSERVAÇÕES IMPORTANTESAtentar sempre para a lógica do programa. Deve ser utilizada a maneira mais eficiente e

procurar deixar o arquivo no menor tamanho possível.Procurar sempre fazer documentações. Por exemplo, em um relatório, exibir o total de

registros impressos e/ou processados. Isso ajuda inclusive na manutenção do sistema. O usuário não poderá contestar uma falha de sistema em uma determinada situação que necessite manutenção.

7.4. Terminando um programa Instrução STOP RUN Termina a execução de um programa retornando o controle ao

sistema operacional. Instrução GOBACK Termina a execução de um programa retornando o controle ao

chamador ou ao sistema operacional.

7.5. Instrução MOVE.Atribui um valor a uma ou mais variáveis de memória ou campo de arquivos.Sintaxe:

MOVE <VALOR> TO <VARIÁVEIS>

Por Luiz Roberto de Souza Página 14 de 31

Page 15: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Exemplos

MOVE 0 TO NUMERO.MOVE ‘LUIZ’ TO NOME.MOVE ‘SÃO PAULO’ TO TIME MELHOR CAMPEAO BOM.MOVE 0 TO TOTAL SUBTOTAL CONTADOR.

7.6. Instrução GO TODesvia o fluxo de execução do programa para um parágrafo ou seção, sem retornar para o

chamador. É um comando que deve ser utilizado com extremo cuidado para evitar que a lógica de programação torne-se desestruturada. Utilizaremos o comando GO TO apenas dentro de um laço (de mais de um parágrafo ou seção) de forma a quebrá-lo sem contudo desviar o fluxo para fora.

Sintaxe:

GO TO <PARÁGRAFO(S)|SEÇÃO(ÕES)> DEPENDING ON <NOME-DADO>

O NOME-DADO: deve conter entre 1 e n e deve haver n PARÁGRAFOS|SEÇÕES; deve ser um item número elementar.

Exemplos:O exemplo abaixo desvia o fluxo de execução do programa para um parágrafo ou seção

chamado LEITURA –ARQUIVO-FIM:

GO TO LEITURA-ARQUIVO-FIM.

No próximo exemplo, é acessada da console uma variável chamada CASO. E o fluxo de execução do programa é desviado para um parágrafo ou seção dependendo do valor dessa variável. Se ela valer 1 é desviado para CASO-1, se valer 2 para CASO-2, se 3 para CASO-3 e, se 4 é desviado para CASO-4.

ACCEPT CASO FROM CONSOLE.GO TO CASO-1 CASO-2 CASO-3 CASO-4 DEPENDING ON CASO....CASO-1....GOTO SEGUE.CASO-2....GOTO SEGUE.CASO-3....GOTO SEGUE.CASO-4....SEGUE....

Por Luiz Roberto de Souza Página 15 de 31

Page 16: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

7.7. Instrução EXITDentro de um laço com vários parágrafos ou seções, poderá haver um momento em que se

faz necessário ignorar uma parte das instruções. Neste caso, podemos encerrar a iteração de vez ou fazer novamente um teste.

A instrução EXIT cria um ponto de fim em uma seqüência deste tipo. Ela deve ser colocada isoladamente em um parágrafo ou seção, para o qual o fluxo de execução do programa será desviado.

Exemplo

LOGICA-PRINCIPAL....

PERFORM LE-MOV THRU LE-MOV-EXIT....LE-MOV.

READ LE-MOV AT END GOTO LE-MOV-EXIT.PERFORM LE-CONTA UNTIL CC-CONTA EQUAL MO-CONTA.IF MO-TIPOLANC EQUAL ‘D’

SUBTRACT MO-VALOR FROM CC-SALDOELSE

ADD MO-VALOR TO CC-SALDO.REWRITE REG-CONTA.GOTO LE-MOV.

LE-MOV-EXIT.EXIT.

7.8. USAGEEm muitos sistemas, em que a quantidade de informações armazenadas é muito grande,

podemos fazer uma considerável economia de espaço no dispositivo de armazenamento ao utilizarmos do recurso de compactação de dados numéricos disponível pelo Cobol.

COMPUTATIONALO campo binário oferece uma maior capacidade de representação dentro de um byte. Será

definido dessa forma através do uso da cláusula COMP. Em um campo de quatro casas o valor 6859 é armazenado em dois bytes e com representação hexadecimal X‘1ACB’. A definição do campo por exemplo ficaria na seguinte forma:

05 CPO-BINARIO PIC 9(04) USAGE COMPUTATIONAL.

A linha anterior pode ser abreviada para:

05 CPO-BINARIO PIC 9(04) COMP.

O uso deste campo tem aplicação prática para representar valores até 9.999, embora os dois bytes binários represente um valor máximo de 32.768.

Por Luiz Roberto de Souza Página 16 de 31

Page 17: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

A definição PIC 9(09) COMP, tem sua aplicação para valores até 999.999.999, embora os quatro bytes binários possam também representar um valor máximo de 2.147.483.648.

COMPUTATIONAL-3Trata-se de um campo decimal compactado, onde cada algarismo é representado em meio

byte e o meu byte mais à direita contém o sinal do campo.

COMPUTATIONAL-1Especificado para item de ponto flutuante de precisão simples, 4 bytes de comprimento.

COMPUTATIONAL-2Especificado para item de ponto flutuante de precisão dupla, 8 bytes de comprimento.

8. TABELASUma tabela é uma região da memória que pode conter diversos valores e é referenciada por

um único nome. A tabela possui o chamado subscrito ou índice que identifica a posição do elemento desejado na lista de valores. Uma variável poderá ser utilizada para acessar um determinado valor em uma tabela. Nesta caso, ela será chamada de indexador.

Na PROCEDURE DIVISION o número correspondente ao subscrito da tabela será passado para o COBOL entre parênteses logo após o nome do dado.

Por exemplo,

DISPLAY MESES(4)

exibe o elemento que está na quarta posição de uma tabela chamada MESES.

8.1.1. Cláusula OCCURSEspecifica que um dado será repetido n vezes. Não é permitida para os níveis 01 e 77.Sintaxe:

<número de nível> nome-de-dado OCCURS <n> TIMESINDEXED BY <nome-do-índice>.

Onde: nome-de-dado é o nome da variável ou campo que será repetido; n é um número inteiro maior que zero indicando quantas vezes o dado será repetido; nome-do-índice é um dado que será utilizado como índice da tabela na

PROCEDURE DIVISION.

Por Luiz Roberto de Souza Página 17 de 31

Page 18: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

ExemploNo exemplo a seguir temos os 12 últimos saldos médios de um determinado cliente :

01 WS-GRUPO. 03 WS-CIF PIC 9(011). 03 WS-SALDO-MEDIO-1 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-2 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-3 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-4 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-5 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-6 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-7 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-8 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-9 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-10 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-11 PIC S9(013)V99 COMP-3. 03 WS-SALDO-MEDIO-12 PIC S9(013)V99 COMP-3.

Com o uso de tabela, o código seria simplificado para :

01 TB-GRUPO. 03 TB-CIF PIC 9(011). 03 TB-SALDO-MEDIO OCCURS 12 PIC S9(013)V99 COMP-3.

TB-SALDO-MEDIO (1) equivale, então, a WS-SALDO-MEDIO-1, TB-SALDO-MEDIO(2) equivale a WS-SALDO-MEDIO-2 e assim por diante.

8.1.2. Manipulando um índice de tabelaSetando seu valor

SET <NOME-ÍNDICE> TO <VALOR>

Incrementando de N

SET <NOME-ÍNDICE> UP BY <N>

Decrementando de N

SET <NOME-ÍNDICE> DOWN BY <N>

Por Luiz Roberto de Souza Página 18 de 31

Page 19: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

O exemplo a seguir cria uma tabela e zera todos os seus elementos na PROCEDURE DIVISION.

WORKING-STORAGE SECTION.01 VARIAVEIS.

05 SALDOS PIC S9(7)V99 OCCURS 50 TIMESINDEXED BY IND.

...PROCEDURE DIVISION....

SET IND TO 0.PERFORM ZERA-TAB 50 TIMES....

ZERA-TAB.SET IND UP BY 1.MOVE ZERO TO SALDOS(IND).

8.1.3. Cláusula REDEFINESÉ utilizada para redefinir um campo com uma configuração diferente da original. O campo

redefinido não pode ser maior que o original. Ambos devem ter o mesmo número de nível. Entre eles não pode haver a definição de outro campo com número de nível menor ou igual ao deles.

No campo redefinido não é permitido o uso da cláusula VALUE ou OCCURS. Não é permitido redefinir um campo de nível 77 ou 88. São permitidas múltiplas redefinições de um mesmo campo. Campos subordinados a um campo redefinido podem ter a cláusula OCCURS.

Exemplo

03 WS-ANO PIC X(36) VALUE ‘JANFEVMARABRMAIJUNJULAGOSETOUTNOVDEZ’.

03 FILLER REDEFINES WS-ANO. 05 WS-MESES PIC X(03) OCCURS 12 TIMES.

8.1.4. Zerando uma tabela por expansãoUma maneira diferente de zerar uma tabela sem a necessidade de utilizar um contador é a

expansão da tabela. O exemplo abaixo cria uma tabela de 100 elementos e inicializa todos eles:Na DATA DIVISION:

03 TAB-ZERA.05 FILLER PIC 9(04) VALUE ZERO.05 FILLER PIC X(50) VALUE SPACES.05 FILLER PIC S9(5) COMP-3 VALUE ZEROS.05 TB-AGE.

07 FILLER OCCURS 100 TIMES.09 TB-COD PIC 9(04).09 TB-NOME PIC X(50).09 TB-VALOR PIC S9(5)V99 COMP-3.

Por Luiz Roberto de Souza Página 19 de 31

Page 20: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Na PROCEDURE DIVISION, a linha

MOVE TAB-ZERA TO TB-AGE.

inicializa todos elementos de TB-AGE com os valores definidos em TAB-ZERA.A declaração comum seria:

05 TB-AGE OCCURS 100 TIMES.09 TB-COD PIC 9(04).09 TB-NOME PIC X(50).09 TB-VALOR PIC S9(5)V99 COMP-3.

9. MANIPULAÇÃO DE ARQUIVOSComo sabemos, os arquivos são as estruturas utilizadas pelo sistema operacional para

armazenar informações em um dispositivo externo. Este dispositivo pode ser um disco ou uma fita.Em COBOL, a manipulação dos arquivos dependerá também de meios externos. Os

chamados métodos de acesso. Para a utilização dos comandos abaixo, supomos que no computador haja uma partição com o VSAM (Virtual Storage Access Metod) que dá suporte ao trabalho com arquivos de organização indexada. Todos os arquivos VSAM só podem ser armazenados em disco, por se tratarem de arquivos de acesso direto. Apenas os arquivos seqüenciais poderão ser gravados em fitas magnéticas

9.1.1. Instrução OPENAbre um arquivo para utilização.Sintaxe

OPEN <INPUT|OUTPUT|EXTEND> <NOME-DO-ARQUIVO>

Modos de abertura: INPUT só permite leitura do arquivo OUTPUT só permite gravação no arquivo, criando o arquivo se o mesmo já existir.

Se o mesmo já existir, todos os registros serão destruídos. I-O permite tanto leitura quanto gravação no arquivo. EXTEND abre um arquivo que já exista para permitir apenas gravações, criando o

arquivo se o mesmo não existir.

9.1.2. Instrução CLOSEFecha o arquivo, finalizando gravações que possam estar pendentes.Sintaxe

CLOSE <NOME-DO-ARQUIVO>

9.1.3. Instrução WRITESintaxe para arquivos seqüenciais:

Por Luiz Roberto de Souza Página 20 de 31

Page 21: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

WRITE <NOME-REGISTRO> FROM <NOME-DADO>

Sintaxe para arquivos VSAM:

WRITE <NOME-REGISTRO> FROM <NOME-DADO>INVALID KEY <COMANDO IMPERATIVO>

Obs: a condição INVALID KEY será atingida quando a gravação não for bem sucedida. Iremos optar pela utilização desta cláusula ou pelo teste da variável de file status.

Sintaxe para impressora

WRITE <NOME-REGISTRO> FROM <NOME-DADO1><BEFORE|AFTER> <N>LINES | PAGE

EXEMPLOS

MOVE CABEC TO LINHA.WRITE LINHA AFTER 1.

WRITE LINHA FROM CABEC AFTER 1.

MOVE REG-FITA TO REG-DISCO.WRITE REG-DISCO.

WRITE REG-DISCO FROM REG-FITA

9.1.4. Instrução READLeitura seqüencial

READ <NOME-ARQUIVO> NEXT RECORD INTO <NOME-DADO>AT END <COMANDO IMPERATIVO>

Leitura aleatória (arquivos VSAM)

READ <NOME-ARQUIVO> KEY IS <NOME-DADO1> RECORDINTO <NOME-DADO2> INVALID KEY <COMANDO IMPERATIVO>

9.1.5. Instrução REWRITERegrava o registro atual.Sintaxe:

REWRITE <NOME-REGISTRO> FROM <NOME-DADO>INVALID KEY <COMANDO IMPERATIVO>

Por Luiz Roberto de Souza Página 21 de 31

Page 22: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Lembre-se que a cláusula INVALID KEY só pode ser utilizada para arquivos de organização indexada.

9.1.6. Instrução DELETERemove o registro atual do arquivo indexado (VSAM). Não possível a utilização deste

comando em arquivos seqüenciais.

DELETE <NOME-ARQUIVO> RECORD INVALID KEY <COMANDO IMPERATIVO>

9.1.7. Tabela de valores de file statusA FILE STATUS (situação do arquivo) é uma variável de duas posições que deve ser

referenciada no SELECT do arquivo na ENVIRONMENT DIVISION e declarda como qualquer outra na WORKING-STORAGE SECTION.

No ambiente de microcomputador, a FILE STATUS deve ser obrigatoriamente declarada como alfanumérica de duas posições (PIC XX). No ambiente de grande porte, essa declaração pode também ser numérica (PIC 99).

A cláusula VALUE não deve ser utilizada para inicializar a variável, pois a mesma terá seu valor automaticamente atualizado a cada operação que for realizada com o arquivo VSAM.

Código Significado00 Operação completada com sucesso10 Fim do arquivo (AT END)21 Erro na estrutura do arquivo22 Chave duplicada23 Registro não encontrado24 Sem espaço no dispositivo para gravação30 Erro permanente91 Erro na estrutura do arquivo

Observações Código 21 quando em um acesso seqüencial a gravação não obedece uma seqüência

ascendente de chave, no arquivo indexado. Código 30 nas operações de OPEN INPUT e OPEN I-O, representa que o arquivo

não foi encontrado no dispositivo. Código 91 nas operações OPEN INPUT e OPEN I-O ocorre quando a estrutura do

arquivo está destruída. No caso de OPEN INPUT, o arquivo continua aberto e a instrução READ pode funcionar “normalmente”. No caso de OPEN I-O o arquivo não é considerado aberto.

Códigos 21, 22, 23 e 24 detectados pela função INVALID KEY.

9.2. Instrução STARTPosiciona um registro indexado para início de uma leitura seqüencial a partir de um valor de

chave especificado. Só pode ser utilizado nos modos de acesso seqüencial ou dinâmico.

Por Luiz Roberto de Souza Página 22 de 31

Page 23: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Sintaxe

START NOME-ARQUIVO KEY IS <GREATER | NOT LESS | EQUAL>NOME-DADO

Onde: NOME-DADO deve ser a RECORD KEY declarada e o valor a ser procurado no

arquivos deve ser armazenado previamente ali. Se a frase KEY IS ... for omitida, será procurado o primeiro registro no arquivo em que

a chave tenha valor igual ao armazenado no identificador definido como RECORD KEY.

A utilização deste comando pressupõe que o arquivo tenha sido aberto com INPUT ou I-O.Observação: o comando START apenas posiciona no registro desejado, não

disponibilizando os dados deste registro. É necessário utilizar o comando READ (no formato seqüencial) para poder obter as informações desejadas.

10. COMUNICAÇÃO ENTRE PROGRAMAS10.1. Instrução CALL

A instrução CALL chama um outro programa compilado para execução. Após o término do programa chamado, o fluxo de execução retorna para a linha imediatamente posterior a da instrução.

Podem haver áreas de memória que serão utilizadas para o envio de instruções do programa chamador ao chamado em outras que receberão o resultado do processamento das informações.

Todas as variáveis que mandamos para um programa externo, serão chamadas de parâmetros ou argumentos.

Sintaxe

CALL PROGRAMA USING P1 P2 P3 ... PnON OVERFLOW <comando-imperativo>

Onde: P1 até Pn são os parâmetros que estão sendo enviados para o programa. Alguns dos

identificadores da lista já possuem valores que serão utilizados no processamento. Outros não possuem valores nenhum ou se possuírem serão ignorados, pois tratam-se dos identificadores que serão formatados pelo programa chamado.

O comando-imperativo especificado na cláusula ON OVERFLOW será executado caso a memória seja insuficiente para acomodar o programa chamado. Neste caso não haverá a transferência de controle. Se esta situação acontecer e não houver o tratamento ON OVERFLOW, acontecerá um ABEND do programa.

10.2. PROCEDURE DIVISION para programas chamados por outrosQuando um programa recebe parâmetros de outro, é necessário declarar os identificadores

que receberão esses valores.Sintaxe

PROCEDURE DIVISION USING P1 P2 P3 ... Pn

Por Luiz Roberto de Souza Página 23 de 31

Page 24: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Onde P1 a Pn são os parâmetros recebidos de 1 a n que serão processados ou formatados por este programa.

10.3. LINKAGE SECTIONComo comentamos anteriormente, trata-se de uma seção da DATA DIVISION onde

definiremos a área de dados que será utilizada por mais de um programa. Assemelha-se com a WORKING-STORAGE SECTION, porém com algumas características próprias:

somente será permitido o uso de identificadores em nível 01 e 77; não será permitido o uso da cláusula VALUE.Quando se deseja ter acesso a um campo de dados descrito na LINKAGE SECTION, o

nome de dados no cabeçalho PROCEDURE DIVISION é tornado igual ao nome de dados correspondente na instrução CALL, sendo assim determinado o endereço do campo no programa que chama.

ExemploSuponha o programa:

IDENTIFICATION DIVISION.PROGRAM-ID. CHAMA.

ENVIRONMENT DIVISION.

DATA DIVISION.77 N1 PIC 99 VALUE 1.77 N2 PIC 99 VALUE 1.77 SOMA PIC 999 VALUE 0.

PROCEDURE DIVISION.INICIO.

DISPLAY ‘NO PROGRAMA CHAMADOR’ UPON CONSOLE.CALL CHAMADO USING N1, N2, SOMA

ON OVERFLOW PERFORM ERRO.DISPLAY ‘RESULTADO : ’ SOMA.STOP RUN.

ERRO.DISPLAY ‘MEMORIA INSUFICIENTE PARA CARREGAR O PROGRAMA’

UPON CONSOLE.

Por Luiz Roberto de Souza Página 24 de 31

Page 25: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

Agora suponha o segundo programa que será chamado pelo primeiro

IDENTIFICATION DIVISION.PROGRAM-ID. CHAMADO.

ENVIRONMENT DIVISION.

DATA DIVISION.LINKAGE SECTION.77 A1 PIC 99.77 A2 PIC 99.77 RES PIC 9999.

PROCEDURE DIVISION USING A1 A2 RES.INICIO.

DISPLAY ‘NO PROGRAMA CHAMADO’ UPON CONSOLE.COMPUTE RES = A1 + A2.GOBACK.

Agora note: Os parâmetros enviados pelo comando CALL devem ser recebidos por identificadores

correspondentes na mesma ordem na PROCEDURE DIVISION através da cláusula USING.

Observe que mesmo as variáveis que são utilizadas para receber os resultados do processamento precisam obrigatoriamente ser enviadas pelo comando CALL.

O programa chamado usa o comando GOBACK para retornar ao chamador. Se fosse utilizado o comando STOP RUN, o controle retornaria para o sistema operacional, quebrando desta forma a estrutura de processamento.

11. SORTOs arquivos indexados foram criados no ano de 1974. Até então, o único modo de

organização existente era o seqüencial. Até hoje, muitos arquivos são armazenados seqüencialmente, seja por não terem sidos convertidos ou por alguma razão particular do sistema em si.

A principal desvantagem dos arquivos seqüenciais está na velocidade de recuperação dos dados, uma vez que não existe uma maneira de fazer um acesso direto ao registro desejado, havendo necessidade de uma pesquisa registro a registro, na ordem de gravação e comparação do valor de um campo com o valor procurado pelo programa. Assim, vemos que uma leitura em um arquivo desse tipo nunca pode ter como ordem um campo diferente.

Porém, para relatórios ou mesmo outros tipos de processamento (principalmente batch), haverá a necessidade de uma ordenação por um ou mais campos do registro. O comando SORT será então utilizado para fazer a leitura do arquivo seqüencial, na ordem da gravação e gerar um outro arquivo, em uma ordem definida pelo programador.

A ordenação dos registros seguirá os passos:

Por Luiz Roberto de Souza Página 25 de 31

Page 26: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

12. EXERCÍCIOSO COBOL não é capaz de acessar “sozinho” os arquivos de organização indexada. Para

tanto, é necessário a utilização de um método de acesso chamado VSAM. No entanto, detalhes maiores sobre este software que fornece as informações dos arquivos serão vistos em outro curso; sendo assim, basta codificar os programas ignorando meios externos. Doravante, todas as vezes que um arquivo for de organização indexada será simplesmente chamado de arquivo VSAM.

1) Codificar um programa para acessar via console um número inteiro no intervalo de 01 a 20 e exibir o resultado do fatorial deste número:n! = n * (n – 1) * (n – 2) * (n – 3) * ... * 1

2) Acessar 2 números N e K e submetê-los à formula da permutação:

3) Codificar um programa para acessar via console um número inteiro no intervalo de 01 a 99 e dizer se ele é par ou impar.

4) Codificar um programa para exibir todos os números primos menores que 100, lembrando que um número, para ser primo, deve ser divisível apenas por ele mesmo e por 1.

5) Codificar um programa Cobol que receba via console uma variável no formato 999999999-99, representando o CPF. Consistir a validade do CPF através dos procedimentos:

DV1 = (D1 x 1 + D2 x 2 + D3 x 3 + D4 x 4 + D5 x 5 + D6 x 6 + D7 x 7 + D8 x 8 + D9 x 9) / 11DV2 = (D2 x 1 + D3 x 2 + D4 x 3 + D5 x 4 + D6 x 5 + D7 x 6 + D8 x 7 + D9x 8 + DV1 x 9) / 11

D1 D2 D3 D4 D5 D6 D7 D8 D9 - DV1 DV2x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9

x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9

O cálculo do segundo dígito verificador só é executado se o primeiro estiver correto.Ao final dos testes, se o CPF existir, exibir a mensagem ‘CPF Correto’, do contrário ‘CPF

Incorreto’.

6) Acessar uma variável no formato 9(9). Através da fórmula aplicada no exercício anterior, calcular os dois dígitos verificadores de CPF, “construir” e exibir uma variável no formato 999999999-99.

7) Codificar as duas primeiras divisões de um programa COBOL que irá ler o arquivo de movimentação e o arquivo de contas correntes, atualizando o arquivo de saldo final. Os dois primeiros são indexados e o último é seqüencial. No final do processamento o programa irá mandar para a impressora um resumo da movimentação.

8) Refaça o exercício anterior até a DATA DIVISION. Suponha o uso de formulários de 132 colunas na impressora.

Por Luiz Roberto de Souza Página 26 de 31

Page 27: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

ARQUIVO DE MOVIMENTO:*MOVIMENTOS* CODAGE 9(4) CHAVE DE ÍNDICECONTA 9(8) CHAVE DE ÍNDICEDATAMOV 9(8) (AAAAMMDD)VALOR S9(12)V99

ARQUIVO DE CONTAS CORRENTES:*CONTAS* CODAAGE 9(4) CHAVE DE ÍNDICENUMCONTA 9(8) CHAVE DE ÍNDICETITULAR X(40)

ARQUIVO DE SALDO FINAL:*SLDFN* AGENCIA 9(4) VLFINAL S9(17)V99

Por Luiz Roberto de Souza Página 27 de 31

Page 28: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

9) É dado o arquivo indexado CLIENTES com a estrutura abaixo descrita:CAMPO PICTURE CONSISTÊNCIACODIGO 9(04)NOME X(35)ENDERECO X(45)FONE 9(12)CIDADE X(20)ESTADO A(02)CEP 9(08)SEXO X(01) ‘M’ ou ‘F’LIMITE 9(04)V9(02) Entre 100 e 3000 inclusive

Codifique os seguintes programas: Inclusão de registros; Alteração de registros (com pesquisa seqüencial); Alteração de registros (com pesquisa aleatória); Exclusão de registros (com leitura aleatória);

Observações para codificar os programas: Todos os valores, enquanto estiverem sendo digitados, serão armazenados em área de

trabalho na memória (variáveis definidas na WORKING). Serão transferidos para os campos do arquivo apenas no momento de sua gravação.

Todas as consistências para os valores deverão ser realizadas em tempo de digitação para evitar a gravação de valores inválidos no arquivo.

Para qualquer operação com o arquivo, solicite primeiro a confirmação por parte do usuário.

Na inclusão de registros, não permita a gravação de chave duplicada. Na alteração de registros, não permita a alteração da chave de acesso. Na exclusão de registros, exiba as informações na tela antes de apagar o registro (não

esquecer de solicitar a confirmação). Teste os valores de FILE STATUS para cada operação realizada no arquivo.

10) O arquivo VSAM CLIENTE será convertido pelo banco JURO ALTO S/A e possui o seguinte layout:

CODIGO 9(04)NOME X(30)ENDER X(45)DTCAD X(06) – no formato (AAMMDD)FONE 9(08)

Por Luiz Roberto de Souza Página 28 de 31

Page 29: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

O programa deverá gerar o arquivo CLITMP de layout abaixo:

CODIGO 9(04)NOME X(30)ENDER X(45)DTCAD X(08) – no formato (AAAAMMDD)FONE 9(08)STATUS X(01)

INSTRUÇÕES Ler seqüencialmente o arquivo CLIENTES copiando todos os seus registros para

CLITMP; A data de cadastro poderá ou não ter sido digitada. Se não tiver, gravar ZEROS no

arquivo de saída e ‘E’special no campo STATUS. Se tiver (testar IS NUMERIC), gravar a data conforme explicação no próximo item e ‘C’onvertida no campo STATUS.

Se o ano na data de cadastro do cliente for igualo ou posterior a 50, gravar no arquivo de saída 19 para o século. Por exemplo, 500429 19500429. Do contrário, gravar 20 para o século, como por exemplo, 100429 20100429.

OS PASSOS PARA EFETIVAR A CONVERSÃO SERIAM: Rodar o programa que gera o arquivo temporário; Verificar a consistência do arquivo temporário; Apagar o arquivo antigo; Renomear o arquivo temporário para o mesmo nome do anterior; Verificar os programas que acessam o arquivo e mudar o tamanho da área de memória

necessária para armazenamento do registro.

11) São dados os arquivosMOVIM (SEQÜENCIAL)DATAMOV X(06)HORAMOV 9(06)AGENCIA 9(04)CONTA 9(07)VALOR-MOV S9(07)V9(02) COMP-3

MOVIM2 (VSAM)DATAMOV X(08) *HORAMOV 9(06) *AGENCIA 9(04) *CONTA 9(07) *VALOR-MOV

S9(07)V9(02) COMP-3

LOG001 (SEQÜENCIAL), arquivo de log:DATA-OCOR X(08) HORA-OCOR X(06) ARQUIVO X(08)

Por Luiz Roberto de Souza Página 29 de 31

Page 30: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

REGISTRO 9(06) COMP-3OCORRENCIA X(30)TIPO X(01) [C=Cabeçalho, D=Detallhe, R=Rodapé)

INSTRUÇÕES Gravar um registro cabeçalho no arquivo de log, com a ocorrência ‘INÍCIO

PROCESSAMENTO MOVIM’; Ler todo o arquivo MOVIM (de entrada), gerando o arquivo MOVIM2 (de saída), ao

qual se supõe estar vazio ou ter todos os seus dados destruídos se assim não estiver; Ao século de todas as datas do arquivo de saída (MOVIM2) será adicionado 19; Gravar os registros ordenados por DATAMOV, HORAMOV, AGENCIA e CONTA; Testar sucesso na formatação do arquivo temporário (SORT STATUS), gravando

arquivo de log se não for bem sucedida com a ocorrência ‘ERRO NO ARQUIVO TEMPORARIO’;

Testar a gravação de chave duplicada no arquivo de saída, gravando o arquivo de log, na seção detalhe, com a ocorrência ‘CHAVE DUPLICADA’;

A data da ocorrência no arquivo de log será formatada com 19 no século se o ano for posterior a 90, do contrário, será formatada como 20;

O campo ARQUIVO do arquivo de log conterá o nome do arquivo onde aconteceu o problema;

O campo REGISTRO do arquivo de log conterá o número do registro do arquivo em que aconteceu o problema;

Ao final do processamento, gravar um registro rodapé no arquivo de log, com a ocorrência ‘FINAL PROCESSAMENTO MOVIM’.

12) É dado o arquivo seqüencial MOVIM, com a estrutura:DATAMOV X(08)REGIAO 9(02)AGENCIA 9(04)CONTA 9(07)VALOR 9(07)V9(02) COMP-3TIPO X(01)

Codificar um programa para imprimir o relatório de layout a seguir:

1 2 3 4 5 6 7 812345678901234567890123456789012345678901234567890123456789012345678901234567890================================================================================GENNARI & PEARTREE PROJETOS E SISTEMAS 22/09/1998RELATORIO DE MOVIMENTACAO MENSAL PAG.: 001================================================================================REGIAO: 99AGENCIA CONTA DATA MOVIMENTO D/C 9999 9999999 DD/MM/AAAA Z.ZZZ.ZZ9,99 X 9999999 DD/MM/AAAA Z.ZZZ.ZZ9,99 X 9999999 DD/MM/AAAA Z.ZZZ.ZZ9,99 XTOTAL AGENCIA....................................: ZZ.ZZZ.ZZZ.ZZ9,99 9999 9999999 DD/MM/AAAA Z.ZZZ.ZZ9,99 X 9999999 DD/MM/AAAA Z.ZZZ.ZZ9,99 XTOTAL AGENCIA....................................: ZZ.ZZZ.ZZZ.ZZ9,99TOTAL REGIAO..................................: Z.ZZZ.ZZZ.ZZZ.ZZ9,99

Por Luiz Roberto de Souza Página 30 de 31

Page 31: Apostila de Cobol - Maceiras Sistemas COBOL CICS DB2 etc/Cobol …  · Web viewanguage – Linguagem Comum Orientada aos Negócios) ... Quando aplicarmos a lógica de programação

Gennari & Peartree Projetos e SistemasPrograma de Treinamento – Linguagem de Programação COBOL

**** ESTATISTICAS DE PROCESSAMENTO TOTAL DE REGISTROS LIDOS...............: ZZZ.ZZZ.ZZ9 TOTAL DE REGIOES PROCESSADAS...........: Z9 TOTAL DE AGENCIAS......................: Z.ZZ9 TOTAL DE CONTAS........................: ZZZ.ZZZ.ZZ9

Os movimentos foram gravados seqüencialmente, o que pressupõe uma ordem de data de movimento para o arquivo.

Para que o relatório possa funcionar corretamente, é necessário que haja uma ordenação utilizando como chave REGIAO, AGENCIA, CONTA e DATAMOV.

Observe que o valor movimentado não é gravado com sinal e o campo TIPO armazena um caracter C para crédito ou D para débito.

Haverá quebra de página a cada quebra em região. Ao final do relatório testar se há linhas suficientes para as estatísticas. Se não houver,

saltar página antes de imprimir. Condições de cancelamento do programa: Arquivo vazio.

Erro na geração do arquivo de SORTErro na leitura do arquivo de SORT

Por Luiz Roberto de Souza Página 31 de 31