Você está na página 1de 17

COBOL, linguagem maldita

Definida pela Comisso CODASYL, em 1960 Common Business Oriented Language O COBOL uma linguagem industrial, e no propriedade de nenhuma companhia ou grupo de companhias, nem de nenhuma organizao ou grupo de organizaes Nenhuma garantia dada pela Comisso CODASYL quanto preciso (accuracy) e funcionamento (functioning) do sistema de programao e da linguagem. Alm disso, a Comisso no assume nenhuma responsabilidade em relao a isso. Evoluo: ANSI COBOL 68 ANSI COBOL 74 ANSI COBOL 8? COBOL 1

Aprender COBOL hoje?


1 a linguagem mais usada na vida prtica (!?) 2 uma linguagem obsoleta. 3 Em vez do COBOL deve usar-se as linguagens de 4 gerao. 4 Em vez de programar, melhor comprar as aplicaes j feitas. Mesmo assim Bibliografia: 1. Guia de COBOL, Ray Welland, Col. Tempos Livres, Ed. Presena. 2. Advanced COBOL, AS Philippakis, Leonard J. Kasmier, McGraw-Hill (ed. ?) 3. O COBOL a pouco e pouco, PG (1987) 4. etc. COBOL 2

Caractersticas principais *
1 Tudo global. 2 Procedimentos sem parmetros. (pargrafos). 3 S se itera sobre chamadas de procedimentos*. 4 Procedimentos usados antes de declarados. 5 Verbos SEARCH e SORT. 6 Variedade de mecanismos para formatao de mapas.

Estrutura de um programa COBOL (1)


Divises, Seces, Pargrafos 1 Divises (DIVISION) IDENTIFICATION program

Identificao do programa (nome do programa, nome do autor, etc.) ENVIRONMENT var file of assign Especificao do hardware e do inputoutput

* isto assim para o COBOL 74.

DATA

var

Descrio dos dados (registos dos ficheiros e variveis de trabalho) PROCEDURE procedure begin ... end. Parte algortmica COBOL 3 COBOL 4

Estrutura de um programa COBOL (2)


2 Seces (SECTION) ENVIRONMENT DIVISION CONFIGURATION SECTION Para identificar o computador INPUT-OUTPUT Para declarar os ficheiros que vo ser usados, e associ-los aos ficheiros externos DATA DIVISION SECTION FILE

Estrutura de um programa COBOL (3)


3 Pargrafos IDENTIFICATION DIVISION PROGRAM-ID. PRIMEIRO-EXEMPLO. AUTHOR. GUERREIRO. DATE_WRITTEN. 89.12.14. DATE-COMPILED. SECURITY. TOP-SECRET. CONFIGURATION SECTION SOURCE-COMPUTER COMPUTER INPUT-OUTPUT SECTION SPECIAL-NAMES DECIMAL-POINT IS COMMA CURRENCY SIGN IS 'E' FILE-CONTROL SELECT FICH ASSIGN TO 'ABC.DAT' PROCEDURE DIVISION pargrafos so os procedimentos COBOL Os 6 OBJECT-

Para definir os registos dos ficheiros WORKING-STORAGE SECTION describes records and data items that are not part of external data files, but rather are developed and processed internally PROCEDURE DIVISION (Seces escolha) COBOL 5

Exemplo (1)
IDENTIFICATION DIVISION. PROGRAM-ID. SEGREGACAO. AUTHOR. GUERREIRO. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F-TODOS ASSIGN TO 'ALUNOS.DAT'. SELECT F-BOYS ASSIGN TO 'BOYS.DAT'. SELECT F-GIRLS ASSIGN TO 'GIRLS.DAT. DATA DIVISION. FILE SECTION. FD F-TODOS LABEL RECORD IS OMITTED DATA RECORD IS TOD-REG. 01 TOD-REG. 02 TOD-NOME PIC X(32). 02 TOD-SEXO PIC A. 02 TOD-TELEFONE PIC X(16). FD F-BOYS LABEL RECORD IS OMITTED DATA RECORD IS BOY-REG. 01 BOY-REG PIC X(49).

