conceitos básicos cobol

71
PROGRAMAÇÃO COBOL II

Upload: marciodocg-1

Post on 05-Dec-2015

69 views

Category:

Documents


2 download

DESCRIPTION

Conceitos do cobol muito boa

TRANSCRIPT

Page 1: Conceitos Básicos COBOL

PROGRAMAÇÃO

COBOL II

Page 2: Conceitos Básicos COBOL

INTRODUÇÃO

A natureza do COBOL:

É a mais conhecidalinguagem para aplicações comerciais em uso atualmente.

COBOL é uma sigla derivada de Common Business Oriented Language. É uma linguagem semelhante ao inglês. As versões do COBOL segundo as American National Standards - ANS

são 1968, 1975 e 1985

Procedimentos para codificação e depuração de um programa em linguagem COBOL:

obter as especificações do analista usar ferramentas de planejamento - fluxograma, pseudocódigo, diagramas

hierárquicos - para projeto do programa codificar o programa testar o programa usando técnicas de depuração:

teste de mesacorreção de erros de sintaxeexecuções manuais do programaverificação dos erros de lógica após a execução do programa

documentar o programa

Técnicas para aperfeiçoar o projeto de programas:

programação estruturada denominada programação sem GO TO os programas estruturados são subdivididos em parágrafos ou módulos

Programação Top-Down:

Os módulos ou procedimentos principais são codificados antes dos secundários

Análoga ao desenvolvimento de um esboço, antes de se escrever um programa - a organização e a estrutura são muito importantes; os detalhes são introduzidos posteriormente.

Page 3: Conceitos Básicos COBOL

As divisões do COBOL

IDENTIFICATION DIVISION.

Identifica o programa para o sistema de computação também pode fornecer alguma documentação PROGRAM-ID é a única entrada obrigatória dentro da divisão.

ENVIRONMENT DIVISION.

Atribui um nome externo de arquivo a cada arquivo usado no programa e especifica o dispositivo que o arquivo usará.

DATA DIVISION.

Define e descreve os formatos de todas as entradas, saídas e áreas de trabalho usadas pelo processamento

FILE SECTION.

Cada nome de arquivo definido na ENVIRONMENT DIVISION deve ser descrito em um FD da DATA DIVISION.

Cada formato de registro dentro de cada arquivo é definido como uma entrada 01.

Os campos dentro de cada registro são descritos por meio de um cláusula PICTURE que especifica o tamanho e o tipo dos dados.

WORKING-STORAGE SECTION.

Define as áreas de trabalho necessárias ao processamento.

Page 4: Conceitos Básicos COBOL

PROCEDURE DIVISION.

É subdividida em parágrafos ou módulos.

Inclui todas as instruções que são executadas sequencialmente, mas um PERFORM transfere o controle para outro parágrafo; após um parágrafo ser executado com um PERFORM, o controle retornará à próxima instrução, na sequência, após o PERFORM.

Módulo principal ou parágrafo

As seguintes entradas são típicas em um módulo principal:

Os arquivos são designados como de ENTRADA (INPUT) ou SAÍDA (OUTPUT) e ativados em um comando OPEN.

Um READ inicial traz o primeiro registro para a memória

Um comando CLOSE desativa todos os arquivos

Um STOP RUN termina o processamento

Parágrafos de cálculo ou processamento

Os parágrafos de cálculo ou processamento são executados quando um comando do módulo principal indica PERFORM nome-do-parágrafo

Um parágrafo de cálculo ou processamento é requerido para processar cada registro de entrada e ler registros subsequentes.

Page 5: Conceitos Básicos COBOL

Exemplo de programa COBOL

IDENTIFICATION DIVISION.PROGRAM-ID. MEUPROG.

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SPECIAL-NAMES. DECIMAL-POINT IS COMMA.INPUT-OUTPUT SECTION.FILE-CONTROL. SELECT ARQ-VENDAS ASSIGN TO ARQ1.

SELECT ARQ-IMPR ASSIGN TO PRT1.

DATA DIVISION.FILE SECTION.FD ARQ-VENDAS LABEL RECORDS ARE STANDARD.01 REG-VENDAS.

05 NOME-E PICTURE X(15).05 QTD-VENDAS-E PICTURE 999V99.

FD ARQ-IMPR LABEL RECORDS ARE OMITTED.01 ARQ-IMPR.

05 FILLER PICTURE X(20).05 NOME-S PICTURE X(15).05 FILLER PICTURE X(20).05 QTD-COMISSAO-SPICTURE 99.99.05 FILLER PICTURE X(72).

WORKING-STORAGE SECTION.

01 HÁ-MAIS-REGISTROS PICTURE XXX VALUE ´SIM´.

PROCEDURE DIVISION.

100-MODULO-PRINC.OPEN INPUT ARQ-VENDAS

OUTPUT ARQ-IMPR.READ ARQ-VENDAS

AT END MOVE ´NAO´TO HÁ-MAIS-REGISTROS.PERFORM 200-ROTINA-COMISSAO

UNTIL HÁ-MAIS-REGISTRO = ´NAO´.CLOSE ARQ-VENDAS

ARQ-IMPR.STOP RUN.

Page 6: Conceitos Básicos COBOL

200-ROTINA-COMISSAO.MOVE SPACES TO REG-IMPR.MOVE NOME-E TO NOME-S.

IF QTD-VENDAS-E IS GREATER THAN 100.00MULTIPLY .03 BY QTD-COMISSAO-SGIVING QTD-COMISSAO-S

ELSEMULTIPLY .02 BY QTD-VENDAS-EGIVING QTD-COMISSAO-S

WRITE ARQ-IMPR.READ ARQ-VENDAS

AT END MOVE ´NAO´ TO HÁ-MAIS-REGISTROS.

200-ROTINA-EXIT.EXIT.

