Uploaded by bruno.fdm93

Cobol PT

advertisement
Outubro de 2006
Linguagem COBOL
Manual de Formação
Linguagem COBOL
Manual de Formação
Índice
1. Linguagem de Programação COBOL ................................................................................................................3
1.1. Formato das Instruções ..............................................................................................................................3
2. Estrutura de um Programa em COBOL .............................................................................................................4
3. DIVISIONS. Estrutura Básica .............................................................................................................................5
3.1. Identification Division ..................................................................................................................................5
3.1.1. Program-ID. Programa .....................................................................................................................5
3.2. Environment Division ..................................................................................................................................5
3.2.1. Configuration Section .......................................................................................................................5
3.3. Data Division ...............................................................................................................................................6
3.3.1. Working-Storage Section ..................................................................................................................6
3.4. Procedure Division ....................................................................................................................................15
3.4.1. Instruções .......................................................................................................................................16
3.4.2. Manuseamento de Ficheiros ..........................................................................................................22
3.4.3. Data Division...................................................................................................................................23
3.4.4. File Section .....................................................................................................................................23
3.4.5. Label Records.................................................................................................................................24
3.4.6. Record Contains .............................................................................................................................24
3.4.7. Block Contains ................................................................................................................................24
3.4.8. Data Record[S] ...............................................................................................................................24
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-2-
Linguagem COBOL
Manual de Formação
1. Linguagem de Programação COBOL
1.1. Formato das Instruções
As instruções que constituem um programa COBOL, escrevem-se respeitando o formato
do antigo cartão perfurada de 80 colunas.
Nesse dito cartão, estipularam-se duas áreas para o começo de escrita:
 Margem A - da coluna 8 à 11;
 Margem B - da coluna 12 à 72.
As restantes colunas têm significados especiais:
 Coluna 1- 6
-
Servem para uma numeração de registos. Quando se usavam cartões perfuradas, indicava a ordem
dos cartões. A numeração é feita hoje tal como se fazia na altura: de 10 em 10 para permitir
intercalar novos cartões.
 Coluna 7
-
Para indicar o começo de uma linha de comentários utiliza-se o “*”. Em COBOL não se pode
poscomentar uma linha de programa.
 Colunas 73 - 80
-
Utilizavam-se no caso dos cartões perfurados para definir um código de 8 caracteres que
representava o nome do programa.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-3-
Linguagem COBOL
Manual de Formação
2. Estrutura de um Programa em COBOL
Um programa COBOL, está estruturado em quatro partes principais chamados DIVISÕES.
 IDENTIFICATION DIVISION
Identificação do programa
 ENVIRONMENT DIVISION
Descrição de ambiente
 DATA DIVISION
Definição de dados e variáveis
 PROCEDURE DIVISION
Instruções do programa
A identificação das DIVISION, escrevem-se sempre na margem A e devem existir todas, como
depois se verá, uma DIVISION pode ficar vazia. Termina-se com um ponto.
Cada DIVISION pode estar dividida em secções chamadas SECTION’s definidas por um nome,
os quais também se escrevem na margem A seguidos de um espaço, e a palavra SECTION.
Termina-se com um ponto.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-4-
Linguagem COBOL
Manual de Formação
3. DIVISIONS. Estrutura Básica
3.1. Identification Division
3.1.1. Program-ID. Programa
De codificação obrigatória.
Identifica o programa atribuindo-lhe um nome. Este nome será utilizado pelo
processador para tratar a execução do programa. Em concreto aparecerá como
referência em caso de anomalia de execução.
[AUTHOR. nome.]
[DATE-WRITTEN. data.]
[DATE-COMPILED. data.]
…
Elementos informativos, que o compilador considera como comentários.
3.2. Environment Division
3.2.1. Configuration Section
[SOURCE-COMPUTER. modelo.]
[OBJECT-COMPUTER. modelo.]
Estes
também
são
elementos
informativos,
alguns
compiladores
emitem
mensagens de aviso.
[SPECIAL-NAMES.]
Serve para assignar nomes a entidades standard do COBOL, ou fazer trocas
internas de nomes de entidades:
 DECIMAL-POINT IS COMMA.]
Especifica que se substitua o ponto decimal por vírgula.
SPECIAL-NAMES escreve-se na margem A, DECIMAL-POINT... na margem B.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-5-
Linguagem COBOL
Manual de Formação
3.3. Data Division
3.3.1. Working-Storage Section
Nesta secção definem-se dados complementares (itens) para o processo que vai
executar o programa, tais como contadores, indicadores etc.
Não se pode utilizar na codificação nenhum elemento que não tenha sido definido
nesta secção e outras que estão relacionadas com os dados.
A definição de um item nesta secção é constituída pelos seguintes elementos:
 Número de nível;
 Nome do item;
 Cláusula PICTURE:
-
Carácter de definição.
 Um ponto como terminador.
3.3.1.1. Nome do Item
Será uma cadeia de caracteres de comprimento máximo 32.
Pode conter letras e números, mas não espaços nem caracteres especiais
excepto ‘-‘.
Pode-se fazer uma reserva de espaço de memória sem assignar nome,
utilizando a palavra reservada FILLER.
3.3.1.2. Cláusula PICTURE
Define o formato do item com ajuda do carácter de definição.
Carácter de definição.
Repete-se tantas vezes como a capacidade que se queira assignar ao
item. Termina-se com um ponto.
 A para conteúdo exclusivamente alfabético;
 9 para conteúdo exclusivamente numérico;
 V em itens numéricos, separa parte inteira e decimal;
 S em itens numéricos, indica número com sinal;
 X para conteúdo alfanumérico.
NN NUMERO
PICTURE 999.
NN NOME
PIC XXXXXXXXXXXXXXXXXXXX.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-6-
Linguagem COBOL
Manual de Formação
A repetição também se pode indicar desta forma:
NN NUMERO PICTURE 999.
NN NUMERO PIC 9(3).
NN NOME PIC XXXXXXXXXX.
NN NOME PIC X(10).
Os caracteres X e 9 não são combináveis na mesma PICTURE.
A instrução:
 NN NUMERO PIC 999
-
Define um item numérico inteiro de três dígitos.
 NN NUMERO PIC 9(5)V9(3).
-
Define um item numérico decimal de oito dígitos, dos quais cinco constituem a parte
inteira e três a decimal.
A definição:
 NN NUMERO PIC 9(3).
-
Define um número inteiro de três dígitos, mas não tem especificado o sinal, o
conteúdo passará de 999 a 0 e depois a 1, 2, etc., se se utiliza como contador; não
admitirá valores negativos. Para que um item numérico admita tais valores, tem que
ser definido com:
 NN NUMERO PIC S9(3).