Exemplo (2)
FD F-GIRLS LABEL RECORD IS OMITTED DATA RECORD IS GIRL-REG. 01 GIRL-REG PIC X(49). WORKING-STORAGE SECTION. 77 B-EOF-TODOS PIC 9. PROCEDURE DIVISION. PROGRAMA. PERFORM INICIALIZACAO. PERFORM BOY-OR-GIRL UNTIL B-EOF-TODOS = 1. PERFORM FINALIZACAO. STOP RUN. INICIALIZACAO. OPEN INPUT F-TODOS. MOVE 0 TO B-EOF-TODOS. READ F-TODOS AT END MOVE 1 TO B-EOF-TODOS. OPEN OUTPUT F-BOYS, F-GIRLS. BOY-OR-GIRL. IF TOD-SEXO = 'M' WRITE BOY-REG FROM TOD-REG ELSE WRITE GIRL-REG FROM TOD-REG. READ F-TODOS AT END MOVE 1 TO B-EOF-TODOS. FINALIZACAO. CLOSE F-TODOS, F-BOYS, F-GIRLS. DISPLAY 'FIM!'.

COBOL

COBOL

Palavras reservadas e palavras definidas pelo utilizador


Palavras reservadas (ex. PROCEDURE, WORKING-STORAGE, MOVE, READ). NB: so mais de 300! Palavras-chave Palavras opcionais

Regras de codificao
Folhas de codificao baseadas nos cartes de 80 colunas: 1 Colunas 1-6: nmero sequencial opcional 2 Coluna 7: coluna de continuao '-': continuao do carto anterior (a partir da coluna 12) '/': mudana de pgina na listagem '*': linha de comentrio 3 Colunas 8-11: Zona A 4 Colunas 12-72: Zona B 5 Colunas 73-80: (identificao do programa, no processado) Convenes: 1. Zona A: ttulos de diviso, seco e pargrafo, FD, 01, 77. 2. Zona B: o resto (instrues, etc.) Data General COBOL: formato livre Zona A: a partir da coluna 1 Zona B: a partir de um TAB... Caracteres especiais (- * /): coluna 1 COBOL 10

FD file-name LABEL RECORDS ARE OMITTED DATA RECORD IS data-name. ... READ file-name RECORD AT END imperative-statement

Palavras definidas pelo utilizador (userdefined words): data-name (identificador de varivel) condition-name paragraph-name record-name file-name

Mximo 30 caracteres (A..Z, 0..9, -) COBOL 9

Instrues principais (1)


1 Afectao MOVE MOVE A TO B {B := A} 2 Seleco alternativa IF IF cond STAT1. IF cond STAT1 IF ELSE ELSE STAT2. 3 Chamada de procedimento PERFORM INICIALIZACAO PERFORM PERFORM UNTIL PERFORM BOY-OR-GIRL UNTIL B-EOF-TODOS = 1 4 Stop STOP RUN 5 Adio ADD ADD A TO B {B := B + A} ADD A TO B GIVING C {C := B + A}

Instrues principais (2)


7 Clculo aritmtico COMPUTE A = expresso COMPUTE {A := expresso} Operadores: + - * / ** (rodeados de espaos) 8 Interaco DISPLAY ACCEPT

writeln(output, ...) readln(input, ...)

6 Subtraco SUBTRACT SUBTRACT A FROM B SUBTRACT A FROM B GIVING C COBOL

9 Ficheiros OPEN INPUT F-TODOS OPEN OPEN OUTPUT F-BOYS F-GIRLS CLOSE READ READ file-name [INTO identifier] [AT END imperative-statement] WRITE WRITE record-name [FROM identifier] COBOL 12

11

Processamento interactivo (1)