Page 7: Conceitos Básicos COBOL

Como codificar um programa fonte

Os programas COBOL compõem-se de quatro divisões. Cada divisão tem regras específicas de codificação, que discutiremos a seguir. Vamos começar com as regras básicas para a codificação de programas.

Coluna 7: para continuação de literais não-numéricas, comentários e início de nova página.

A coluna 7 da folha de codificação é uma posição de continuação.

Tem três objetivos principais:

1. Pode ser usada para designar uma linha toda como comentário, pela colocação de um * na coluna 7.

2. Pode ser usada para forçar a impressão das próximas instruções em nova página da listagem fonte;

3. Pode ser usada para a continuação de literais não numéricas.

Exemplo:

IDENTIFICATION DIVISION. PROGRAM-ID. EXEMPLO.******************************************* TESTE DE PROGRAM COBOL ******************************************* Usamos comentários em nossos programas para deixar clara a lógica usada. Além disso, em muitos programas, inserimos uma linha de comentários em branco, com um * na coluna 7, apenas para separar as divisões: isso faz com que o programas fique mais legível. Se a coluna 7 de qualquer linha contém um *, essa linha não será compilada, mas será impressa na listagem. Apenas para fins de documentação. Pode-se também usar uma linha em branco, em vez de uma linha de comentário, para separar as partes de um programa.

Salto de página, com uma barra (/) na coluna 7. A coluna 7 pode também ser usada para fazer a impressora saltar para a página seguinte, quando a listagem fonte está sendo impressa. Em programas longos, por exemplo, podemos querer que cada divisão fique em uma página separada. Para saltar para uma nova página após cada divisão, crie uma linha que contenha só brancos, exceto por uma barra na coluna 7.

Page 8: Conceitos Básicos COBOL

Áreas A e B

As posições de 8 a 72 de um programa COBOL padrão contém comandos do programa. Observe-se, contudo, que a coluna 8 é batizada de A e a coluna 12, de B. Elas são conhecidas com Áreas. Certas entradas devem começar na Área A e outras, na Área B.

Se uma entrada tem que ser codificada na Área A, ela pode começar nas posições 8, 9, 10 ou 11. Geralmente, as entradas da Área A começam na posição 8. Se uma entrada tem que ser codificada na Área B, ela pode começar em qualquer posição após a 11, isto é, pode começar na posição 12, 13, 14, etc. Observe-se que as regras sobre margens especificam o ponto inicial das entradas. Uma palavra que tem que começar na Área A pode estender-se para a Área B;

Exemplo:

AUTHOR, que é nome de parágrafo na IDENTIFICATION DIVISION, deve começar na Área A. Qualquer entrada que se refira a AUTHOR deve vir logo após na Área B, como se segue:

8 12

AUTHOR. CARLOS JOSE.

Page 9: Conceitos Básicos COBOL

TIPOS DE ENTRADA DO COBOL

A ordem de codificação das divisões em um programa COBOL é: IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION e PROCEDURE DIVISION. Algumas delas são subdivididas em seções. A DATA DIVISION, por exemplo, que descreve todas as área de memória necessárias para os dados de um programa, é dividida em duas seções principais: a FILE SECTION e a WORKING-STORAGE SECTION descreve as áreas intermediárias de trabalho, necessárias ao processamento. Cada seção pode ainda ser subdividida em parágrafos.

Todas as outras entradas do programa são consideradas comandos COBOL. Um comando, ou série de comandos, que termina com um ponto é chamado sentença.

TIPOS DE ENTRADA DO COBOL

Divisões, seções eparágrafos começam na Área A

DivisõesExemplos:

IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION

SeçõesExemplos:

FILE SECTION WORKING-STORAGE SECTION

ParágrafosExemplos:

PROGRAM-ID. 1000-ROT-CALCULO.

Comandos e sentenças começam na Área B

Comandos e Sentenças

Exemplos:MOVE NOME-E TO NOME-S.

ADD QTD-E TO TOTAL.

Page 10: Conceitos Básicos COBOL

REGRAS SOBRE MARGENS

Divisão, seção e nomes de parágrafos começam na Área ATodos os outros comandos, cláusulas e sentenças começam na Área B

FOLHA DE CODIFICAÇÃO COBOL

COLUNAS USO EXPLICAÇÃO

1-6Números sequenciais ou números de páginas e linhas (opcional)

não utilizadas

7Comentário, continuação ou início de nova página

usada para indicar que uma linha é comentário ( * na coluna 7 ), para fazer a impressora saltar para uma nova página ou imprimir a listagem fonte ( / na coluna 7 ), ou para continuar literais não-numéricas

8-11 Área AAlgumas entradas como divisão seção e nome de parágrafos devem começar na Área A

12-72 Área BA maioria das entradas COBOL, inclusive sentenças da PROCEDURE DIVISION são codificadas na Área B

73-80 idenficação do programa

não utilizadas

Page 11: Conceitos Básicos COBOL

REGRAS DE CODIFICAÇÃO

Nomes de divisões e seções Começam na Área A Terminam com um ponto. Devem aparecer em uma linha sem outras entradas.

Nomes de parágrafos Começam na Área A Terminam com um ponto, que de ser sempre seguido de pelo menos um

espaço em branco. Podem aparecer sozinhos na linha ou com outras entradas.

Sentenças Começam na Área B. Terminam com um ponto, que deve ser sempre seguido de pelo menos um

espaço em branco. Podem aparecer sozinhos na linha ou com outras entradas. Uma sentença consiste em um comando ou uma série de comandos.

Linhas em branco, bem como comentários, são permitidas em qualquer ponto de um programa COBOL.

REGRAS PARA INTERPRETAR OS FORMATOS DE INSTRUÇÕES

As palavras escritas em maiúsculas são palavras reservadas COBOL, que tem um significado especial para o compilador.