Os itens numéricos em COBOL não podem ter mais de 15 dígitos.
 Z - troca zero não significativo por espaço;
 + - troca zero não significativo por +;
 - - troca zero não significativo por -;
 * - troca zero não significativo por *;
 $ - troca Zero não significativo por $.
Estes caracteres são combináveis com 9, mas os itens definidos com estes
caracteres não se podem utilizar em operações matemáticas ou de
comparação.
3.3.1.3. Número de Nível
Permite a subdivisão de um item em ‘partes’, a cada uma das quais se pode
atribuir um nome. O item assim subdividido pode-se processar como um todo ou
processar cada uma das ‘partes’.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-7-
Linguagem COBOL
Manual de Formação
Supondo um item MORADA composto por Rua, número da porta, a localidade e
o
país,
pode
aparecer
a
necessidade
de
processar
os
elementos
separadamente. O COBOL permite a subdivisão de MORADA mediante o uso
de números de nível.
Os números de nível vão desde 01 a 49, sendo 01 o nível mais alto e 49 o mais
baixo, de modo que às subdivisões de MORADA se vão dar os nomes RUA,
NUM, LOC e PAIS, poder-se-á escrever:
 NN MORADA
 NN+1 RUA
 NN+1 NUM
 NN+1 LOC
 NN+1 PAIS
Afectando-as do mesmo número de nível NN+1, para indicar uma subdivisão do
item MORADA de nível NN.
Em:
 NN MORADA
 NN+1 RUA
 NN+1 NUM
 NN+1 LOC
 NN+1 PAIS
 NN NOME
NOME já não seria uma subdivisão de MORADA, mas o seu nível escrever-seia na mesma coluna que as restantes subdivisões, então seria assim:
 NN MORADA
 NN+1 RUA
 NN+1 NUM
 NN+1 LOC
 NN+1 PAIS
 NN+1 NOME
Ao escrever itens subdivididos, temos de ter em conta que o item que se
subdivide não pode levar PICTURE. Esta é atribuída ao nível das subdivisões,
desde que não sejam também subdivididas.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-8-
Linguagem COBOL
Manual de Formação
Um item dado, pode-se subdividir em elementos alfabéticos e/ou numéricos
e/ou alfanuméricos.
Os itens subdivididos chamam-se itens de grupo, e os que levam PICTURE,
elementares.
01 MORADA.
02 RUA
PIC X(15).
02 NUM
PIC 999.
02 LOC
PIC X(30).
02 PAIS
PIC X(30).
01 NOME PIC X(25).
Se a um item se atribui o nível 01, escreve-se na margem A e o NOME e resto
da definição na margem B. Os níveis 02 a 49 escrevem-se sempre na margem
B.
Um item de grupo pode conter, por sua vez, itens de grupo:
01
CLIENTE.
02 DNI
PIC X(15).
02 DADOS-PESSOAIS.
03
NOME
PIC X(25).
03
APELIDOS
PIC X(50).
03
MORADA.
04
RUA
PIC X(15).
04
NUM
PIC 999.
04
LOC
PIC X(30).
02 TIPOCART
PIC XX.
02 NUMCART
PIC X(20).
Ode DNI, DADOS-PESSOAIS, TIPOCART e NUMCART são subdivisões de
CLIENTE; NOME, APELIDOS e MORADA de DADOS-PESSOAIS e RUA, NUM,
LOC de MORADA.
Nota importante:
Dado que no COBOL não se concebem itens sem natureza, a um item de grupo
assigna-se PICTURE alfanumérica, o que terá que ser tido em conta ao tratálos.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
-9-
Linguagem COBOL
Manual de Formação
3.3.1.4. Qualificadores de Nome de Item
Em princípio não se pode repetir o nome de um item, excepto se é parte de um
item de grupo. O nome do item de grupo usa-se como qualificador com a
conjunção OF.
01 CLIENTE.
02 DNI
PIC X(15).
02 DADOS-PESSOAIS.
03 NOME
PIC X(25).
03 APELIDOS
PIC X(50).
03 MORADA.
04 RUA
PIC X(15).
04 NUM
PIC 999.
04 LOC
PIC X(30).
04 PAIS
PIC X(30).
02 TIPOCART
PIC XX.
02 NUMCART
PIC X(20).
01 PROVEDOR.
02 DNI
PIC X(15).
02 DADOS-PESSOAIS.
03 NOME
PIC X(25).
03 APELIDOS
PIC X(50).
03 MORADA.
04 RUA
PIC X(15).
04 NUM
PIC X(30).
04 LOC PIC X(30).
04 PAIS
PIC X(30).
Para distinguir, em COBOL de que DNI se trata, numa instrução da
PROCEDURE DIVISION, escreve-se DNI OF PROVEDOR.
Para mencionar a RUA, sem dificuldades:
RUA OF MORADA
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 10 -
Linguagem COBOL
Manual de Formação
Não basta:
RUA OF MORADA OF DADOS-PESSOAIS
E tem de se por:
RUA OF MORADA OF DADOS-PESSOAIS OF CLIENTE
3.3.1.5. Assignação de Valores na Definição
A definição de um item não pressupõe nada sobre o seu conteúdo; se se deseja
estabelecer um valor inicial, pode-se empregar a cláusula VALUE.
01 NUMERO1 PIC S9(5)
VALUE -12.
01 NUMERO2 PIC 9(3)V99
VALUE 1.25.
01 NOME1
PICX(15)
VALUE ’PEPE’.
01 CADENA1
PIC X(5)
VALUE ‘00000’.
Onde os valores a atribuir escrevem-se entre aspas (simples ou duplas) se se
trata de valores não numéricos.
Regra geral, só se pode usar a cláusula VALUE nos itens elementares, sempre
que não estão referenciados numa cláusula OCCURS (veja-se a definição de
tabelas mais abaixo).
Certos valores podem-se atribuir mediante as chamadas constantes figurativas
SPACES, ZEROS:
01 CADENA1 PIC X(5) VALUE ZEROS.
Ou se especificam por repetição de um carácter determinado:
01 CADENA2 PIC X(20) VALUE ALL ‘*’.
3.3.1.6. A Cláusula REDEFINES
Em ocasiões pode ser necessário tratar um dado como composto de vários
outros. Isto pode ser resolvido, como já se viu, mediante a definição de um item
subdividido ou redefinindo-o.
Supondo que se tratara de processar o ano como composto de século e ano
dentro de século, no primeiro caso fazia-se:
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 11 -
Linguagem COBOL
Manual de Formação
01 DATA.
02 SECULO
PIC 99.
02 ANO
PIC 99.
Com o que se poderia tratar os DADOS DATA, SECULO e ANO, pelo que teria
que ter-se em conta que DATA é um item alfanumérico.
A alternativa seria definir DATA como item numérico e redefini-lo para subdividilo na forma:
01 DATA PIC 9(4).
01 DATA1 REDEFINES DATA.
02 SECULO
PIC 99.
02 ANO
PIC 99.
Assim consegue-se que DATA seja também um item numérico.
A redefinição não consome espaço adicional de memória; unicamente assigna
um novo nome a um item ou a zonas de um item, já definido.
As redefinições devem ir todas juntas e a continuação do item que redefinem e
devem levar o mesmo número de nível.
Qualquer item pode ser redefinido, incluindo os de uma subdivisão redefinida.
Se o item redefinidor não vai ser tratado, pode-se eliminar uma entrada na
tabela de símbolos, utilizando o nome FILLER:
01 DATA
PIC 9(4).
01 FILLER REDEFINES DATA.
02 SECULO
PIC 99.
02 ANO
PIC 99.
3.3.1.7. Representação Interna de Itens Numéricos
Os itens não numéricos ocupam em memória tantos bytes como posições que
se definiram.
Para os itens numéricos, existem três formas de armazenamento:
 DISPLAY