Problema: criao interactiva de um ficheiro de clientes UNIBANCO, com nmero, tipo, nome, morada, data de validade, crdito e dvida.
IDENTIFICATION DIVISION. PROGRAM-ID. UNIBANCO-1. AUTHOR. GUERREIRO. DATE-WRITTEN. 90.01.07 * * * * Programa para criar um ficheiro de clientes UNIBANCO, com nmero, tipo, nome, morada, data de validade, crdito e dvida, a partir do terminal.

Processamento interactivo (2)


DATA DIVISION. FILE SECTION. FD F-CLIENTES LABEL RECORDS ARE OMITTED DATA RECORD IS CLI-REG. 01 CLI-REG. 02 CLI-NUMERO 02 CLI-TIPO 02 CLI-NOME 02 CLI-MORADA. 03 CLI-MORADA-1 03 CLI-MORADA-2 03 CLI-MORADA-3. 04 CLI-CODIGO-POSTAL 04 CLI-LOCALIDADE 02 CLI-VALIDADE. 03 CLI-VALIDADE-ANO 03 CLI-VALIDADE-MES 02 CLI-CREDITO 02 CLI-DIVIDA WORKING-STORAGE SECTION. 77 N-REGS 77 SIM-OU-NAO 88 SIM 88 NAO 77 B-NAO-HA-MAIS-CLIENTES 88 NAO-HA-MAIS-CLIENTES 77 B-DADOS-CLIENTE-OK 88 DADOS-CLIENTE-OK

PIC 9(16). PIC A(1). PIC X(32). PIC X(30). PIC X(30). PIC 9(4). PIC X(16). PIC PIC PIC PIC 9(4). 9(2). 9(10). 9(10). nomes de nomes de condio condio

* apenas um exemplo de programao COBOL. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL SELECT F-CLIENTES ASSIGN TO "CLIENTES.DATA".

USAGE INDEX. PIC X. VALUE "S". VALUE "N". PIC 9 VALUE 0. VALUE 1. PIC 9. VALUE 1.

COBOL

13

COBOL

14

Processamento interactivo (3)


PROCEDURE DIVISION. ESTRUTURA SECTION. PROGRAMA-PRINCIPAL. PERFORM INICIALIZACAO. PERFORM OPERACOES UNTIL NAO-HA-MAIS-CLIENTES. PERFORM FINALIZACAO. STOP RUN. OPERACOES. PERFORM OBTER-DADOS-CLIENTE. PERFORM CONFIRMAR-DADOS-CLIENTE. IF DADOS-CLIENTE-OK PERFORM ESCREVER-REGISTO-CLIENTE. PERFORM HAVERA-MAIS-CLIENTES. TRATAMENTO SECTION. INICIALIZACAO. DISPLAY "Criao do ficheiro de clientes". OPEN OUTPUT F-CLIENTES. MOVE 0 TO N-REGS. FINALIZACAO. CLOSE F-CLIENTES. DISPLAY "Fim do programa" DISPLAY "Registos escritos = " N-REGS. OBTER-DADOS-CLIENTE. DISPLAY "Nmero de cliente - " NO ADVANCING. ACCEPT CLI-NUMERO. DISPLAY "Tipo de cliente - " NO ADVANCING. ACCEPT CLI-TIPO.

Processamento interactivo (4)


DISPLAY "Nome ACCEPT CLI-NOME. DISPLAY "Morada 1a linha ACCEPT CLI-MORADA-1. DISPLAY "Morada 2a linha ACCEPT CLI-MORADA-2. DISPLAY "Cdigo postal ACCEPT CLI-CODIGO-POSTAL. DISPLAY "Localidade ACCEPT CLI-LOCALIDADE. DISPLAY "Validade, ano ACCEPT CLI-VALIDADE-ANO. DISPLAY "Validade, ms ACCEPT CLI-VALIDADE-MES. DISPLAY "Crdito ACCEPT CLI-CREDITO. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING. - " NO ADVANCING.