As palavras em minúsculo representam entradas definidas pelo usuário.

As palavras sublinhadas são obrigatórias no parágrafo.

Se for especificado algum ponto no parágrafo ele é obrigatório.

Colchetes [ ] significam que a cláusula ou parágrafo é opcional.

O uso de reticencias (...) significam que podem ser incluidas mais entradas do mesmo tipo, se desejado.

Page 12: Conceitos Básicos COBOL

REGRAS PARA A FORMAÇÃO DE NOMES DE DADOS DEFINIDOS PELO USUÁRIO

Tem de 1 a 30 caracteres Contém apenas letras, dígitos e hífens. Não contém espaços em branco. Contém pelo menos um caractere alfabético. Não usam palavras reservadas do COBOL. Usam nomes significativos:

NOME-DO-CLIENTE é melhor que A1.1000-ROTINA-DE-ERRO é melhor que R1.

Use prefixos ou sufixos sempre que apropriados: NOME-E, NOME-S, NOME-CAB, etc...

Page 13: Conceitos Básicos COBOL

CODIFICANDO A IDENTIFICATION DIVISION

Formato:

IDENTIFICATION DIVISION.PROGRAM-ID. Nome-do-programa.[AUTHOR. [comentario]...] [INSTALLATION. [comentario]...][DATE-WRITTEN. [comentario]...][DATE-COMPILED. [comentario]...][SECURITY. [comentario]...]

CODIFICANDO A ENVIRONMENT DIVISION

ENVIRONMENT DIVISION.CONFIGURATION SECTION.SOURCE-COMPUTER.OBJECT-COMPUTER.SPECIAL-NAMES.DECIMAL-POINT IS COMMA.INPUT-OUTPUT SECTION.FILE-CONTROL.

SELECT nome-do-arquivoASSIGN TO nome-externo

Deve ser especificado um comando SELECT para dispositivo de I/O no programa.

REGRAS PARA USO DO COMANDO SELECT.

nome-do-arquivo:

Deve ser especificado um comando SELECT para dispositivo de I/O no programa.

nome-externo:

Seguir as regras definidas pela JCL do MVS/ESA.

Page 14: Conceitos Básicos COBOL

CODIFICANDO A DATA DIVISION

Possui duas seções principais:

FILE-SECTION

Define todos os arquivos de entrada e saída usados no programa. Cada arquivo já foi definido na ENVIRONMENT DIVISION, em um comando SELECT, onde o nome-do-arquivo é designado e um dispositivo de entrada ou saída é atribuído a ele. Assim, para todo comando SELECT teremos um arquivo a ser descrito na FILE SECTION da DATA DIVISION.

Cada arquivo é descrito na FILE SECTION com uma sentença FD, que pode consistir em uma série de cláusulas. Depois de serem especificadas as cláusulas, a sentença FD termina com um ponto. FD é abreviação de File Description. Cada entrada FD descreve um arquivo definido em um comando SELECT da ENVIRONMENT DIVISION.

WORKING-STORAGE SECTION

Reserva memória para campos que, embora não sendo parte de registros de entrada ou saída, são necessários ao processamento. Esses campos incluem constantes e áreas de trabalho.

OBS.: as seções devem aparecer na ordem descrita.

Existem mais duas seções que serão discutidas oportunamente: LINKAGE SECTION e REPORT SECTION.

Page 15: Conceitos Básicos COBOL

DATA DIVISION.

FILE SECTION.

Podem ser usadas várias cláusulas para descrever um arquivo. Elas vem após o nome-do-arquivo, e não haverá ponto enquanto não for especificada a última cláusula. Exemplos:

FD ARQ-FOLHALABEL RECORDS ARE OMITTEDRECORDS CONTAINS 80 CHARACTERS

FD ARQ-TRANSACOESLABEL RECORDS ARE STANDARDRECORD CONTAINS 50 CHARACTERSBLOCK CONTAINS 20 RECORDS.

Arquivo sequencial

FD nome-do-arquivoBLOCK CONTAINS inteiro-1 TO inteiro-2 RECORDS RECORD inteiro-3 CHARACTERS

[ LABEL RECORD [ STANDARD | OMITTED ] ]

[ FILE STATUS IS status-arquivo ]

Arquivo relativo

FD nome-do-arquivoBLOCK CONTAINS inteiro-1 TO inteiro-2 RECORDS RECORD inteiro-3 CHARACTERS

[ LABEL RECORD [ STANDARD | OMITTED ] ]

[ FILE STATUS IS status-arquivo ]

Page 16: Conceitos Básicos COBOL

Interpretando os principais parâmetros:

LABEL RECORDS ARE STANDARD: indica que o primeiro registro a ser processado é um header label padrão de 80 posições contendo identificação do arquivo e, o último registro será um trailer label, (leitura e gravação).

LABEL RECORDS ARE OMITTED : não haverá o processamento dos registros header e trailer.

RECORD CONTAINS inteiro-1 CHARACTERS: indica o tamanho de cada registro lógico para arquivos com registros de tamanho fixo. Esta cláusula é opcional. Contudo, é importante inclui-la, uma vez que ela proporciona um meio de verificação do tamanho do registro.

BLOCK CONTAINS inteiro-1 RECORDS: indica o numero de registros lógicos por registro físico. Se omitida assumirá conforme definido no JCL.

Número de níveis:

No COBOL os dados são agrupados usando-se o conceito de nível. Os registro são considerados o nível de dados mais alto em um arquivo, e por isso são codificados no nível 01. Um campo de dados dentro do registro é codificado em um nível subordinado ao 01, isto é, 02, 03 etc. Pode-se usar qualquer número de nível entre 02 e 49 para descrever campos de dados em um registro.