Por defeito: Um byte por cada dígito.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 12 -
Linguagem COBOL
Manual de Formação
01 NUMERO PIC 9(3) VALUE 23.
F0F0F2F3 em EBCDIC
 DECIMAL COMPACTADO
Dois dígitos por byte e sinal por defeito (F para positivo, C para negativo,
por defeito: sinal positivo).
01 NUMERO PIC 9(3) COMP-3 VALUE 123.
0123F
Ao calcular a dimensão em memória, há que ter em conta que o COBOL
só trabalha com bytes completos:
9(n) -> próximo par a n dividido por 2 -> l
l -> (I*2 )-1 -> 9(n)
Os itens numéricos de número par de dígitos ocupam o mesmo que os de
impar imediatamente superior.
 BINARIO.
Alocação de memoria por múltiplos de 2 bytes, segundo o número de
dígitos especificado.
01 NUMERO PIC 9(4) COMP.
3.3.1.8. Variáveis Múltiplas ou Tabelas
As tabelas (array noutras linguagens), definem-se especificando a ocorrência
múltipla num item dado, usando a cláusula OCCURS.
Quando se definem tabelas tem de se ter em conta duas coisas:
 O número de nível do item ao qual se vai aplicar a cláusula OCCURS não pode
ser 01.
01 FILLER.
02 TABELA OCCURS número
Onde número indica as vezes que se pode repetir TABELA, ou seja o número de
elementos do array. Número tem de ser um valor explícito.
 Não se podem assignar valores a um item definido com OCCURS.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 13 -
Linguagem COBOL
Manual de Formação
Para assignar valores aos elementos de uma tabela, redefine-se um item
elementar ou de grupo cujo valor se fará coincidir com a tabela. Suposto o caso de
querer definir uma tabela que contenha os dias de cada um dos meses do ano,
pode-se fazer:
01 DADOS-MESES.
03 FILLER P1C 99 VALUE 31.
03 FILLER PIC 99 VALUE 0.
………….
03 FILLER PIC 99 VALUE 31.
01 FILLER REDEFINES DADOS-MESES.
03 DIAS-MES OCCURS 12 P1C 99.
Ou também:
01 DAD0S-MESES PIC X(24)
VALUE ‘310031303130313130313031’.
01 FILLER REDEFINES DAD0S-MESES.
03 DIAS-MES OCCURS 12 PIC 99.
A referência a um elemento faz-se na forma TABELA (n), sendo n um valor que
pode ir entre 1 e número, e que pode ser um valor explícito ou o conteúdo de
uma variável numérica.
O COBOL não faz comprovação dos limites de um array, de modo que será o
programador que tem que controlar que o valor n ou índice se mantém no
intervalo correcto.
O item afectado pela cláusula OCCURS pode ser elementar:
01 FILLER.
DIAS-MES OCCURS 12 PIC 99.
Ou de grupo:
01 FILLER.
02 TABELA OCCURS número.
03 DADO1 PIC...
03 .............................
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 14 -
Linguagem COBOL
Manual de Formação
E, neste caso, as subdivisões podem, por sua vez, ser array’s.
A forma genérica da cláusula OCCURS é:
OCCURS n1 [TO n2] [DEPENDING ON item]
[INDEXED BY item]
Onde nº 1 é o número mínimo de elementos se a cláusula TO está presente ou
o total, em caso contrario, nº 2 é o máximo e o item numérico especificado na
cláusula DEPENDING ON controla a longitude actual do array e deverá ter um
valor que está entre os limites deste.
INDEXED BY permite a manipulação de tabelas através de índices internos,
variáveis internas de COBOL, que não se definem como itens.
3.4. Procedure Division
Nesta division contém as instruções de que consta o programa:
Escrevem-se na margem B.
As instruções podem-se agrupar em parágrafos identificados com um nome. O nome do
parágrafo escreve-se na margem A, pode ter até 32 caracteres de comprimento, e deve
terminar com um ponto.
Esta separação em parágrafos utiliza-se para executar sub-processos e invocá-los ou
saltá-los desde outros pontos do programa.
Em princípio, o COBOL não necessita de terminadores especiais de instrução, salvo
quando se terminam certas instruções ou se escreve a última instrução de um
parágrafo; neste caso termina-se com um ponto.
É conveniente que haja ao menos um nome de parágrafo no início da division; certos
compiladores acusam a sua falta como um erro severo.
Uma vez carregado o programa em memória, a execução começa na primeira instrução e
termina ao encontrar:
STOP RUN
Instrução que pode existir tantas vezes como as necessárias.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 15 -
Linguagem COBOL
Manual de Formação
3.4.1. Instruções
3.4.1.1. Instruções de Transferência de DADOS
3.4.1.1.1. MOVE
MOVE A TO B [C D....]
Onde B, C, D são itens de WORKING.
A pode ser o conteúdo de um item de WORKING, uma constante figurativa
ou um valor imediato (número ou literal).
MOVE 25 TO CONTA
MOVE CONTA TO CONTA2 CONTA3
MOVE SPACES TO CADEIA3
Na transferência, há que ter em conta o tipo de item receptor; pode-se
transferir um número a um campo alfanumérico, mas não a um alfabético e
pode-se transferir o conteúdo de um campo alfanumérico a um numérico,
sempre e quando o primeiro só contenha caracteres numéricos. As
conversões de formato só se fazem no caso de itens/valores numéricos.
No caso de valor ‘mais pequeno’, os campos não numéricos são
preenchidos com brancos peIa direita e os numéricos com zeros peIa
esquerda.
No caso de valor ‘maior’, os campos não numéricos são truncados pela
direita e os numéricos perdem dígitos significativos.
3.4.1.1.1.1. MOVE CORR
MOVE CORR[ESPONDING] A TO B
A e B são itens de grupo.
O movimento faz-se de forma que as subdivisões de B se carregam
com as de A do mesmo nome. Esta instrução terá de usar-se com
precaução, já que diferentes naturezas de itens nas áreas receptora
e emissora podem provocar o fim anormal do programa.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 16 -
Linguagem COBOL
Manual de Formação
3.4.1.1.1.2. SET
SET A to valor | item
Se A é uma variável interna, carrega A com o valor ou item
especificados.
3.4.1.2. Instruções Aritméticas.
3.4.1.2.1. ADD
ADD ATO B[CD …....]
Onde B, C, D são itens e A pode ser o conteúdo de um item ou um valor
imediato, soma A aos conteúdos dos itens referenciados por TO.
O conteúdo de A não muda.
ADD A B[C...] GIVING R
Onde R é um item e A, B.... podem ser conteúdos de itens de memória ou
valores imediatos, faz a soma A+B[C+D+....] e deposita em R. Os
conteúdos de A, B, C não variam.
3.4.1.2.2. SUBTRACT
SUBTRACT A FROM B[CD………..]
Onde B, C, D são itens e A pode ser o conteúdo de um item ou um valor
imediato, subtrai A aos conteúdos dos itens referenciados por FROM. O
conteúdo de A não muda.
SUBTRACT A FROM B GIVING R
Onde B e R são itens e A pode ser o conteúdo de um item ou um valor
imediato, efectua B-A e coloca o resultado em R.
Os conteúdos de A e B não variam.
SET UP \ DOWN BY
UP
SET A
BY item | valor
DOWN
Sendo A uma variável interna, incrementa | decrementa A no valor | item
especificado.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 17 -
Linguagem COBOL
Manual de Formação
3.4.1.2.3. MULTIPLE
MULTIPLE A BY B
Onde B é um item e A pode ser o conteúdo de um item ou um valor
imediato, multiplica o conteúdo de B por A.
O conteúdo de A não muda.
MULTIPLE A BY B GIVING C
Onde B e C são itens e A pode ser o conteúdo de um item ou um valor
imediato, faz a multiplicação B*A e o resultado fica em C.
O conteúdo de A não muda.
3.4.1.2.4. DIVIDE
DIVIDE A BY B [GIVING C] [REMAINDER R]
Onde A [C][D] são itens e B pode ser o conteúdo de um item ou um valor
imediato, faz a divisão A/B e deixa o resultado em:
 A se não se especifica GIVING
 C se se especifica GIVING