CONFIRMAR-DADOS-CLIENTE. DISPLAY "TUDO BEM? " NO ADVANCING. ACCEPT SIM-OU-NAO. IF SIM MOVE 1 TO B-DADOS-CLIENTE-OK ELSE MOVE 0 TO B-DADOS-CLIENTE-OK. ESCREVER-REGISTO-CLIENTE. MOVE 0 TO CLI-DIVIDA. WRITE CLI-REG. ADD 1 TO N-REGS. HAVERA-MAIS-CLIENTES. DISPLAY "Mais? ". ACCEPT SIM-OU-NAO. IF NAO MOVE 1 TO B-NAO-HA-MAIS-CLIENTES.

COBOL

15

COBOL

16

Ficheiros sequenciais
ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT file-name ASSIGN TO implementor-name [ORGANIZATION IS SEQUENTIAL] [ACCESS MODE IS SEQUENTIAL]. DATA DIVISION. FILE SECTION. FD file-name [BLOCK CONTAINS int-1 RECORDS] [RECORD CONTAINS int-2 CHARACTERS] LABEL RECORDS ARE OMITTED DATA RECORD IS data-name. 01 data-name ... Exemplo:
... SELECT F-CLIENTES ASSIGN TO NOME-F-CLIENTES. ... WORKING-STORAGE SECTION. 77 NOME-F-CLIENTES PIC X(32). ou: 77 NOME-F-CLIENTES PIC X(32) VALUE "UDD:UNIBANCO:CLIENTES".

Verbos para o processamento sequencial


OPEN OPEN OPEN OPEN OPEN INPUT file-name OUTPUT file-name I-O file-name EXTEND file-name

CLOSE CLOSE file-name READ READ file-name [INTO identifier] AT END imperative statement {para ficheiros abertos com OPEN INPUT ou OPEN I-O} WRITE WRITE record-name [FROM identifier] {para ficheiros abertos com OPEN OUTPUT ou OPEN EXTEND} REWRITE REWRITE record-name [FROM identifier] {para ficheiros abertos com OPEN I-O} COBOL

COBOL

17

18

Verbos para o processamento sequencial (observaes)


OPEN INPUT ... READ ... AT END ... corresponde ao reset do Pascal. READ ... AT END ... corresponde ao get do Pascal. READ ... INTO ... AT END ... diferente do read do Pascal. Corresponderia a get(f); x := f^. WRITE ... corresponde ao put do Pascal. WRITE ... FROM ... corresponde ao write do Pascal.

Processamento sequencial (1)


Problema: listar os clientes (nmero, nome, crdito, saldo) cuja dvida maior que o crdito.
IDENTIFICATION DIVISION. PROGRAM-ID. DEVEDORES. AUTHOR. GUERREIRO. INSTALLATION. CENTRO DE CALCULO. FCT/UNL. DATE-WRITTEN. 90.01.10. DATE-COMPILED. SECURITY. CONFIDENCIAL. * Programa para listar os clientes com dvida * superior ao crdito. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F-CLIENTES ASSIGN TO NOME-F-CLIENTES ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL. SELECT MAPA ASSIGN TO PRINTER NOME-MAPA.

COBOL

19

COBOL

20

Processamento sequencial (2)


DATA DIVISION. FILE-SECTION. FD F-CLIENTES ... como no outro exemplo 01 ... idem FD MAPA LABEL RECORDS ARE OMITTED DATA RECORD IS LINHA. 01 LINHA PIC X(80). WORKING-STORAGE SECTION. 77 N-LINHAS 77 B-EOF-CLIENTES 88 EOF-CLIENTES 77 HOJE 01 CABESSALHO-1. 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 DATA-DIA 02 FILLER PIC

Processamento sequencial (3)


01 CABESSALHO-2. 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC 02 FILLER PIC X(19) X(1) X(14) X(4) X(14) X(1) X(13) X(1) X(13) VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE VALUE PIC PIC PIC PIC PIC PIC PIC " NUMERO SPACES. SPACES. "NOME". SPACES. SPACES. " CREDITO ". SPACES. " DIVIDA ". ".

USAGE INDEX. PIC 9 VALUE 0. VALUE 1. PIC 9(6).