Portanto, depois que um arquivo é descrito por uma FD, seguem-se as entradas de descrição de registro para cada formato de registro no arquivo. A descrição de registro especifica o formato de um registro. As descrições de registros indicam os itens ou campos que vão aparecer no registro, a ordem em que os campos aparecem e como esses campos estão relacionados entre si.

Assim como é especificado um nome de arquivo no nível de FD, um nome de registro é codificado no nível 01 e, todos os campos dentro do registro são codificados em qualquer nível entre 02 e 49, em qualquer posição dentro da Área B.

Page 17: Conceitos Básicos COBOL

Exemplo:

Registro de funcionários (entrada)

NOME SALARIO CARGO ADMISSAO

01 REG-FUNC-E.05 NOME-E PIC X(30).05 SALARIO-E PIC 9(07)V99.05 CARGO-E PIC X(10).05 DATA-E.

10 ANO-E PIC 9999.10 MÊS-E PIC 99.10 DIA-E PIC 99.

Embora o COBOL permita o uso da Área A para números de nível, recomendamos que os campos dentro de um registro sejam codificados com um recuo, isto é, que se use a Área B para todos os níveis exceto o 01.

A cláusula PICTURE (PIC)

Especifica o tipo de dados contidos em um ítem elementar indica o tamanho do campo.

Tipo de campos de dados:

Alfabético (A)Alfanumérico (X)Numérico (9)

Tamanho é indicado pelo numero de As, Xs ou 9s usados. Exemplo: PIC 9999.

Podemos também indicar o número de bytes do campo entre parenteses.

Exemplo: PIC X(10).

O ponto decimal é representado pela letra V na PICTURE. Exemplo: PIC 9(5)V99.

Page 18: Conceitos Básicos COBOL

Conteúdo do campos

Literal numérica

até 18 digitos pode utilizar o sinal + ou - no início do número. Ex. +123. Permite o ponto decimal. Ex. 15.8. Pode ser usada na PROCEDURE DIVISION.

Literal não numérica

Deve ser escrita entre apóstrofos. Exemplo: ‘JANEIRO’. Até 160 caracteres de tamanho. Permite o uso de qualquer caracter EBCDIC. Inclusive espaço e aspas.

Constante figurativa

ZEROS, SPACES, LOW-VALUE e HIGH-VALUE.

Exemplo.

01 LINHAPIC X(40) VALUE ESPACES.

MOVE ZEROS TO W-ACLIN.

UTILIZANDO A CLÁUSULA USAGE

Especifica forma em que os dados são armazenados.

Pode ter os seguintes valores

FORMATO USAGE CONTÉUDO

PIC X ou PIC A DISPLAY ALFANUMERICOPIC 9 DISPLAY ZONADOPIC 9 COMPUTACIONAL (COMP)

ou BINARYBINÁRIO

PIC 9 COMPUTACIONAL-3 (COMP-3)ou PACKED-DECIMAL

COMPACTADO

Page 19: Conceitos Básicos COBOL

WORKING-STORAGE SECTION.

Regras de codificação:

Definir após a FILE SECTION. Codificar a partir da Area A e terminar com ponto. Ítem de grupo e ítens elementares podem ser definidos. Ítem elementar deve conter a cláusula PICTURE e pode conter valor

inicial. Utilizar a cláusula VALUE para inicializar uma área.

Regras de continuação de uma literal não numérica:

Comece a literal na cláusula VALUE com aspas. Escreva até a coluna 72. Coloque um hifen na coluna 7 da linha seguinte. Continue a partir da Área B, começando com aspas. Termine a literal com aspas e ponto.

PROCEDURE DIVISION.

Codificar na Área A terminando com ponto. É dividida em parágrafos. Cada parágrafo é um módulo ou rotina,

independente, que inclui uma série de intruções destinadas a executar um conjunto de operações.

Os nomes dos parágrafos devem ser codificados na Área A, podem ser formados só por digitos e, devem ser únicos no programa. Devem ser informativos.

As instruções e comandos na PROCEDURE DIVISION devem começar na Área B.

COMANDO OPEN

Permite o acesso a arquivos de entrada e saída em um programa e tem o seguinte formato:

OPENINPUT ou OUTPUT nome-arquivo1...

Indica quais os arquivos serão de entreda e quais de saída.

Torna os arquivos disponíveis para processamento.

Page 20: Conceitos Básicos COBOL

COMANDO READ

Transmite dados do dispositivo de entrada, designado na ENVIRONMENT DIVISION para uma área de memória definida na FILE SECTION ou na WORKING-STORAGE SECTION ( READ INTO)

READ nome-arquivo1 AT END comando1 [ NOT AT END ] comado 2

[ END-READ ]

nome-do-arquivo especificado no comando READ é o mesmo utilizado no SELECT, na FD e no OPEN.

Ao executar o comando READ após a leitura do último registro a sequência de execução é desviada para o comando seguinte à cláusula AT END.

COMANDO PERFORM ... UNTIL (estruturando o programa)

PERFORM nome-procedimento-1UNTIL condição-1[ END-PERFORM ]

Transfere o controle para o procedimento ou parágrafo especificado. Repete a execução até a condição definida na condição-1 for satisfeita.

Exemplo: PERFORM 200-ROT-CALCUNTIL HÁ-MAIS-REGISTROS = ‘NÃO’

Podemos utilizar o PERFORM em linha e o terminador de escopo END-PERFORM.

Exemplo:PERFORM UNTIL W-CHAVE = 99

MOVE CAMPO TO REG-SAIDAWRITE REG-SAIDAREAD ARQ-ENT AT END MOVE 99 TO W-CHAVE

END-PERFORM.

Page 21: Conceitos Básicos COBOL

COMANDO PERFORM ... THROUGH

PERFORM nome-parágrafo-1[ THROUGH ] nome-parárgrafo-2[ THRU ][ END-PERFORM ]