REMAINDER devolve o resto da divisão.
O quociente será inteiro ou não, dependendo da definição do item que o
recebe.
3.4.1.2.4.1. COMPUTE
COMPUTE expr
Valoriza expr como expressão algébrica na forma:
Resultado = operações
Onde resultado e todos os items que intervenham em operações
tem que estar definidos na WORKING-STORAGE.
Em algumas versões de COBOL, um mesmo item não pode aparecer
em ambos os membros da equação, como é o caso de:
COMPUTE I =I + 1
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 18 -
Linguagem COBOL
Manual de Formação
Expressão que, em qualquer caso, não se executaria nunca com
COMPUTE, dado o tempo que consome (ADD 1 TO I seria muito
mais rápida).
3.4.1.3. Instruções de Bifurcação
Permitem alterar o fluxo de execução do programa, especificando alternativas.
3.4.1.3.1. IF
Instrução de bifurcação condicionada ou alternativa.
lF condicão [THEN] <accão 1>
[ELSE < acção 2> | NEXT SENTENCE].
Se a condição se cumpre, executa-se a acção 1. A alternativa (opcional)
expressa-se na cláusula ELSE.
A instrução tem de terminar com um ponto.
As acções podem conter qualquer conjunto de instruções sempre que
estas não exijam um ponto como terminador (instruções com cláusula AT
END).
A cláusula THEN não é obrigatória.
IF A
IF B
IF C
< acção 1>
ELSE
< acção 2>
ELSE
NEXT SENTENCE
ELSE
< acção 4>.
Note-se que o ponto termina toda a instrução.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 19 -
Linguagem COBOL
Manual de Formação
3.4.1.3.2. GO
GO [TO] nome-de-parágrafo
Bifurcação incondicional à primeira instrução do parágrafo nome-deparágrafo.
Não deve utilizar-se pois complica a análise e manutenção futura dos
programas.
3.4.1.3.3. PERFORM
PERFORM nome-de-parágrafo1 [THRU nome-de-parágrafo2]
[VARYING item 1 FROM item2lvalor2 [BY item3lvalor3]]
[UMTIL condição]
Execução das instruções marcadas com a etiqueta nome-de-parágrafo1 e
retorno à instrução seguinte.
O final de parágrafo detecta-se por aparecer outro parágrafo ou o final do
ficheiro.
Se se especifica nome-de-parágrafo2, executam-se todas as instruções
desde a primeira do primeiro parágrafo até à última do segundo.
Os parágrafos destinados a ser invocados mediante PERFORM situam-se
fora da linha principal do programa para impedir que se executem
desnecessariamente.
VARYING item 1
Execução cíclica de PERFORM, controlada por item, que será um item
numérico.
FROM item2 l valor2
Inicialização de item. Esta cláusula executa-se só a primeira vez.
BY item3 l valor3
Incremento da variável de controlo. O valor pode ser positivo ou negativo.
UNTIL condição
Condição que deve usar-se para terminar a execução de PERFORM.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 20 -
Linguagem COBOL
Manual de Formação
3.4.1.3.4. SEARCH
SEARCH tabela [ALL] item
[VAREING item 1]
ATTEND <instrucao-mandatoria>
WHEN condição
<accão>
Pesquisa em tabela.
A tabela tem que estar indexada internamente (cláusula INDEXED BY). A
busca é sequencial a partir da posição do índice interno, se não se
especifica ALL.
Se se especifica ALL, a busca será dicotómica, mas a tabela tem que estar
ordenada ascendentemente ou descendentemente.
3.4.1.3.4.1. Tabela
Variável afectada pela cláusula OCCURS.
Si se utiliza a modalidade dicotómica haverá que especificar uma
cláusula ASCENDING | DESCENDING que indique por que elemento
está ordenada a tabela.
3.4.1.3.4.2. VARYING
Se a busca é sequencial, pode-se pedir que uma variável de
WORKING item 1, se actualize com o valor do índice interno.
3.4.1.3.4.3. ATTEND
Acção a tomar se não se cumpre nenhuma das cláusulas WHEN.
3.4.1.3.4.4. WHEN
Condição que se deve cumprir para executar <acção>.
Podem utilizar-se até 12 cláusulas.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 21 -
Linguagem COBOL
Manual de Formação
3.4.2. Manuseamento de Ficheiros
Para a utilização de ficheiros há que incluir novas instruções em diferentes
DIVISÕES do programa. Estas instruções dividem-se em:
 Instruções descritivas;
 Instruções de acesso.