01 LINHA-DE-DETALHE. 02 LINHA-CLI-NUMERO 02 FILLER 02 LINHA-CLI-NOME 02 FILLER 02 LINHA-CLI-CREDITO 02 FILLER 02 LINHA-CLI-DIVIDA

9(4)B9(4)B9(4)B9(4). X(1). X(32). X(1). Z.ZZZ.ZZZ.ZZ9. X(1). Z.ZZZ.ZZZ.ZZ9.

X(09) X(20) X(20) X(15)

VALUE SPACES. VALUE "LISTAGEM DE CLIENTES". VALUE " COM DIVIDA SUPERIOR". VALUE " AO CREDITO EM ". PIC 99/99/99. X(08) VALUE SPACES.

PROCEDURE DIVISION. ESTRUTURA SECTION. PROGRAMA-PRINCIPAL. PERFORM INICIALIZACAO. PERFORM LISTAR-CONDICIONALMENTE UNTIL EOF-CLIENTES. PERFORM FINALIZACAO. STOP RUN.

COBOL

21

COBOL

22

Processamento sequencial (4)


LISTAR-CONDICIONALMENTE. IF CLI-DIVIDA > CLI-CREDITO PERFORM LISTAR-CLIENTE. PERFORM GET-CLIENTE. TRATAMENTO SECTION. INICIALIZACAO. ACCEPT HOJE FROM DATE. MOVE HOJE TO DATA-DIA. OPEN INPUT F-CLIENTES. READ F-CLIENTES AT END MOVE 1 TO B-EOF-CLIENTES. OPEN OUTPUT MAPA. PERFORM ESCREVER-CABESSALHOS. SET N-LINHAS TO 1. FINALIZACAO. CLOSE F-CLIENTES MAPA. LISTAR-CLIENTE. MOVE SPACES TO LINHA. MOVE CLI-NOME TO LINHA-CLI-NOME. MOVE CLI-NUMERO TO LINHA-CLI-NUMERO. MOVE CLI-CREDITO TO LINHA-CLI-CREDITO. MOVE CLI-DIVIDA TO LINHA-CLI-DIVIDA. WRITE LINHA FROM LINHA-DE-DETALHE. SET N-LINHAS UP BY 1. ESCREVER-CABESSALHOS. WRITE LINHA FROM CABESSALHO-1. WRITE LINHA FROM CABESSALHO-2 AFTER 2. SERVISSO SECTION. GET-CLIENTE. READ F-CLIENTES AT END MOVE 1 TO B-EOF-CLIENTES.

Processamento de quadros
Declarao de uma tabela (exemplo):
WORKING-STORAGE SECTION. 77 N-CAMBIOS USAGE INDEX. 01 TABELA-CAMBIOS. 02 CAMBIOS OCCURS 0 TO 32 TIMES DEPENDING ON N-CAMBIOS INDEXED BY I-CAMBIOS. 03 PAIS-CAMBIOS PIC X(16). 03 DIVISA-CAMBIOS PIC X(8). 03 CODIGO-CAMBIOS PIC X(3). 03 FILLER PIC X(1). 03 COMPRA-CAMBIOS PIC 9(4)V9(4). 03 VENDA-CAMBIOS PIC 9(4)V9(4).

Carregamento de uma tabela


FD F-CAMBIOS ... 01 CAMBIOS-REC PIC X(44). perform pp perform varying xx from yy by zz varying from by until c. until c.

CARREGAR-CAMBIOS. OPEN INPUT F-CAMBIOS. xx := y; MOVE 0 TO B-EOF-CAMBIOS. := y; while not cc do PERFORM LER-UM-CAMBIO while not do begin VARYING I-CAMBIOS FROM 1 BY 1 begin p; UNTIL EOF-CAMBIOS. p; xx := xx ++ zz COMPUTE N-CAMBIOS = I-CAMBIOS - 1. := end; CLOSE F-CAMBIOS. end; LER-UM-CAMBIO. READ F-CAMBIOS INTO CAMBIOS (I-CAMBIOS) AT END MOVE 1 TO B-EOF-CAMBIOS.