PERFORM THRU realiza todos os comandos a partir do nome-parágrafo-1 até o comando imediatamente anterior ao nome-parágrafo-2, quando retorna para a instrução seguinte ao comando PERFORM.

Podemos misturar os dois tipos de PERFORM (UNTIL e THROUGH) bem como o PERFORM em linha em um mesmo comando.

PERFORM nome-parágrafo-1[ THROUGH ][ THRU ] nome-parárgrafo-2

inteiro-1identificador-1 TIMES

Repetirá o desvio ao nome-parágrafo-1 por N vezes.

COMANDO PERFORM VARYING

PERFORM nome-parágrafo-1[ THROUGH ][ THRU ] nome-parárgrafo-2

VARYING identificador-1 FROM identificador-2 inteiro-1

BY identificador-3 inteiro-2

UNTIL condição-1 inteiro-1

Page 22: Conceitos Básicos COBOL

OPÇÃO PERFORM WITH TEST AFTER | BEFORE

PERFORM nome-procedimento-1WITH TEST BEFORE | UNTIL condição-1

AFTER

As opções BEFORE e AFTER permitem que controlemos se condição-1 é para ser verificada antes ou depois de executar a rotina especificada em nome-procedimento-1.

COMANDO GO TO

GO TO nome-parágrafo

Executa um desvio incondicional para o nome-parágrafo, alterando definitivamente o fluxo do processamento.

COMANDO EXIT

nome-parágrafo.

EXIT.

Indica para o PERFORM, o fim de execução de uma rotina.

COMANDO CLOSE

CLOSE nome-do-arquivo-1 ...

Libera os arquivos que foram adquiridos em tempo de OPEN.

COMANDO STOP RUN

Indica o final da execução do programa para o Sistema Operacional, encerrando operações pendentes e liberando todas as áreas utilizadas.

Todo programa deve conter um comando STOP RUN.

Page 23: Conceitos Básicos COBOL

COMANDO MOVE

MOVE identificador-1 TO identificador-2

Move o conteudo do campo ou constante indicada em identficador-1 para o campos indicado em identificador-2.

Cuidados a serem tomados com o comando MOVE

1. Quando os campos emissores e recpectores tem PICs diferentes.2. Movendo a parte inteira de campos numéricos3. Movendo a parte decimal de campos numéricos4. Truncamentos5. Movendo literais numéricas para campos numéricos6. Movendo não-numericos ou alfanuméricos7. Movendo itens de grupo e elementar8. Movendo constantes figurativas ou literais.

MOVE CORRESPONDING item-grupo-1 TO item-grupo-2 CORR

COMANDO WRITE

Pega os dados na área de saída da DATA-DIVISION e os transfere para o dispositivo especificado na ENVIRONMENT DIVISION e, aberto como OUTPUT.

WRITE nome-registro-1

Exemplo: WRITE REGISTRO-S.

OBS.: Lemos arquivos e gravamos registros.

Page 24: Conceitos Básicos COBOL

COMANDOS ARITIMÉTICOS

ADD identificador-1 TO identificador-2literal-1

ADD identificador-1 GIVING identificador-2literal-1

ADD identificador-1 TO identificador-2literal-1 GIVING identificador-3

SUBTRACT identificador-1 FROM identificador-2literal-1

SUBTRACT identificador-1 FROM identificador-2literal-1 GIVING identificador-3

MUTIPLY identificador-1 BY identificador-2literal-1

MUTIPLY identificador-1 BY identificador-2literal-1

GIVING identificador-3

DIVIDE identificador-1 BY identificador-2literal-1

DIVIDE identificador-1 INTO identificador-2literal-1

DIVIDE identificador-1 INTO identificador-2literal-1GIVING identificador-3[ REMAINDER ] identificador-4[ ROUNDED ]

Page 25: Conceitos Básicos COBOL

COMANDO ARITMÉTICO seguido por ON SIZE ERROR comando-1

Exemplos:

ADD 1 TO W-ACUM.

SUBTRACT 50 FROM SALDO-R-ENTRADA

MULTIPLY .067 BY SALARIO.

OBS.:cuidado com o tamanho dos campos que receberão os resultados das operações.Operação envolvendo campos não numéricos causam ‘data exception’.

Page 26: Conceitos Básicos COBOL

COMANDO COMPUTE

Usa símbolos aritméticos em vez de verbos, oferecendo um modo mais compacto para a execução de operações aritméticas.

COMPUTE resultado = expressão aritmética

Símbolos permitidos:

+ adição- subtação* multiplicaçã

o/ divisão** exponencia

ção Permite o uso de ROUNDED e ON SIZE ERROR

COMANDO IF

Verifica se a condição especificada é verdadeira e, se for executa a próxima instrução, senão executa o comando especificado na cláusula ELSE ou após o primeiro ponto.

IF condição[ THEN ] comando-1

[ NEXT SENTENCE ][ CONTINUE ]

[ ELSE ][ NEXT SENTENCE ][ CONTINUE ]

comando-2[ END-IF ]

As condições simples que podem ser testadas são as seguintes:

= (ou IS EQUAL TO) (identificador-2(identificador-1) < (ou IS LESS THAN) literal 1

> (ou IS GREATER THAN)

Page 27: Conceitos Básicos COBOL

A cláusula ELSE é opcional. Vários comandos podem ser escritos após cada cláusula IF ou ELSE. Podemos também utilizar um terminador de escopo END-IF.

É permitido o uso de condicionais OR ou AND em comando IF

Outros teste possíveis:

POSITIVE, NOT NEGATIVE, NEGATIVE ou ZERO

NUMERIC, ALPHABETIC

Page 28: Conceitos Básicos COBOL

COMO UTILIZAR A IMPRESSÃO

A função de edição de dados permite

impressão de pontos decimais

99.99.

supressão de zeros à esquerda

ZZ99.

impressão de cifrões e vírgulas

$Z.ZZ9,99

impressão de asteriscos

$***.99

impressão de sinais de mais e de menos

-999 ou 999+

impressão de símbolos de débito e crédito

999CR ou 999DB

impressão de zeros ou espaços.

999BB99BB9999XBXBX(8)

Page 29: Conceitos Básicos COBOL

QUADRO RESUMO

campo emissor ítem de relatórioPICTURE CONTÉUDO PICTURE RESULTADO

EDITADO9(6) 123456 $ZZZ.ZZZ,99 $123.456,009999V99 0012v99 $Z.ZZZ,99 $ 12,349(5)V99 00001v23 $**.***,99 $*****1,23S9(6) 012345 +Z(6) - 12345S9(6) 123456 (+) -Z(6) 123456S9999V99 1234v56 (+) +Z(4).99 + 1234.56S999 123 ZZZ- 123-9(6) 123456 99BBBB9999 12 3456S99 05 (-) $ZZ.99DB $ 5,00DB999 123 999000 123000S99V99 12v34 (-) $ZZ.99CR $12.34CR

COMANDO WRITE PARA IMPRESSAO DE RELATÓRIOS

WRITE nome-registro-1 FROM identificador-1AFTER [ ADVANCING ] inteiro-1 [ LINES/LINES ]BEFORE identificador-2 [ PAGE ]

O tamanho do registro deve ser definido com uma posição a mais, para conter o caractere de controle de impressão.

COMO OBTER A DATA DO DIA

Utilizar o comando DATE

01 WS-DATA.05 ANO-PROC PIC 99.05 MES-PROC PIC 99.05 DIA-PROC PIC 99.

PROCEDURE DIVISION.

1000-INICIO.

ACCEPT WS-DATA FROM DATE.

Page 30: Conceitos Básicos COBOL

COMANDO INITIALIZE

INITIALIZE item-de-grupo.

NOME DE CONDIÇÕES

Nome de condição é uma palavra definida na DATA DIVISION como nível 88, que indica um possível valor para o campo.

Exemplo:

05 EST-CIVIL PIC X.88 SOLTEIRO VALUE ‘S’.88 CASADO VALUE ‘C’.

PROCEDURE DIVISION.

IF SOLTEIRO CONTINUEELSE MOVE ‘CASADO’ TO OBS-LDETEND-IF.

Page 31: Conceitos Básicos COBOL

TÉCNICAS DE VALIDAÇÃO DE DADOS

COMANDO INSPECT

É necessário validar informações recebidas por entradas sobre as quais não temos controle da qualidade dos dados.

Podemos utilizar as opções NUMERIC ou ALPHABETIC do comando IF, ou ainda o comando INSPECT

Formato 1:

INSPECT identifcador-1 TALLYING

identificador-2 FOR ALL identificador-3LEADING literal-1

CHARACTERS

BEFORE INITIAL identificador-4AFTER literal-2

Conta o número de ocorrências de um determinado caractere emum campo.

Substitui ocorrências específicas de um determinado caractere por um outro caractere.

ALL - toda ocorrência do caractere especificado no campo será contada.

LEADING - serão contadoas todas as ocorrências do caractere especificado que precedem qualquer outro.

CHARACTERS - todos os caracteres detro do campo serão contados. Esta opção pode ser usada para determinar o tamanho do campo.

Page 32: Conceitos Básicos COBOL

Formato 2:

INSPECT identifcador-1 REPLACING

CHARACTERS

ALLLEADING identificador-2FIRST literal-1

BY identificador-3 BEFORE INITIALidentificador-4literal-2 AFTER literal-3

Substitui as ocorrências de um determinado caractere por outro caractere. Ele não conta o número de ocorrências de qualquer caractere.

ALL, LEADING e CHARACTERS tem significado análogos aos do Formato 1. Se FIRST for especificado no Formato 2, então a primeira ocorrência da literal-1 será substituída pela literal-2. Ou seja, se a literal-1 estiver presente no campo, ocorrerá uma única substituição de um caractere.

Page 33: Conceitos Básicos COBOL

COMANDOS STRING E UNSTRING

STRING permite que realizemos a concatenação de campos.

STRING identificador-1 ....literal-1

DELIMITED BY identificador-2literal-2SIZE

INTO identificador-3END-STRING

Exemplo:

01 ENDERECO3 PIC X(30).01 REG-E.

05 CIDADE PIC X(20).05 ESTADO PIC X(02).05 CEP PIC 9(05).

BRASILIA DF01000

STRING CIDADE DELIMITED BY ‘ ‘ ‘,’ DELIMITED BY SIZE ESTADO DELIMITED BY SIZE ‘,’ DELIMITED BY SIZE

CEP DELIMITED BY SIZE INTO ENDERECO3

DISPLAY ENDERECO3

BRASILIA,DF,01000

Page 34: Conceitos Básicos COBOL

COMANDO UNSTRING

Usado para converter os dados digitados em uma forma mais apropriada para o armazenamento . Por exemplo para retirar separadores de textos.variáveis.

UNSTRING identificador-1 [ DELIMITED BY [ ALL ] identificador-2

literal-1

OR | ALL identificador-3 literal-2

INTO identificador-4 ...[ END-UNSTRING ]

Exemplo:

UNSTRING ENDERECO3DELIMITED BY ‘,’INTO CIDADE

ESTADOCEP

COMANDO EVALUATE

Permite utilizar a estrutura de casos que é uma estrutura lógica de controle, testando uma série de condições.

Permite que a sequência de casos e a identificação da rotina que será ativada sejam codificadas mais claramente.

A cláusula WHEN OTHER será executada quando as condições não forem satisfeitas.

EVALUATE identificador-1expressao-1

WHEN condição-1 comando-imperativo-1WHEN OTHER comando-imperativo-2

[ END-EVALUATE ]

Page 35: Conceitos Básicos COBOL

Exemplo:

EVALUATE ESTADO-CIVILWHEN 1 PERFORM ROT-SOLTEIROWHEN 2 PERFORM ROT-CASADOWHEN 3 PERFORM ROT-DESQUITADOWHEN OTHER PERFORM ROT-ERRO

END-EVALUATE

DEFININDO E UTILIZANDO TABELAS

A CLÁUSULA OCCURS

Usamos para indicar a ocorrência repetida de campos que têm o mesmo formato. Tem os seguintes usos:

Para uma série de campos de entrada ou saída, tendo todos o mesmo formato.

Uma série de totais na WORKING-STORAGE, onde são acumuladas quantidades; após serem acumulados todos os dados, os totais podem ser impressos.

Para uma tabela na WORKING-STORAGE, a ser acessada por cada registro de entrada; com uma tabela, usamos o contéudo de algum campo de entrada para ‘procurar’ os dados desejados na tabela.

Pode ser usada somente nos níveis de 02 a 49.

Exemplos:

01 REG-TEMP.05 TEMPERATURA OCCURS 24 TIMES PIC 9(3).

01 IMPOSTO.05 GRUPO-X OCCURS 15 TIMES.

10 CIDADE PIC X(06).10 ALIQ-IMP PIC V999.

Page 36: Conceitos Básicos COBOL

SUBSCRITOS

Acesso as ocorrências dos campos se dá através de um subscrito.

Regras de codificação para subscritos: deve vir entre parenteses, sem espaços dentro dos parenteses.

Exemplo 1:

ADD TEMPERATURA (2, 2) TO TOTAL.

Exemplo 2:

WORKING-STORAGE SECTION

01 AREAS-TRAB.05 SUB PIC 99 VALUE 01.

PROCEDURE DIVISON.

MOVE TEMPERATURA (SUB) TO TEMP-S.

Subscrito pode ser um nome de dado com valor numérico inteiro, ou uma literal numérica com um valor inteiro. O subscrito pode também ter um valor relativo, isto é um nome de dado ou inteiro. Esse tipo é chamado de subscrito relativo.

Page 37: Conceitos Básicos COBOL

CLÁUSULAS REDEFINES E VALUE

Quando usamos a cláusula OCCURS não podemos redefinir uma entrada.

Portanto precisamos primeiro redefini-la para depois usar OCCURS.

Exemplo:

WORKING-STORAGE SECTION.

01 TAB-MESES.05 LISTAMES PIC X(36) VALUE

‘JANFEVMARABRMAIJUNJULAGOSETOUTNOVDEZ’.05 MÊS REDEFINES LISTAMES

OCCURS 12 TIMES PIC X(3).

01 SUB PIC 99 VALUE 0.

PROCEDURE DIVISION.

PERFORM IMPRIMEVARYING SUB FROM 1 BY 1 UNTIL SUB > 12.

IMPRIME.

MOVE MÊS (SUB) TO MÊS-S.

WRITE REG-IMPR FROM LINHA-SAFTER ADVANCING 2 LINES.

Também podemos utilizar a cláusula OCCURS para:

1. indicar a ocorrência repetida de campos de entrada ou de saída dentro da FILE SECTION.

2. Armazenar arrays ou áreas de total dentro da WORKING-STORAGE.

Page 38: Conceitos Básicos COBOL

COMANDO SEARCH

SEARCH identificador-1[ ATE END comando-imperativo-1 ]WHEN condição-1 comando-imperativo-2

NEXT SENTENCE[ END-SEARCH ]

Exemplo:

SEARCH ITENS-TABAT END MOVE 0 TO DT-IMPWHEN CEP-E = WS-CEP (X1)

COMPUTE ....MOVE ...WRITE ...

END-SEARCH.

A opção AT END no SEARCH :

A cláusula AT END especifica o que deve ser feito quando a tabela for pesquisada inteiramente sem que nenhuma correspondência seja encontrada.

A cláusula INDEXED BY e o comando SEARCH

Quando se usa o comando SEARCH, as entradas das tabelas devem ser especificadas com um índice em vez de um subscrito. O índice é usado exatamente como um subscrito, mas é definido juntamente com as entradas da tabela, como parte da descrição OCCURS.

Exemplo:

01 TAB-IMP.05 ITENS-TAB OCCURS

1000 TIMES INDEXED BY X1.10 WS-CEP PIC 9(5).10 WS-IMP PIC 9 V999.

OBS.: o contéudo de um índice é incrementado automaticamente pelo comando SEARCH, mas quando o utilizamos no PERFORM ... VARYING, devemos utilizar o comando SET para incrementa-lo.

Page 39: Conceitos Básicos COBOL

COMANDO SET

SET nome-indice TO inteiroUP BYDOWN BY

Exemplos:

SET X1 TO 3. move 3 em X1.SET X2 UP BY 1. soma 1 em X2. SET X5 DOWN BY 1. subtrai 1 de X5.

OBS.: Embora o SEARCH incremente automaticamente o índice, devemos inicializa-lo antes de sua utilização.

Page 40: Conceitos Básicos COBOL

COMANDO SEARCH ALL

Com o formato semelhante ao SEARCH o comando SEARCH ALL é usado para efetuar busca binária.

SEARCH ALL identificador-1[ AT END comando-imperativo-1 ]WHEN nome-de-dado1 IS EQUAL TO identificador-2

IS = literal-1 nome-de-condição-1 expr.-numérica-1

AND nome-de-dado2 IS EQUAL TO identificador-3 IS = literal-2

nome-de-condição-2 expr.-numérica-2

comando-imperativo-2NEXT SENTENCE

[ END-SEARCH ]

OBSERVAÇÔES:

1. só pode testar uma condição de igual.

2. se usarmos uma condição composta: (a) cada parte só pode testar uma condição de igual e (b) só são permitidos ANDs.

3. só pode ser usada uma cláusula WHEN.

Page 41: Conceitos Básicos COBOL

UTILIZANDO TABELAS COM MAIS DE UM NÍVEL

Podemos utilizar até sete níveis na composição de uma tabela.

Para cada nível utilizamos um subscrito (índice).

O primeiro subscrito refere-se á cláusual OCCURS de nível principal; o segundo à de nível secundário, etc...

Os subscritos podem ser inteiros positivos ou uma variável com

contéudo inteiro positivo.

Page 42: Conceitos Básicos COBOL

Exemplo:

01 CLASSESS.05 SÉRIES OCCURS 10 TIMES. 10 ALUNOS OCCURS 5 TIMES

PIC 9(3).

utilizando...

MOVE ALUNOS (3,4) TO CAMPO2.

move o total de alunos da quarta classe da terceira-série.

OBSERVAÇÕES:

OCCURS em múltiplos níveis:

Podem ser usados para um array ou uma tabela

O nome de dado de mais baixo nível do OCCURS ou um ítem subordinado a ele é usado para acessar um entrada no array ou tabela.

Se usarmos SEARCH para acessar uma tabela de múltiplos níveis, devemos usar INDEXED BY para todos os níveis.

O identificador usado com o comando SEARCH deve ser o de mais baixo nível de OCCURS e, somente este índice será incrementado pelo SEARCH.

Page 43: Conceitos Básicos COBOL

COMANDO DISPLAY

Envia as informações definidas em identificador-1 ou literal-1 para o dispositivo especificado.

DISPLAY identificador-1[ UPON CONSOLE ] literal-1 [ SYSOUT ]

[ nome-1 ]

Exemplo:

DISPLAY MSG-ERRO UPON CONSOLE.

DISPLAY ‘PGM10B - FINAL DE PROCESSAMENTO’.

COMANDO ACCEPT

Executa uma operação de entrada de dados. Aplica-se para entradas pouco volumosas, como um parâmetro ou data.

ACCEPT identificador [ FROM nome-dispositivo ]

ACESSANDO ARQUIVOS EM DISCO

Arquivos em disco podem ter seus dados lidos e atualizados diretamente ou através de campos índices (arquivos indexados).

LEITURA SEQUENCIAL SEM ATUALIZAÇÃO:

procedimento igual ao realizado para arquivos sequenciais.

LEITURA SEQUENCIAL COM ATUALIZAÇÃO:

abrir o arquivo como I-O, ler os registros sequencialmente e, quando um registro for sofrer atualizações, modifica-lo e regravar com REWRITE

REWRITE nome-registro

Page 44: Conceitos Básicos COBOL

CRIAÇÃO DE ARQUIVO INDEXADO:

Os registros devem estar em ordem ascendente pelo CAMPO-CHAVE.

O procedimento de criação é semelhante ao utilizado para criação de arquivos sequenciais.

O QUE MUDA NO PROCESSAMENTO DE ARQUIVOS INDEXADOS

COMANDO SELECT

SELECT nome-de-arquivo-1 ASSIGN TO nome-externo-1 [ ORGANIZATION IS ] INDEXED [ ACCESS MODE IS SEQUENTIAL | RANDOM ] RECORD KEY IS nome-de-dados-1

COMANDO WRITE

WRITE nome-de-registro-1 [ FROM identificador-1 ] [ INVALID KEY comando-imperativo ] [ NOT INVALID KEY comando-imperativo ]

[ END-WRITE ]

Utilizar o ACCESS MODE IS SEQUENTIAL no comando SELECT.

COMANDO READ

READ nome-de-arquivo-1 [ INVALID KEY comando-imperativo ] [ NOT INVALID KEY comando-imperativo ]

[ END-READ ]

Utilizar o ACCESS MODE IS RANDOM no comando SELECT.

Page 45: Conceitos Básicos COBOL

COMANDO REWRITE

REWRITE nome-de-registro-1 [ FROM identificador-1 ] [ INVALID KEY comando-imperativo ] [ NOT INVALID KEY comando-imperativo ]

[ END-REWRITE ]

Não modificar o campo-chave.

COMANDO DELETE

DELETE nome-de-arquivo-1 RECORD [ INVALID KEY comando-imperativo ] [ NOT INVALID KEY comando-imperativo ]

[ END-DELETE ]

Antes do processamento de atualização ou de exclusão de um registro, o mesmo deve ser lido.

Page 46: Conceitos Básicos COBOL

A CLÁUSULA FILE STATUS

Permite determinar qual o tipo de erro que ocorreu no processamento do arquivo indexado ou VSAM.

Deve ser incluída como a última cláusula do SELECT.

SELECT ...[ FILE STATUS IS nome-de-dados ]

Nome-de-dados: definir na WORKING-STORAGE SECTION com alfanumérico de 2 posições.

Exemplo:

SELECT ARQ-INDEXFILE STATUS IS WS-STATUS.

WORKING-STORAGE SECTION.01 WS-STATUSPIC XX.

PROCEDURE DIVISION.

READ ARQ-INDEXINVALID-KEY PERFORM 900-ERRO

END-READ.

IF WS-STATUS = ‘00’PERFORM 150-PROCESSA

ELSEDISPLAY ‘ARQ-INDEX - FILE STATUS ‘

WS-STATUS.

PRINCIPAIS FILE STATUS00 NORMAL02 ALTERNATE KEY04 ERRO DE TAMANHO NO READ10 FIM DE ARQUIVO (READ SEQUENCIAL)21 CHAVES FORA DE SEQUENCIA (CRIAÇÃO)22 CHAVE DUPLICADA (WRITE)23 REGISTRO NÃO ENCONTRADO (READ RANDOM OU

DYNAMIC)30 ERRO DE I/O