3.4.2.1. Instruções Descritivas
Descrevem o ficheiro desde o ponto de vista físico e lógico e escrevem-se em:
3.4.2.1.1. Environment Division
Ambas na margem A:
INPUT OUTPUT SECTION.
FlLE CONTROL
Dentro deste parágrafo especificam-se:
 Definição de um nome lógico para um ficheiro físico;
 Organização do ficheiro;
 Modo de acesso para ficheiros indexados;
 Descrição do índice principal [e secundário] para ficheiros indexados;
 Área de recepção para códigos de retorno para ficheiros VSAM.
Mediante a instrução SELECT na qual se especificam as cláusulas que
vêm em continuação, margem B e se termina com um ponto.
SELECT nome
ASSIGN [TO]
ORGANIZATION [IS]
SEQUENCIAL
INDEXED
ACCESS MODE [IS]
SEQUENCIAL
RANDOM
DYNAMIC
[RECORD KEY [IS] Item 1]
[FILE STATUS [IS] item 2].
SYS002-DA-3340-S-ETIQUETA
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 22 -
Linguagem COBOL
Manual de Formação
Ligação com uma ficha de JCL com o nome ETIQUETA, na qual se
referencia o nome real do ficheiro. Os parâmetros anteriores fazem
referência ao dispositivo lógico e modelo da unidade de suporte; em MVS
são meramente informativos.
3.4.2.1.1.1. Organization
Organização do ficheiro (por defeito SEQUENTIAL).
3.4.2.1.1.2. Access
Modo de acesso:
 SEQUENTIAL Acesso sequencial (por defeito).
 RANDOM
Acesso por índice.
 DYNAMIC