COBOL

23

COBOL

24

Busca linear
77 ESTE-CODIGO 77 B-HA-CODIGO 88 HA-CODIGO ... PIC X(3). PIC 9. VALUE 1.

Busca dicotmica
DATA DIVISION. 77 N-CAMBIOS USAGE INDEX. 01 TABELA-CAMBIOS. 02 CAMBIOS OCCURS 0 TO 32 TIMES DEPENDING ON N-CAMBIOS ASCENDING KEY IS CODIGO-CAMBIOS INDEXED BY I-CAMBIOS. 03 PAIS-CAMBIOS PIC X(16). 03 DIVISA-CAMBIOS PIC X(8). 03 CODIGO-CAMBIOS PIC X(3). 03 FILLER PIC X(1). 03 COMPRA-CAMBIOS PIC 9(4)V9(4). 03 VENDA-CAMBIOS PIC 9(4)V9(4). ... BUSCA-CODIGO. SEARCH ALL CAMBIOS AT END MOVE 0 TO B-HA-CODIGO WHEN CODIGO-CAMBIOS (I-CAMBIOS) = ESTE-CODIGO MOVE 1 TO B-HA-CODIGO.

BUSCA-CODIGO. SET I-CAMBIOS TO 1. SEARCH CAMBIOS AT END MOVE 0 TO B-HA-CODIGO WHEN CODIGO-CAMBIOS (I-CAMBIOS) = ESTE-CODIGO MOVE 1 TO B-HA-CODIGO. ... MOSTRAR-CAMBIO. ACCEPT ESTE-CODIGO. PERFORM BUSCA-CODIGO. IF HA-CODIGO DISPLAY PAIS-CAMBIOS (I-CAMBIOS) DIVISA-CAMBIOS (I-CAMBIOS) COMPRA-CAMBIOS (I-CAMBIOS) VENDA-CAMBIOS (I-CAMBIOS) ELSE DISPLAY "*** CODIGO INEXISTENTE ***". Notas: Os ndices tm que ser constantes ou variveis (no podem ser expresses). Tem que haver um espao antes do '('. No h MOVE, ADD ou SUBTRACT para indexadores. S SET.

Notas: No SEARCH simples pode haver vrios WHENs e as condies so arbitrrias; No SEARCH ALL s pode haver um WHEN.

COBOL

25

COBOL

26

Tabelas de constantes
01 TABELA-MESES 02 FILLER PIC X(9) VALUE "JANEIRO ". 02 FILLER PIC X(9) VALUE "FEVEREIRO". 02 FILLER PIC X(9) VALUE "MARO ". 02 FILLER PIC X(9) VALUE "ABRIL ". 02 FILLER PIC X(9) VALUE "MAIO ". 02 FILLER PIC X(9) VALUE "JUNHO ". 02 FILLER PIC X(9) VALUE "JULHO ". 02 FILLER PIC X(9) VALUE "AGOSTO ". 02 FILLER PIC X(9) VALUE "SETEMBRO ". 02 FILLER PIC X(9) VALUE "OUTUBRO ". 02 FILLER PIC X(9) VALUE "NOVEMBRO ". 02 FILLER PIC X(9) VALUE "DEZEMBRO ". 01 FILLER REDEFINES TABELA-MESES. 02 MES PIC X(9) OCCURS 12 TIMES.

Ordenao de ficheiros
Exemplo: ordenao do ficheiro de cmbios.
IDENTIFICATION DIVISION. PROGRAM-ID. SORT-CAMBIOS. * * * * EXEMPLO DA UTILIZACAO DO VERBO SORT, PARA ORDENAR O FICHEIRO DE CAMBIOS F-CAMB, COM RESULTADO NO FICHEIRO F-CAMB-ORD.

ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. DG MV15000. OBJECT-COMPUTER. DG MV15000. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F-CAMB ASSIGN TO NOME-F-CAMB. SELECT F-CAMB-ORD ASSIGN TO NOME-F-CAMB-ORD. SELECT F-SORT ASSING TO NOME-F-SORT. DATA DIVISION. FILE SECTION. FD F-CAMB LABEL 01 CAMB-REC FD F-CAMB-ORD LABEL 01 CAMB-REC-ORD

Exemplo:
01 HOJE. 02 HOJE-ANO 02 HOJE-MES 02 HOJE-DIA ... DISPLAY-HOJE. ACCEPT HOJE FROM DATE. DISPLAY HOJE-DIA, " DE ", MES (HOJE-MES), " DE 19", HOJE-ANO. PIC 9(2). PIC 9(2). PIC 9(2).

RECORD OMITTED. PIC X(44). RECORD OMITTED. PIC X(44).

COBOL

27

COBOL

28

Ordenao de ficheiros (cont.)


SD F-SORT. 01 SORT-REC. 02 FILLER 02 SORT-KEY 02 FILLER PIC X(24). PIC X(3). PIC X(17).

Ficheiros sequenciais indexados


O ficheiro sequencial tem um ndice, atravs do qual se pode aceder directamente aos registos, especificados por uma chave. Mtodos de indexao: 1 ISAM (Indexed Sequential Access Method) 2 VSAM (Virtual Storage Access Method) ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT file-name ASSIGN TO implementor-name ORGANIZATION IS INDEXED [ACCESS MODE IS SEQUENTIAL RANDOM DYNAMIC RECORD KEY IS data-name-1 [ALTERNATE RECORD KEY IS data-name-2 [WITH DUPLICATES]]
Nota: Os ficheiros sequenciais indexados so criados em modo sequencial

WORKING-STORAGE SECTION. 77 NOME-F-CAMB PIC X(12) VALUE "FCAMBIOS.DAT". 77 NOME-F-CAMB-ORD PIC X(12) VALUE "FCAMBIOS.ORD". PROCEDURE DIVISION. PARAGRAFO-UNICO. SORT F-SORT ON ASCENDING KEY SORT-KEY USING F-CAMB GIVING F-CAMB-ORD. STOP RUN. Notas: Pode haver vrias chaves de ordenao (ASCENDING e DESCENDING). O verbo SORT abre e fecha os trs ficheiros envolvidos. Existe uma variante com INPUT PROCEDURE que emite os registos para ordenao (verbo RELEASE); e outra com OUTPUT PROCEDURE, que recolhe os registos de ordenao (verbo RETURN).

COBOL

29

COBOL

30

Verbos para processamento sequencial indexado(1)


READ, WRITE, REWRITE, DELETE, START READ READ file-name RECORD [INTO identifier] AT END imperative-statement READ file-name NEXT RECORD [INTO identifier ] AT END imperative-statement READ file-name RECORD [INTO identifier] [KEY IS data-name] [INVALID KEY imperative-statement]
leitura aleatria leitura dinmica leitura sequencial

Verbos para processamento sequencial indexado(2)


REWRITE REWRITE record-name [FROM identifier] [INVALID KEY imperative-statement]
invalid key : 1 acesso sequencial, e chave diferente da chave lida. 2 acesso aleatrio, e chave inexistente.

DELETE DELETE file-name RECORD [INVALID KEY imperative-statement]


invalid key : chave inexistente.

START START file-name [KEY

WRITE WRITE record-name [FROM identifier] [INVALID KEY imperative-statement]


invalid key : 1 quando aberto OUTPUT, e chaves no crescentes. 2 quando aberto I-O, e duplicao de chave principal. 3 falta de espao em disco.

= > NOT <

data-name]

invalid key : nenhum registo satisfaz a condio

[INVALID KEY imperative-statement]

COBOL

31

COBOL

32

Tabela das instrues possveis


ABERTURA ACESSO Sequencial INSTRUO READ WRITE REWRITE START DELETE READ WRITE REWRITE START DELETE READ WRITE REWRITE START DELETE INPUT OUTPUT I-O

Aleatrio

Gostaram?

Dinmico

COBOL

33

COBOL

34