Acesso misto.
Pode-se aceder aos registos por índice e ainda existe uma
recuperação sequencial por ordem de chave e a possibilidade de
explorar a existência de um registo sem efectuar a leitura.
Os modos RANDOM e DYNAMIC só se podem especificar em
ORGANIZATION INDEXED.
3.4.2.1.1.3. Item2
Identifica um item definido com PICTURE XX na WORKINGSTORAGE SECTION, destinado a recolher códigos de retorno, no
caso em que o ficheiro esteja no formato VSAM.
3.4.3. Data Division
Escrito na margem A e antes da WORKING-STORAGE.
3.4.4. File Section
E, dentro desta secção:
FD
nome
LABEL RECORDS STANDARD 1 OMITTED
[RECORD COMTAINS n CHARACTERS 1
[BLOCK COMTAINS r RECORDS]
[DATA RECORD[S] [IS 1 ARE] item1 item2....].
01
item1.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 23 -
Linguagem COBOL
Manual de Formação
01
item2.
FD
File Description. Deve ser definida na margem A. O nome que vai na
continuação, na margem B, tem que ser algum dos nomes codificados nas
instruções SELECT.
3.4.5. Label Records
Gestão de etiquetas de ficheiro/registos:
 STANDARD Gestão de etiquetas standard IBM
 OMMITTED Ficheiro sem etiquetas (aplica-se a determinados ficheiros em banda e a
impressoras).
3.4.6. Record Contains
Tamanho do registo em bytes.
3.4.7. Block Contains
Factor de bloqueio em número de registos.
3.4.8. Data Record[S]
Referência às áreas de intercâmbio de dados (áreas de registo). Nestas áreas
descreve-se, em formato WORKING, a distribuição da informação dos registos de
um ficheiro (campos).
Estas áreas serão a fonte em operações de escrita e o destino em operações de
leitura.
No caso de ficheiros com diferentes tipos de registo, as áreas podem ser várias,
com diferentes distribuições, e entende-se que todas redefinem a primeira, sem
necessidade de utilizar a cláusula REDEFINES.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
SELECT ENTRADA
ASSIGN TO SYSOO2-DA-3340-S-ENTRADA.
ORGANIZATION INDEXED
ACCESS DYNAMIC
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 24 -
Linguagem COBOL
Manual de Formação
RECORD KEY CHAVE
FILE STATUS COD-RET.
DATA DIVISION.
FILE SECTION.
FD
ENTRADA
LABEL RECORDS STANDARD.
01
CABECALHO
03 CHAVE
PIC 9(5) COMP-3.
03 TIPO
PIC 9.
03 DADOS-CLIENTE.
01
05 NOME
PIC X(30).
05 DIRECCAO
PIC X(50).
DETALHE.
03 FILLER
PIC XXX.
03 TIPO
PIC9.
03 DESCRICAO
PIC X(50).
03 IMPORTANCIA
PIC 9(9) COMP-3.
03 FILLER
PIC X(25).
WORKING-STORAGE SECTION.
………
03 COD-RET
PIC XX.
Nesta sequência de instruções descreveu-se um ficheiro indexado, ao qual se vai
aceder directamente e/ou sequencialmente por chave ascendente, indexado pelos
três primeiros bytes do registo, e que guarda informação dos tipos diferentes
descritos nos DATA RECORDS CABECALHO e DETALHE.
O ficheiro está suportado em VSAM, os códigos de retorno irão ser recebidos no
item COD-RET e o comprimento do registo é de 84 bytes.
Para distinguir os dois tipos de registos, convém actualizar com diferentes valores o
campo TIPO, por exemplo, com 1 para o cabeçalho e 2 para o detalhe no caso de
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 25 -
Linguagem COBOL
Manual de Formação
escrita de registos estes mesmos valores servirão para saber qual das áreas
descreve o registo em operações de leitura.
3.4.8.1. Instruções de Processamento.
O processamento de um ficheiro compõe-se das operações seguintes:
 Abrir o ficheiro
 Aceder ao ficheiro
-
Exploração
-
Leitura
-
Escrita
-
Re-escrita
-
Eliminar
 Fechar o ficheiro
 Abrir o ficheiro
OPEN modalidade nome
Modalidade
INPUT
Só entrada (leitura)
OUTPUT
Só saída ( escrita)
I-O
Entrada / Saída.
Nome simbólico do ficheiro ( SELECT).
Nome
Na mesma instrução podem abrir-se:
 Vários ficheiros na mesma modalidade
 Vários ficheiros em modalidades distintas.
3.4.8.2. Aceder ao Ficheiro
3.4.8.2.1. Exploração
Se se especificou ACCESS DYNAMIC:
START ficheiro KEY EQUAL NOT LESS item_chave
[INVALID KEY instrucao_mandatoria 1
Exploração do índice procurando um registo cuja chave seja igual e não
menor que o conteúdo actual do campo RECORD KEY.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 26 -
Linguagem COBOL
Manual de Formação
3.4.8.2.1.1.1. Invalid Key
Acção a tomar se não se encontra correspondência. A acção
não pode conter IF.
Para ficheiros VSAM, consultar a variável descrita no FILE
STATUS. O código ‘23’ indica registo não encontrado.
3.4.8.2.2. Leitura
READ ficheiro [NEXT] [INTO W-AREA ] |
[AT END instrucao_mandatoria] |
[INVALID KEY instrucao _mandatoria]
3.4.8.2.2.1. Next
Em acesso DYNAMIC, ler registo. Codifica-se imediatamente atrás
de START, lê-se o registo localizado se a localização teve êxito.
Depois lê-se o registo cuja chave seja a seguinte ao valor actual do
item mencionado em RECORD KEY.
3.4.8.2.2.2. Into W-Area
Transferência automática dos dados lidos para uma área de
WORKING.
3.4.8.2.2.3. Access Sequential
Leitura do registo seguinte.
3.4.8.2.2.4. AT END
Acção a efectuar quando encontra o final do ficheiro. A acção não
pode conter IF.
Para ficheiros VSAM, consultar a variável descrita em FILE STATUS.
O código ‘10’ indica final de ficheiro.
3.4.8.2.2.5. ACCESS RANDOM
Leitura do registo cuja chave coincida com o conteúdo actual do
campo RECORD KEY.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 27 -
Linguagem COBOL
Manual de Formação
3.4.8.2.2.5.1. INVALID KEY
Acção a tomar se não se encontra correspondência. A acção
não pode conter IF.
Para ficheiros VSAM, consultar a variável descrita em FILE
STATUS. O código ‘23’ indica registo não encontrado.
3.4.8.2.3. Escrita
WRITE data record [FROM W-AREA]
[INVALID KEY instrucao_mandatoria]
3.4.8.2.3.1. FROM W-AREA
Gravação dos dados de uma área de WORKING. A área copia-se
para a data_record antes da gravação.
3.4.8.2.3.2. ACCESS SEQUENTIAL
Gravação na sequência do último registo.
3.4.8.2.3.3. ACCESS RANDOM
Gravação de um registo cuja chave é o conteúdo actual do campo
RECORD KEY.
3.4.8.2.3.3.1. INVALID KEY
Acção a tomar se a chave está repetida. A acção não pode
conter IF.
Para ficheiros VSAM, consultar a variável descrita em FILE
STATUS. O código ‘22’ indica chave repetida a nível de índice
Primário e o registo não é gravado. O código ‘02’ indica
repetição a nível de índice Alternativo, mas o registo será
gravado.
3.4.8.2.4. Re-escrita
REWRITE data_record [FROM W-AREA]
[INVALID KEY sentencia_mandatoria]
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 28 -
Linguagem COBOL
Manual de Formação
3.4.8.2.4.1. FROM W-AREA
Actualização dos dados de uma área de WORKING. A área copia-se
da data_record antes da gravação.
3.4.8.2.4.2. ACCESS RANDOM
Actualização de um registo cuja chave é o conteúdo actual do campo
RECORD KEY.
3.4.8.2.4.2.1. INVALID KEY
Acção a tomar se não se encontra o registo. A acção não pode
conter IF.
Para ficheiros VSAM, consultar Ia variável descrita em FILE
STATUS. O código ‘23’ indica registo não encontrado. O código
‘22’ indica chave repetida a nível do índice Alternativo único e o
registo não é actualizado. O código ‘02’ indica repetição a nível
de índice Alternativo, mas o registo será actualizado.
3.4.8.2.5. Eliminar
DELETE ficheiro
[INVALID KEY instrucao_mandatoria]
3.4.8.2.5.1. Access Random
Eliminar um registo cuja chave é o conteúdo actual do campo
RECORD KEY.
3.4.8.2.5.1.1. Invalid Key
Acção a tomar se não se encontra o registo. A acção não pode
conter IF.
Para ficheiros VSAM, consultar a variável descrita em FILE
STATUS. O código 23 indica registo não encontrado.
3.4.8.2.6. Fechar o FICHEIRO
CLOSE ficheiro1 [ficheiro2…]
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 29 -
Linguagem COBOL
Manual de Formação
3.4.8.3. SORT
Esta instrução permite a ordenação de ficheiros a partir de um programa
COBOL, mas com uma série de variantes que a fazem mais potente que as
acções que se podem levar a cabo no Programa de Utilitários SORT.
Os elementos que se manipulam numa ordenação são:
 O ficheiro de entrada a ordenar;
 O ficheiro de saída destinado a receber o resultado da ordenação;
 A área se trabalho (normalmente em disco), para a qual se copia o ficheiro de
entrada para proceder à sua ordenação.
Na instrução SORT, referencia-se a área de ordenação e não o ficheiro de
entrada. O critério de ordenação aponta para campos da área de ordenação.
Os ficheiros de entrada e saída, definem-se como já se viu atrás, mas para a
área de ordenação especifica-se na INPUT-OUTPUT SECTION:
SELECT SORTWK ASSIGN TO SORTWK.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 30 -
Linguagem COBOL
Manual de Formação
Sem descrever nem organização nem acesso. Na FILE SECTION:
SD
SORTWK.
01
RSORTWK.
03
CHAVE.
Sem especificação de LABEL, identifica a área de ordenação lógica.
A instrução permite as variantes de manipulação dos ficheiros de entrada e
saída seguintes:
 Entrada e saída automáticas
SORT SORTWK
ASCENDING 1 DESCENDING KEY CHAVE
USING ENTRADA
GIVING SAIDA
 Entrada manual e saída automática
SORT SORTWK
ASCENDING 1 DESCENDING KEY CHAVE
INPUT PROCEDURE ENTRADA-SORT
GIVING SAIDA
 Entrada e saída manuais
SORT SDRTWK
ASCENDING DESCENDING KEY CHAVE
INPUT PROCEDURE ENTRADA-SORT
OUTPUT PROCEDURE SAIDA-SORT
 Entrada automática e saída manual
SORT SOR1VIK
ASCENDING 1 DESCENDING KEY CHAVE
USING ENTRADA
OUTPUT PROCEDURE SAIDA-SORT.
Convém recordar que os ficheiros que intervêm na ordenação devem estar
fechados antes da execução da instrução SORT.
Quando se usam as opções INPUT ou OUTPUT PROCEDURE, que se
codificaram na PROCEDURE DIVISION e nas SECTION com o nome das
PROCEDUREs que se referenciaram na instrução.
Estas SECTION devem estar juntas e no final do programa, para evitar
execuções adicionais não desejadas.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 31 -
Linguagem COBOL
Manual de Formação
A opção INPUT e/ou OUTPUT PROCEDURE faz com que a etapa
correspondente da instrução SORT não se execute e tenha que ser o
programador a abrir e a ler o ficheiro de entrada e a gravar na área de
ordenação (INPUT PROCEDURE) e o leia da área de ordenação e abra ou
grave no ficheiro de saída (OUTPUT PROCEDURE).
A escrita na área de ordenação faz-se com:
RELEASE RSORTWK [FROM W-REGiSTO]
A leitura de um registo da área de ordenação faz-se com:
RETURN SORTWK [INTO W-REGISTO]
AT END accao-mandatoria.
Em que a cláusula AT END se emprega para sinalizar o fim dos dados na área
de ordenação.
No JCL que se construa para executar um programa que leve uma instrução
SORT, têm que se incluir umas bibliotecas especiais para os módulos de
serviço da instrução.
Estas bibliotecas incluir-se-ão no cartão JOBLIB ou STEPLIB e os nomes são,
regra geral, SORT.SORTLIB e SORT.LINKLIB.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 32 -
Linguagem COBOL
Manual de Formação
3.4.8.3.1. Exemplos de Programas COBOL com SORT. 1
3.4.8.3.1.1. SORT com Entrada e Saída Automáticas
* ---------------------------------------COBOLREALIA-----------------------------*
PSORT
SORT USING GIVING
* -----------------------------------------------------------------------------------------IDENTIFICATION DIVISION.
PROGRAM-ID. PSORT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. AAT-PC.
OBJECT-COMPUTER. AAT-PC.
SPECIAL-NAMES. DECIMAL-POI NT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
*------------------------------------*
FICHEIRO DE ARTIGOS - ENTRADA
*------------------------------------SELECT ENTRADA ASSIGN TO ‘ARTIGO.DAT’
FILE STATUS STAT-ENTRADA.
*------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENAÇÃO
*-------------------------------------------------------------SELECT SAIDA ASSIGN TO ARTIGO.ORD’.
*--------------------------------------------------------------*
AREA DE ORDENAÇÃO
*--------------------------------------------------------------SELECT SORTWK1 ASSIGN TO ‘SORTWK1.DAT’.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 33 -
Linguagem COBOL
Manual de Formação
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA
PIC X(80).
FD SAIDA
LABEL RECORDS STANDARD.
* --------------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENAÇÃO
* --------------------------------------------------------------------SELECT SAIDA ASSIGN TO ‘ARTIGO.ORD’.
*---------------------------------------------------------------------*
AREA DE ORDENAÇÃO
* --------------------------------------------------------------------SELECT SORTWK1 ASSIGN TO ‘SDRTWK1.DAT’.
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA
PIC X(80).
FD SALIDA
LABEL RECORDS STANDARD.
* ---------------------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENACAO
*----------------------------------------------------------------------------SELECT SAIDA ASSIGN TO ‘ARTIGO.ORD’.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 34 -
Linguagem COBOL
Manual de Formação
*------------------------------------------------------------------------*
AREA DE ORDENACAO
*-----------------------------------------------------------------------SELECT SORTWK1 ASSIGN TO SORTWK1.DAT.
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA
PIC X(80).
FD SALIDA
LABEL RECORDS STANDARD.
* -------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENACAO
* -------------------------------------------------------------SELECT SALIDA ASSIGN TO ‘ARTIGO.ORD’.
*---------------------------------------------------------------*
AREA DE ORDENACAO
* --------------------------------------------------------------SELECT SORTWK1 ASSIGN TO ‘SORWVK1.DAT’.
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA
PIC X(80).
FD SAIDA
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 35 -
Linguagem COBOL
Manual de Formação
LABEL RECORDS STANDARD.
*-------------------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENACAO
*--------------------------------------------------------------------------SELECT SAIDA ASSIGN TO ’ARTIGO.ORD’.
*---------------------------------------------------------------------------*
AREA DE ORDENACAO
*---------------------------------------------------------------------------SELECT SORTWK1 ASSIGN TO ‘SORTWK1.DAT’
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA
PIC X(80).
FD SAIDA
LABEL RECORDS STANDARD.
01 RSAIDA
PIC X(80).
SD SORTWK1.
01 RSORTWK1
03 SORTKEY
PIC X(3).
03 FILLER
PIC X(77).
WORKING-STORAGE SECTION
SELECT SAIDA ASSIGN TO ‘ARTIGO.ORD’.
01 STAT-ENTRADA PIC XX
PROCEDURE DIVISION.
PSORT.
SORT SORTWK1 ASCENDING KEY SORTKEY
USING ENTRADA
GIVING SAIDA
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 36 -
Linguagem COBOL
Manual de Formação
STOP RUN.
3.4.8.3.1.2. SORT com Entrada e Saída Manuais.
*-----------------------------------COBOL REALIA —-------------------------* PSORTI
SORT INPUT PROCEDURE OUTPUT PROCEDURE
*---------------------------------------------------------------------------------------IDENTIFICATION DIVISION.
PROGRAM-ID. PSORTI.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. AAT-PC.
OBJECT-COMPUTER. AAT-PC.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-QUTPUT SECTION.
FILE-CONTROL.
*-----------------------------------------------------------------*
FICHEIRO DE ARTIGOS - ENTRADA
*------------------------------------------------------------------SELECT ENTRADA ASGN TO ‘ARTIGO.DAT
FILE STATUS STAT-ENTRADA.
*------------------------------------------------------------------*
FICHEIRO SAIDA DE ORDENAÇÃO
*------------------------------------------------------------------SELECT SAIDA ASSIGN TO ‘ARTIGO.ORD’
FILE STATUS STAT-SAIDA.
*-------------------------------------------------------------------*
AREA DE ORDENACAO
* --------------------------------------------------------------------SELECT SORTWK1 ASSIGN TO ‘SORTWKI.DAT’.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 37 -
Linguagem COBOL
Manual de Formação
DATA DIVISION.
FILE SECTION.
FD ENTRADA
LABEL RECORDS STANDARD.
01 RENTRADA PIC X(80).
FD SALIDA
LABEL RECORDS STANDARD.
01 RSAIDA PIC X(80).
SD SORTWKI.
01 RSORTWKI.
03 SORTKEY PIC X(3).
03 FILLER PIC X(77).
WORKING-STORAGE SECTION.
01 STAT-ENTRADA
PIC XX.
01 STAT-SAIDA
PIC XX.
01 RN-SORTWKI
PIC X VALUE SPACES.
PROCEDURE DIVISION.
PSORT.
SORT SORTWK1 ASCENDING KEY SDRTKEY
INPUT PROCEDURE 1-SORT-ENTRADA
OUTPUT PROCEDURE 2-SORT-SAIDA
STOP RUN.
11-CARREGAR-SORTWK1.
RELEASE RSORTWKI FROM RENTRADA
READ ENTRADA
IF STAT-ENTRADA NOT = ‘00
IF STAT-ENTRADA NOT = ‘10’
DISPLAY ‘ERRO DE LEITURA’ STAT-ENTRADA
GOTO 11-CARREGAR-SORTWKI-F.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 38 -
Linguagem COBOL
Manual de Formação
11 -CARREGAR-SOR1WKI -F.
EXIT.
21 -LER-SORTWK1.
WRITE RSAIDA FROM RSORTWKI
RETURN SORTWKI
AT END MOVE ‘1’ TO FIN-SORTWKI.
21-LER-SORTWKI -F.
EXIT.
1 -SORT-ENTRADA SECTION.
OPEN INPUT ENTRADA
IF STAT-ENTRADA NOT = ‘00
DISPLAY ‘NAO SE ABRE O FICHEIRO’ STAT-ENTRADA
GO TO 1-SORT-ENTRADA-F.
READ ENTRADA
IF STAT-ENTRADA NOT = ‘00’
IF STAT-ENTRADA NOT =‘l0’
DISPLAY ‘ERRO DE LEITURA’ STAT-ENTRADA
GO TO 1-SORT-ENTRADA-F.
DISPLAY INICIO CARGA SORT
PERFORM 11-CARREGAR-SORTWK1 THRU
11-CARREGAR-SORTWK1-F UMTIL STAT-ENTRADA = ‘10
CLOSE ENTRADA
DISPLAY ‘FIM CARREGA SORT. PASSO ORDENAR’.
1 -SORT-ENTRADA-F.
EXIT.
2-SORT-SAIDA SECTION.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 39 -
Linguagem COBOL
Manual de Formação
OPEN OUTPUT SAIDA
IF STAT-SAIDA NOT = ‘00’
DISPLAY ‘ERRO AO ABRIR O FICHEIRO DE SAIDA’ STATENTRADA
GO TO 2-SORT-SAIDA-F.
RETURN SORTWKI
AT END MOVE ‘1’ TO FIN-SORTWKI.
DISPLAY ‘INICIO LEITURA SORT
PERFORM 21-LER-SORTWK1 THRU
21-LER-SORTWK1-F UMTIL FIM-SORTWKI = ‘1’
CLOSE SAIDA
DISPLAY ‘FIM LEITURA SORT. FIM PROCESSO’.
2-SORT-SAIDA-F.
EXIT.
3.4.8.3.2. Ligação entre Programas
Entre as utilizações mais comuns em COBOL está a transmissão de dados
entre programas. Com muita frequência existem programas já feitos, que
se encarregam de tarefas tais como ler registos de ficheiros, eliminar
brancos em cadeias de texto, etc., e que não temos que codificar nem
incluir no programa que necessite de realizar uma destas tarefas.
Simplesmente se invoca a sua execução com uma instrução CALL no
ponto do programa em que seja necessário.
Os programas destinados a serem ligados podem apresentar-se em dois
formatos:
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 40 -
Linguagem COBOL
Manual de Formação
3.4.8.3.2.1. Executável Independente
Este formato, cuja chamada gera um enlace dinâmico, é o menos
usado uma vez que obriga o sistema a aceder ao disco e carregar o
programa quando é chamado.
3.4.8.3.2.2. Objecto Independente
É o mais utilizado. Na fase de montagem inclui-se junto com o
objecto do programa principal, constituindo um só executável. O
acesso aos módulos assim montados, denomina-se ligação estática.
Será este método que se descreve a seguir.
A estrutura do módulo chamado é ligeiramente diferente da de um
programa comum. A do módulo chamador não muda, excepto na
inclusão da instrução CALL.
A filosofia da ligação é a seguinte. Mediante a instrução CALL,
especificam-se as direcções dos dados do módulo invocante a que
vai ter acesso o módulo invocado. No módulo invocado há que
descrever uma área destinada a guardar as direcções passadas e
indicar o uso das referidas direcções.
3.4.8.3.2.3. Módulo Invocante
Liga ao módulo invocado com a instrução:
CALL ‘módulo_invocado’ USING identificador1 [identificador2 ]
Em que o nome do módulo invocado se escreve entre pelicas.
Os identificadores referenciam itens da WORKING nos quais estão
os dados a passar.
Há que ter muito cuidado ao escrever o nome do módulo invocado,
porque um erro de escrita detecta-se só na fase de montagem e
provocará um erro de código 806 em execução.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 41 -
Linguagem COBOL
Manual de Formação
3.4.8.3.2.4. Módulo Invocado
Há que introduzir uma SECTION nova na DATA DIVISION, chamada
LINKAGE SECTION na qual haverá um nível 01 para cada uma das
direcções que se passam.
Os nomes que se atribuem a estas níveis 01 são de livre definição e
não é obrigatório que coincidam com as variáveis que se referenciam
no módulo invocante.
Para estes níveis especificam-se PICTURE’s iguais às dos dados
que se passam. Para completar a ligação a especificação da
PROCEDURE DIVISION altera-se para a forma:
PROCEDURE DIVISION USING nome_nivel01[nome_nivel02 ....]
Em que nome_nivel01 é o de cada um dos níveis 01 especificados
na LINKAGE SECTION.
A instrução que termina a execução é EXIT PROGRAM.
Nunca se executará a instrução STOP RUN.
Quando se conclui a ligação, os nomes dos níveis 01 da LINKAGE
SECTION são apontadores para as áreas de dados que o módulo
invocante mencionou na instrução CALL.
As modificações que o módulo invocado tenha utilizado como
referência aos nomes dos níveis 01 da sua LINKAGE SECTION,
transmitir-se-ão
imediatamente
aos
correspondentes
itens
da
WORKING do módulo invocante.
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 42 -
Linguagem COBOL
Manual de Formação
© 2006 Capgemini
Este documento é confidencial e não pode ser reproduzido sem autorização prévia da
Capgemini Portugal - Serviços de Consultoria e Informática, S.A.
- 43 -
Download