Cobol
Cobol
Cobol
C O B O L
I n d i c e
1 Sistema Operacional........................................................................................................... 5
2 Programa de Processamento ............................................................................................. 5
3 Fluxo de compilação ........................................................................................................... 5
4 C O B O L........................................................................................................................ 6
4.1 Vantagens do COBOL ................................................................................................... 6
4.2 Divisões.......................................................................................................................... 6
4.2.1 Divisão de Identificação – IDENTIFICATION DIVISION .......................................... 6
4.2.2 Divisão de Ambiente – ENVIRONMENT DIVISION ................................................. 6
4.2.3 Divisão de Dados – DATA DIVISION ....................................................................... 6
4.2.4 Divisão de Processamento – PROCEDURE DIVISION ........................................... 6
5 Descrição da Folha de Programação ................................................................................. 7
6 Conjunto de caracteres válidos........................................................................................... 8
7 Regras de formatação......................................................................................................... 9
8 Regras de pontuação.......................................................................................................... 9
9 Palavras reservadas ........................................................................................................... 9
10 Identification Division ........................................................................................................ 13
11 Environment Division ........................................................................................................ 14
11.1 Configuration Section................................................................................................... 14
11.2 Input-Output Section .................................................................................................... 15
11.2.1 File-Control ............................................................................................................. 15
11.2.1.1 Select ................................................................................................................. 16
11.2.2 I-O-Control .............................................................................................................. 17
12 Data Division ..................................................................................................................... 20
12.1 File Section .................................................................................................................. 20
12.1.1 Indicadores de níveis:............................................................................................. 20
12.1.1.1 Nível FD ............................................................................................................. 21
12.1.1.1.1 Block Contains.............................................................................................. 21
12.1.1.1.2 Record Contains........................................................................................... 21
12.1.1.1.3 Recording Mode ........................................................................................... 21
12.1.1.1.4 Label Record ................................................................................................ 22
12.1.1.1.5 Data Record.................................................................................................. 22
12.1.2 Número de níveis.................................................................................................... 23
12.1.2.1 Número de níveis especiais .............................................................................. 23
12.1.2.1.1 Nível 66......................................................................................................... 23
12.1.2.1.2 Nível 77......................................................................................................... 24
12.1.2.1.3 Nível 78......................................................................................................... 24
12.1.2.1.4 Nível 88......................................................................................................... 24
12.1.3 Descrição do registro .............................................................................................. 25
12.1.3.1 Picture - PIC ...................................................................................................... 25
12.1.3.1.1 Formato Alfabético ....................................................................................... 25
12.1.3.1.2 Formato Alfanumérico .................................................................................. 26
12.1.3.1.3 Formato Numérico........................................................................................ 26
12.1.3.1.4 Formato de Edição ....................................................................................... 27
12.1.3.2 Blank when zero ................................................................................................ 29
12.1.3.3 Filler ................................................................................................................... 30
12.2 Working-Storage Section ............................................................................................. 31
12.2.1 Value....................................................................................................................... 31
12.2.2 Computational......................................................................................................... 31
12.2.2.1 Comp ou Comp-4 (Binário)............................................................................... 32
12.2.2.2 Comp-1 ou Comp-2 (Ponto flutuante) ............................................................ 32
12.2.2.3 Comp-3 (Compactado) ..................................................................................... 33
12.2.3 Justified................................................................................................................... 34
12.2.4 Redefines................................................................................................................ 35
12.2.5 Constantes figurativas ............................................................................................ 36
12.2.6 Renames................................................................................................................. 36
12.3 Linkage Section ........................................................................................................... 38
12.4 Communication Section ............................................................................................... 39
12.5 Report Section ............................................................................................................. 39
13 Procedure Division ............................................................................................................ 40
13.1 Comandos para manipulação de arquivos .................................................................. 41
13.1.1 Close....................................................................................................................... 41
13.1.2 Delete...................................................................................................................... 42
13.1.3 Open ....................................................................................................................... 44
13.1.4 Read ....................................................................................................................... 45
13.1.5 Rewrite.................................................................................................................... 47
13.1.6 Start ........................................................................................................................ 48
13.1.7 Write........................................................................................................................ 49
13.2 Comandos aritméticos ................................................................................................. 50
13.2.1 Add.......................................................................................................................... 51
13.2.2 Compute ................................................................................................................. 53
13.2.3 Divide ...................................................................................................................... 54
13.2.4 Multiply.................................................................................................................... 56
13.2.5 Subtract................................................................................................................... 57
13.3 Comandos de decisões ............................................................................................... 59
13.3.1 IF ............................................................................................................................. 59
13.3.1.1 Testes compostos.............................................................................................. 60
13.3.1.1.1 Teste de classe ............................................................................................ 61
13.3.1.1.2 Teste de nome de condição ......................................................................... 62
13.3.1.1.3 Teste de relação condicional........................................................................ 63
13.3.1.1.4 Teste de sinal ............................................................................................... 64
13.3.1.1.5 Teste de condição composta........................................................................ 65
13.3.1.2 Concatenação de IF (ninho de IF)..................................................................... 67
13.3.2 Evaluate .................................................................................................................. 68
13.4 Comandos Básicos ...................................................................................................... 73
13.4.1 Accept ..................................................................................................................... 73
13.4.2 Alter......................................................................................................................... 74
13.4.3 Continue.................................................................................................................. 75
13.4.4 Display .................................................................................................................... 75
13.4.5 End program ........................................................................................................... 76
13.4.6 Examine .................................................................................................................. 77
13.4.7 Exhibit ..................................................................................................................... 80
13.4.8 Exit .......................................................................................................................... 81
13.4.9 Go to ....................................................................................................................... 82
13.4.10 Goback.................................................................................................................... 83
13.4.11 Initialize ................................................................................................................... 84
13.4.12 Inspect .................................................................................................................... 87
13.4.13 Move ....................................................................................................................... 91
13.4.14 On ........................................................................................................................... 94
13.4.15 Perform ................................................................................................................... 95
13.4.16 Ready / Reset ......................................................................................................... 98
13.4.17 Stop run .................................................................................................................. 99
13.4.18 String..................................................................................................................... 100
13.4.19 Synchronized ........................................................................................................ 102
13.4.20 Transform.............................................................................................................. 103
13.4.21 Unstring................................................................................................................. 104
13.5 Comandos para comunicação entre programas........................................................ 107
1 Sistema Operacional
2 Programa de Processamento
É composto de:
• Tradutores de linguagens;
• Programas de serviços (utilitários); e;
• Programas de aplicação (COBOL, ASSEMBLER etc)
3 Fluxo de compilação
Programa fonte
elaborado pelo
programador
Sistema
Operacional
(tradutor)
Módulo
Objeto
Sistema
Operacional
(link editor)
Módulo
de
Carga
Execução do
Programa
4 C O B O L
4.2 Divisões
Colunas Descrição
Posição Conteúdo
01 a 06
01 a 03 Número da página
04 a 06 Número da linha
Caractere Significado
* Comentários
7
- Continuação da linha anterior
• Numéricos: 01234567890
• Alfabéticos: abcdefghijklmnopqrstuvwxyzABCDEFGHI
JKLMNOPQRSTUVWXYZ
• Especiais:
9 espaço
9 ponto e vírgula
9 aspas ou apóstrofos
9 parêntese esquerdo e direito
9 ponto
9 vírgula
9 mais
9 menos
9 asterisco
9 barra normal
9 igual
9 cifrão
9 maior
9 menor
9 dólar
9 e comercial
9 arroba
7 Regras de formatação
Exemplos:
• IMPOSTO-DE-RENDA.
• MOVE VENCIMENTO-PREVIO TO DEMITIDO-DA-EMPRESA.
8 Regras de pontuação
9 Palavras reservadas
VARYING
WAIT
WHEN
WHEN-COMPILED
WITH
WORDS
WORKING-STORAGE
WRITE
WRITE-ONLY
ZERO
ZERO-FILL
ZEROES
ZEROS
10 Identification Division
Formato:
IDENTIFICATION DIVISION.
PROGRAM-ID. (Nome do programa, com o máximo de 8 caracteres)
AUTHOR. (Nome do elaborador / programador )
INSTALLATION. (Loção onde o programa será executado)
DATE-WRITTEN. (Data da elaboração do programa)
DATE-COMPILED. (Área para o compilador inserir data / hora)
SECURITY. (Comentários sobre a segurança do programa / arquivo)
REMARKS. (Comentários que servem de documentação do programa)
Observações:
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTURE01.
AUTHOR. FUTURE SCHOOL CURSOS DE COMPUTACAO.
11 Environment Division
Formato:
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
.
.
.
INPUT-OUTPUT SECTION.
.
.
.
Formato:
CONFIGURATION SECTION.
SOURCE-COMPUTER.(Nome do equipamento onde será compilado o programa)
OBJECT-COMPUTER.(Nome do equipamento onde será executado o programa)
SPECIAL-NAMES. (Relacionar funções existentes no COBOL com nomes
simbólicos dados pelo programador)
Exemplo:
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-3090.
OBJECT-COMPUTER. IBM-3090.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA ¹
CURRENCY SIGN IS literal ²
C01 IS CANAL-1.³
Observações:
Formato:
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT (nome do arquivo) ASSIGN TO (classe-organização-nome)
.
.
I-O CONTROL.
.
.
.
11.2.1 File-Control
11.2.1.1 Select
Formato:
• Nome do arquivo
Dado pelo programador e é pelo qual será reconhecido nas demais divisões
do programa.
• Classe
Especifica o tipo de periférico, podendo ser:
9 (DA) – Direct Access (Discos Magnéticos);
9 (UT) – Utility (Fitas e Discos Magnéticos);
9 (UR) – Unit Record (Leitoras, Impressoras) ;
9 (UP) – Unit Punch (Perfuradoras)
• Organização
Especifica os métodos de acessos aos arquivos, podendo ser:
9 (S) – Arquivos Seqüenciais;
9 (D) – Acesso Direto (classe = DA);
9 (W) – Acesso Direto com o uso do comando REWRITE
9 ( I ) – Arquivos Indexados
• NOME
É o nome que o arquivo será reconhecido no JCL através do cartão DD(não
pode ter mais que 8 (oito) caracteres e nem começar com caractere
numérico).
11.2.2 I-O-Control
Exemplo 01:
I-O-CONTROL.
APPLY WRITE-ONLY (Nome do arquivo variável).
Exemplo:
Exemplo 02:
I-O-CONTROL.
SAME RECORD AREA FOR (file-01), (file-02), (file-03)...
ou
SAME AREA FOR (file-01), (file-02), (file-03)...
É utilizado para trabalhar com uma única descrição dos dados na ‘FD’.
Quando não tivermos a opção ‘RECORD’, os arquivos não podem estar
abertos ao mesmo tempo; Primeiro abre-se o FILE-01, faz todo o
processamento necessário para o mesmo, fecha-o, depois proceder ao
mesmo tratamento para os demais arquivos, seguindo a mesma ordem para
cada. A cláusula ‘BLOCK CONTAINS nnn RECORDS ‘ é obrigatória, não
podendo ser utilizada a opção ‘BLOCK 0’.
Exemplo:
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. IBM-3090.
OBJECT-COMPUTER. IBM-3090.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
C01 IS CANAL-1.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CARTAO ASSIGN TO UR-S-CARTAO.
SELECT FITA ASSIGN TO UT-S-FITA.
SELECT VARIAV ASSIGN TO UT-S-VARIAV.
SELECT CADFUNC ASSIGN TO UT-S-CADFUNC.
SELECT ARQFUNC ASSIGN TO UT-S-ARQFUNC.
I-O-CONTROL.
APPLY WRITE-ONLY VARIAV.
SAME RECORD AREA FOR CADFUNC
ARQFUNC.
12 Data Division
Indicador Definição
12.1.1.1 Nível FD
Formato:
FD nome-do-arquivo
BLOCK CONTAINS nnn RECORDS ou CHARACTERS
RECORD CONTAINS nnn CHARACTERS
RECORDING MODE IS (formato do arquivo)
LABEL RECORD IS/ARE (formato do Label) STANDARD / OMITTED
DATA RECORD IS/ARE (nome do registro)
Formato:
Formato:
Observação: Se esta clausula for coloca é feito uma conferência pelo compilador
somando-se a quantidade de bytes definidos nos campos do registro, para
verificar se o tamanho definido confere com a somatório dos bytes dos campos.
Formato:
RECORDING MODE IS F, V, U ou s
Observações:
Se não for colocada a clausula ‘Recording Mode’, o compilador determinará o
formato através do cartão ‘DD’ do JCL ou catálogo.
Formato:
Observações:
Quando omitido assume ‘Label Record Standard’.
Para geração de relatórios sempre utilizar ‘Label Record Omitted’, pois não se
pode listar o mesmo relatório em diferentes impressoras simultaneamente durante
o processamento de um determinado programa.
Formato:
O números de níveis estão entre 01 e 49, porém quanto menor for o nível, mais
importante ele será dentro da definição.
Exemplo:
FD ARQUIVO.
01 REGISTRO.
02 CPO-1 PIC X(05)
02 CPO-2 .
03 CPO-2-A PIC 9(05).
03 CPO-2-B PIC X(05).
02 CPO-3 PIC S9(15)V99.
02 CPO-4.
03 CPO-4-A PIC 9(02).
03 CPO-4-B.
04 CPO-4-B-1 PIC X(02).
04 CPO-4-B-2 PIC 9(02).
04 CPO-4-B-3 PIC X.
12.1.2.1.1 Nível 66
Exemplo:
01 REGISTRO.
02 A PIC X(01).
02 B PIC X(03).
02 C PIC X(05).
66 A1 RENAME X THRU Z.
66 A2 RENAME X THRU Y.
66 A3 RENAME Z THRU Y.
12.1.2.1.2 Nível 77
Entradas que são itens de dados não contíguos, que não são subdivisões de
outros, nem podem ser subdivididos. Muito utilizado para acumuladores e/ou áreas
de File Status.
Exemplo:
WORKING-STORAGE SECTION.
77 ACUM-LINHAS PIC 9(02) VALUE 60.
77 ACUM-PAG PIC 9(05) VALUE 0.
77 ACUM-LIDOS PIC 9(09) VALUE 0.
12.1.2.1.3 Nível 78
Exemplo:
WORKING-STORAGE SECTION.
78 CONSTANTE-01 PIC X(06) VALUE ‘FUTURE’.
78 CONSTANTE-02 PIC X(06) VALUE ‘SCHOOL’.
78 CONSTANTE-03 PIC X(06) VALUE ‘CURSOS’.
78 CONSTANTE-04 PIC X(02) VALUE ‘DE’.
78 CONSTANTE-05 PIC X(10) VALUE ‘COMPUTACAO’.
78 CONSTANTE-06 PIC X(05) VALUE ‘COBOL’.
78 CONSTANTE-07 PIC X(03) VALUE ‘ANS’.
12.1.2.1.4 Nível 88
Exemplo 01:
01 REGISTRO.
02 SEXO PIC X(01).
88 FEMININO VALUE ‘F’.
88 MASCULINO VALUE ‘M’.
Exemplo 02:
Uma entrada para cada item (campo), sendo descrito com o número de nível.
Formato:
Exemplos:
Exemplos:
Exemplos:
503 9(03) 99 03
Código de
Significado
Edição
$ Símbolo monetário.
Exemplos:
Conteúdo Definição do
Pic Valor Exibido
do campo campo
Indica que o item descrito deverá ser preenchido com espaços sempre que um
valor for zero. Deve ser apenas informado para itens elementares ou numérico de
edição.
Exemplo
Quando o campo que for movido para o campo valor estiver com conteúdo
ZEROS, o campo valor ficará com espaços.
12.1.3.3 Filler
Usado para um item elementar cuja informação nunca será referenciada, pode ser
usada em qualquer seção da Data Division.
Exemplo:
Endereço
Código Nome Filler
Rua Bairro CEP Cidade Estado
N AN AN AN N AN AN AN
3 30 30 15 8 20 2 12
Legenda:
AN = Alfanumérico
N = Numérico
FD ARQUIVO
LABEL RECORD IS STANDARD
RECORDING MODE IS F
RECORD CONTAINS 120 CHARACTERS
BLOCK CONTAINS 10 RECORDS
DATA RECORD IS REGISTRO.
01 REGISTRO.
02 CODIGO PIC 9(03).
02 NOME PIC X(30).
02 ENDERECO.
03 RUA PIC X(30).
03 BAIXRRO PIC X(15).
03 CEP PIC 9(08).
03 CIDADE PIC X(20).
03 ESTADO PIC X(02).
02 FILLER PIC X(12).
DATA DIVISION.
FILE SECTION.
FD ARQUIVO
LABEL RECORD IS STANDARD
RECORDING MODE IS F
RECORD CONTAINS 30 CHARACTERS
BLOCK CONTAINS 10 RECORDS
DATA RECORD IS REGISTRO.
01 RECIBO.
02 IDENTIFICACAO PIC X(05).
02 NUMERO PIC 9(05).
02 VALOR PIC S9(15)V99 COMP-3.
02 FILLER PIC X(11).
12.2.1 Value
Exemplo:
WORKING-STORAGE SECTION.
01 WRK-DATE-SYS.
02 WRK-ANO-SYS PIC 9(04).
02 WRK-MES-SYS PIC 9(02).
02 WRK-DIA-SYS PIC 9(02).
01 WRK-TIME-SYS.
02 WRK-HORA-SYS PIC 9(02).
02 WRK-MINUTO-SYS PIC 9(02).
01 CAB001.
02 FILLER PIC X(10) VALUE SPACES.
02 FILLER PIC X(50) VALUE
‘FUTURE SCHOOL CURSOS DE COMPUTACAO’.
02 FILLER PIC X(06) VALUE ‘PAG.: ‘.
02 CAB001-PAG PIC Z.ZZ9.
12.2.2 Computational
Só podem ser utilizados para itens numéricos. Podem ser definidos como:
• COMP ou COMP-4;
• COMP-1 ou COMP-2; e;
• COMP-3.
Exemplo:
Exemplo:
Como podemos ver, os itens 4 e 5, estão valorizados. Para isso, devemos sempre
informar o valor no formato decimal, porém fisicamente a apresentação dos
campos será no formato hexadecimal, conforme abaixo:
Exemplo:
VALOR1 = 4321
VALOR2 = -8765
VALOR3 = -357
VALOR4 = 486
WORKING-STORAGE SECTION.
01 VALOR1 PIC S9(05) COMP-3.
01 VALOR2 PIC S9(05) COMP-3.
01 VALOR3 PIC S9(05) COMP-3.
01 VALOR4 PIC S9(05) COMP-3.
Valor1 = 04 32 1C
Valor2 = 08 76 5D
Valor3 = 00 35 7D
Valor4 = 00 48 6C
12.2.3 Justified
Formato:
JUSTIFIED RIGHT
JUST RIGHT
Exemplo:
12.2.4 Redefines
Exemplo:
01 REGISTRO.
03 CAMPO1 PIC X(06).
03 CAMPO2.
05 CAMPO2-1 PIC X(03).
05 CAMPO2-2 PIC 9(04).
05 CAMPO2-3 PIC X(05).
03 CAMPO2-R REDEFINES CAMPO2.
05 CAMPO2-R-1 PIC 9(06).
05 CAMPO2-R-2 PIC 9(06).
03 CAMPO3 PIC X(03).
REGISTRO
CAMPO2-R
CAMPO2-R-1 CAMPO2-R-2
ZERO alfanuméricas
ZEROS ou
ZEROES numéricas
alfanuméricas
SPACE
ou
SPACES
numéricas
HIGH-VALUE
alfanuméricas
HIGH-VALUES
QUOTE
alfanuméricas
QUOTES
alfanuméricas
ALL ‘CARACTER’ ou
alfabéticas
LOW-VALUE
alfanuméricas
LOW-VALUES
Exemplo:
12.2.6 Renames
Formato:
Exemplo:
01 REGISTRO.
05 GRUPO1.
10 CPO1-GR1 PIC X(02) VALUE ‘AB’.
10 CPO2-GR1 PIC X(02) VALUE ‘CD’.
10 CPO3-GR1 PIC 9(02) VALUE ‘12’.
05 GRUPO2.
10 CPO1-GR2 PIC X(03) VALUE ‘FGH’.
10 CPO2-GR2 PIC X(03) VALUE ‘IJK’.
10 CPO3-GR2 PIC 9(03) VALUE ‘456’.
66 ARRANJO1 RENAME SGRUPO1.
66 ARRANJO2 RENAME SGRUPO1 THRU GRUPO2.
Seção que descreve os dados aos quais será feita referência pelo programas,
chamador e chamado, e é definida nos programas chamados.
WORKING-STORAGE SECTION.
01 DADOS-NOME.
03 TAMANHO PIC 9(02).
03 NOME PIC X(30).
.
.
.
PROCEDURE DIVISION.
.
.
.
CALL ‘PROGB’ USING DADOS-NOME.
.
.
.
STOP RUN.
WORKING-STORAGE SECTION.
.
.
.
LINKAGE SECTION.
01 DADOS.
02 TAMANHO-LINK PIC 9(02).
02 NOME-LINK PIC X(30).
.
.
.
PROCEDURE DIVISION USING DADOS.
.
.
.
GOBACK.
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 38 de 143
C O B O L
Observação:
Podemos notar que os nomes das áreas não precisam ser iguais, mas os campos
devem possuir as mesmas características (formação e ordem), os dados a serem
definidos na Linkage Section devem ter um nível 01, onde será o campo principal
que receberá os dados, ou cada campo pode ser referenciado a um nível 77.
Seção que descreve os dados que servem de interface entre o Message Control
System (MCS) e o programa Cobol.
Seção que descreve os relatórios que o programa deve emitir. Muito utilizado no
Report Writer.
13 Procedure Division
É nesta divisão que através dos comando executáveis adequados, os dados são
processados de forma a produzir os resultados previstos no programa.
Procedure Division
inicialização
abertura de arquivos
corpo do programa
operações diversas
finalização
fechamento dos arquivos
13.1.1 Close
Formato:
CLOSE ARQUIVO.
Exemplos:
CLOSE ARQ-01.
13.1.2 Delete
Formato.
DELETE NOME-DO-ARQUIVO
[invalid key <comando1> | not invalid key <comando2>].
Observações:
a) É necessário que o comando Read tenha sido executado;
b) Pode ser utilizado também com o uso do comando Start.
Opções utilizadas:
Opção Significado
Exemplo a):
MOVE COD-PECA TO CHAVE-PECA.
READ CADPECA
KEY IS CHAVE-PECA
INVALID KEY
DISPLAY ‘ERRO NA LEITURA DO CODIGO => ‘ CHAVE-PECA
GO TO FIM.
DELETE CADPECA
INVALID KEY
DISPLAY ‘DEU NA DELECAO DO CODIGO => ‘ CHAVE-PECA
GO TO FIM.
Exemplo b):
MOVE COD-PECA TO CHAVE-PECA.
DELETE CADPECA
INVALID KEY
DISPLAY ‘DEU NA DELECAO DO CODIGO => ‘ CHAVE-PECA
GO TO FIM.
13.1.3 Open
Formato:
Exemplo:
Observação:
13.1.4 Read
Formato:
Opções utilizadas:
Opção Significado
Exemplos:
READ ARQ-01.
READ ARQ-02
INTO WRK-ARQ02.
READ ARQ-05
AT END MOVE ‘FIM’ TO WRK-FIM.
READ ARQ-05
NOT AT END MOVE ‘COMECO’ TO WRK-COMECO.
READ ARQ-06
KEY IS COD-PECA
INVALID KEY DISPLAY ‘REGISTRO NAO CADASTRADO’.
READ ARQ-07
KEY IS COD-PECA
NOT INVALID KEY DISPLAY ‘REGISTRO JA CADASTRADO’.
13.1.5 Rewrite
Observação:
Formato1:
Opções utilizadas:
Opção Significado
Exemplos:
REWRITE REG-CADPECA
INVALID KEY
DISPLAY ‘ERRO NO REWRITE DO CODIGO => ‘ CHAVE-PECA
GO TO FIM.
13.1.6 Start
Observação:
O comando Start, só posiciona o registro, a leitura deverá ser feita pelo comando
Read.
Formato.
Opções utilizadas:
Opção Significado
EQUAL Equal
Exemplos:
13.1.7 Write
Formato1:
Formato2:
Opções utilizadas:
Opção Significado
Exemplos:
WRITE ARQ-REG-02.
WRITE ARQ-REG-02 FROM ARQ-REG-01.
WRITE ARQ-REG-02 FROM ARQ-REG-01
INVALID KEY DISPLAY ‘ERRO NA GRAVACAO’.
Opções utilizadas:
13.2.1 Add
Formato 1:
Exemplo:
ADD 1 TO CONTADOR.
ADD 1 TO CONTADOR1 CONTADOR2.
Formato 2:
Exemplo:
Formato 3:
Exemplo:
01 ITEM1.
05 VALOR1 PIC 9(02) VALUE 10.
05 VALOR2 PIC 9(02) VALUE 20.
01 ITEM2.
05 VALOR1 PIC 9(02) VALUE 30.
05 VALOR2 PIC 9(02) VALUE 10.
PROCEDURE DIVISION.
ADD VALOR1 OF ITEM1
VALOR2 OF ITEM1 TO VALOR3 GIVING RESULTADO.
ADD CORR ITEM1 TO ITEM2.
13.2.2 Compute
Caracteres utilizados:
• Adição +
• Subtração -
• Multiplicação *
• Divisão /
• Exponenciação **
Formato:
Exemplos:
13.2.3 Divide
Formato 1:
Exemplo:
Formato 2:
Exemplo:
Formato 3:
Exemplo:
Formato 4:
Exemplo:
Formato 5:
Exemplo:
13.2.4 Multiply
Formato 1:
Exemplo:
Formato 2:
Exemplo:
13.2.5 Subtract
Formato 1:
Exemplo:
Formato 2:
Exemplo:
Formato 3:
Exemplo:
01 ITEM1.
05 VALOR1 PIC 9(02) VALUE 10.
01 ITEM2.
05 VALOR1 PIC 9(02) VALUE 30.
PROCEDURE DIVISION.
SUBTRACT CORR ITEM1 FROM ITEM2.
13.3.1 IF
Formato:
IF condição
{NEXT SENTENCE/comando...}
{ELSE
[NEXT SENTENCE/comando...]}
Exemplos:
Exemplo 1:
Exemplo 2:
IF COD-MAT IS NUMERIC
COMPUTE VALOR = VALOR * 1,05
ELSE
PERFORM 999-99-TRATAR-ERRO.
Toda sentença condicional possui pelo menos 4 (quatro) elementos, que são:
comando IF, teste, ação verdadeira e ação falsa.
Formato.
IF IDENTIFICADOR IS NUMERIC
IS NOT ALPHABETIC
Exemplo 1:
IF COD-MAT-R IS NUMERIC
PERFORM 005-05-REGISTRO-OK
ELSE
MOVE ‘CAMPO NAO NUMERICO’ TO WS-MENS-ERRO
PERFORM 999-99-TRATAR-ERRO.
Exemplo 2:
IF NOME-MAT-R IS ALFABETIC
PERFORM 005-05-REGISTRO-OK
ELSE
MOVE ‘CAMPO NAO ALFABETICO’ TO WS-MENS-ERRO
PERFORM 999-99-TRATAR-ERRO.
Observação:
Ao efetuar o teste em um campo compactado, para verificar se o conteúdo é
numérico, verificar se o campo está sinalizado, caso esteja não esquecer de defini-
lo como PIC S9, por exemplo:
Definição:
01 REG-CADFUNC.
03 MATRICULA PIC 9(05).
03 NOME PIC X(30).
03 DATA-NASC.
05 DIA-NASC PIC 9(02).
05 MES-NASC PIC 9(02).
05 ANO-NASC PIC 9(04).
03 ESCOLARIDADE PIC 9(01).
PROCEDURE DIVISION.
IF ESCOLARIDADE EQUAL 1
PERFORM NNN-NN-PRIMEIRO-GRAU
ELSE
IF ESCOLARIDADE EQUAL 2
PERFORM NNN-NN-SEGUNDO-GRAU
ELSE
IF NACIONALIDADE EQUAL 3
PERFORM NNN-NN-SUPERIOR
ELSE
PERFORM 999-99-TRATAR-ERRO.
Definição:
01 REG-CADFUNC.
03 MATRICULA PIC 9(05).
03 NOME PIC X(30).
03 DATA-NASC.
05 DIA-NASC PIC 9(02).
05 MES-NASC PIC 9(02).
05 ANO-NASC PIC 9(04).
03 ESCOLARIDADE PIC 9(01).
88 PRIMEIRO-GRAU VALUE 1.
88 SEGUNDO-GRAU VALUE 2.
88 SUPERIOR VALUE 3.
88 ERRO VALUE 4 THRU 9.
PROCEDURE DIVISION.
IF PRIMEIRO-GRAU
PERFORM NNN-NN-PRIMEIRO-GRAU
ELSE
IF SEGUNDO-GRAU
PERFORM NNN-NN-SEGUNDO-GRAU
ELSE
IF SUPERIOR
PERFORM NNN-NN-SUPERIOR
ELSE
PERFORM 999-99-TRATAR-ERRO.
Formato:
Exemplo:
IF ACUM-LINHA GREATER 60
PERFORM NNN-NN-CABECALHOS.
Formato:
IF (IDENTIFICADOR) IS (POSITIVE)
(EXPRESSÃO ARITMETICA) IS NOT (NEGATIVE)
(ZERO)
Exemplo:
IF PR-UNITARIO IS POSITIVE
MOVE PR-UNITARIO TO PR-PARCIAL
ADD PR-UNITARIO TO ACUM-VAL-POSITIVO.
Exemplos:
Observação:
Formato:
Exemplos:
Exemplo:
PERFORM 002-01-LER-REGISTRO.
Observação:
Só podemos usar uma cláusula ELSE para cada IF.
13.3.2 Evaluate
Formato:
Objetivo:
ANY
condição
TRUE
FALSE
identificador-1 THROUGHT identificador-2
[NOT] literal-1 ou literal-1
exp-aritmetica-1 THRU exp-aritmetica-2
Exemplo 1:
EVALUATE TRUE
WHEN MES EQUAL 04 OU 06 OR 09 OR 11
MOVE 30 TO NR-DIAS
WHEN MES EQUAL 02
MOVE 28 TO NR-DIAS
WHEN OTHER
MOVE 31 TO NR-DIAS
END-EVALUATE.
Exemplo 2:
Vamos supor que NOTAS contém as notas obtidas pelos estudantes, variando de
0 a 100, e GRAU é um campo alfanumérico de uma posição. Queremos calcular o
GRAU de acordo com critério mostrado na tabela abaixo:
Notas Grau
080 – 100 A
060 – 079 B
045 – 059 C
030 – 044 D
000 – 029 E
EVALUATE NOTAS
WHEN 080 THRU 100 MOVE ‘A’ TO GRAU
WHEN 060 THRU 079 MOVE ‘B’ TO GRAU
WHEN 045 THRU 059 MOVE ‘C’ TO GRAU
WHEN 030 THRU 044 MOVE ‘D’ TO GRAU
WHEN 000 THRU 029 MOVE ‘E’ TO GRAU
WHEN OTHER MOVE ‘W’ TO GRAU
END-EVALUATE.
Observação:
No exemplo acima, o literal ‘W’ foi movido para o campo GRAU, pois se trata de
uma NOTA diferente das mencionas, se tivermos certeza que as notas informadas
serão entre 000 a 100, então não precisamos informar essa condição.
Exemplo 3:
TIPO PRODUTO = 1 S S N N
CATEGORIA = 1 S N S N
COMISSÃO = 10% S
COMISSÃO = 8% S S
COMISSÃO = 12% S
Exemplo 4:
13.4.1 Accept
Formato:
Exemplos:
Definição de WS-DATE-SYS
01 WS-DATE-SYS.
05 WS-DIA-SYS PIC 9(02).
05 FILLER PIC X(01).
05 WS-MES-SYS PIC 9(02).
05 FILLER PIC X(01).
05 WS-ANO-SYS PIC 9(04).
ou
01 WS-DATE-SYS PIC X(10).
13.4.2 Alter
Formato:
Observação:
Exemplo:
001-00-TRATAMENTO-ALTER SECTION.
001-01-EXEMPLO-ALTER.
GO TO 001-02-ABERTURA.
001-02-ABERTURA.
OPEN INPUT ARQUIVOE
OUTPUT ARQUIVOS.
ALTER 001-02-ABERTURA TO PROCEED 001-03-LEITURA.
001-03-LEITURA.
READ ARQUIVOE
.
.
.
13.4.3 Continue
Formato:
CONTINUE
Exemplo:
13.4.4 Display
Formato:
Observação:
Quantidade de caracteres (bytes) para seu respectivo dispositivo:
• Console = 100 BYTES.
• Syspunch = 72 BYTES.
• Sysout = 120 BYTES.
Exemplos:
Formato:
END PROGRAM.
13.4.6 Examine
Formato 1:
Formato 2:
Função Significado
Exemplos:
13.4.7 Exhibit
Formato:
Observações:
• O EXHIBIT não pode ser utilizado para contadores especiais;
• O EXHIBIT mostra o nome do campo e em seguida o seu respectivo
conteúdo.
Exemplos:
13.4.8 Exit
O comando ‘EXIT’ deve ser procedido por um nome de parágrafo e deve ser
único.
Formato:
Exemplo:
001-00-INICIO.
PERFORM 002-00-AAAA THRU 002-99-CCCC.
..........
002-00-AAAA.
..........
..........
002-99-AAAA. EXIT.
002-00-BBBB.
..........
..........
002-99-BBBB. EXIT.
002-00-CCCC.
..........
..........
002-99-CCCC. EXIT.
13.4.9 Go to
Formato:
• Desvio incondicional.
GO TO (nome do endereço).
Exemplo 1:
LEITURA.
............
............
MOVE CAMPO TO DADOS.
WRITE FITA.
GO TO LEITURA.
Exemplo 2:
IF CODIGO EQUAL 10
GO TO ROTINA-10.
IF CODIGO EQUAL 20
GO TO ROTINA-20.
IF CODIGO EQUAL 30
GO TO ROTINA-30.
ou
GO TO ROTINA-10
ROTINA-20
ROTINA-30 DEPENDING ON CODIGO.
WRITE FITA.
Explanação do exemplo 2:
13.4.10 Goback
Exemplo 1:
IDENTIFICATION DIVISION.
...
...
...
PROCEDURE DIVISION.
...
...
...
CALL ‘PROGB’ USING DADOS.
...
...
...
GOBACK.
Exemplo 2:
IDENTIFICATION DIVISION.
...
...
...
LINKAGE SECTION.
...
...
...
PROCEDURE DIVISION.
...
...
...
GOBACK.
13.4.11 Initialize
O propósito deste comando é inicializar determinado campo, que possa ser item
de grupo ou item elementar.
Opção Significado
Formato:
Exemplo 1:
01 ITEM1.
05 CAMPO1 PIC 9(05).
05 CAMPO2 PIC X(04).
05 CAMPO3 PIC 9(03).
05 CAMPO4 PIC ZZZ9V99.
PROCEDURE DIVISION.
INITIALIZE ITEM1 REPLACING NUMERIC DATA BY 50.
Exemplo 2:
01 ITEM1.
05 CAMPO1 PIC 9(05).
05 CAMPO2 PIC X(04).
05 CAMPO3 PIC 9(03).
05 CAMPO4 PIC ZZZ9,99.
PROCEDURE DIVISION.
INITIALIZE ITEM1 REPLACING NUMERIC DATA BY 50.
INITIALIZE ITEM1 REPLACING ALPHANUMERIC DATA BY ‘A’.
INITIALIZE ITEM1 REPLACING NUMERIC-EDITED DATA BY 54,2.
Campo Inicialização
CAMPO1 00050
CAMPO2 A
CAMPO3 050
CAMPO4 054,20
Note que a frase REPLACING é opcional, sendo que se for omitida, todos os
campos numéricos serão inicializados com zeros e todos os demais campos com
brancos.
Exemplo 3:
01 ITEM1.
05 CAMPO1 PIC 9(05).
05 CAMPO2 PIC X(04).
05 CAMPO3 PIC 9(03).
05 CAMPO4 PIC ZZZ9,99.
PROCEDURE DIVISION.
INITIALIZE ITEM1.
Exemplo 4:
01 ITEM1.
05 CAMPO1 PIC 9(05).
05 CAMPO2 PIC X(10).
05 CAMPO2-R REDEFINES CAMPO2.
10 CAMPOA PIC 9(04).
10 CAMPOB PIC 9(04)V99.
PROCEDURE DIVISION.
INITIALIZE ITEM1.
Exemplo 5:
01 ITEM1.
05 CAMPO1 PIC 9(05).
05 CAMPO2 PIC X(10).
05 CAMPO2-R REDEFINES CAMPO2.
10 CAMPOA PIC 9(04).
10 CAMPOB PIC 9(04)V99.
PROCEDURE DIVISION.
INITIALIZE CAMPO2-R.
Neste caso, identificador 1, por ter a cláusula REDEFINES ou por ser um item
contendo a cláusula REDEFINES, CAMPOA e CAMPOB serão inicializados com
zeros.
Exemplo 6:
01 TABELA.
05 CAMPO1 PIC 9(05) OCCURS 20 TIMES.
PROCEDURE DIVISION.
INITIALIZE TABELA.
Observação:
• O item FILLER (ou sem nome) e nome de índice não são afetados pelo
comando INITIALIZE;
13.4.12 Inspect
Formato 1 (TALLYING):
INSPECT nome-de-dado-1 TALLYING nome-de-dado-2
FOR [CHARACTERS [ALL / LEADING] operando-3]
[[BEFORE / AFTER] INITIAL operando-4].
Formato 2 (TALLYING):
REPLACING [CHARACTERS [ALL / LEADING / FIRST] operando-5]
BY [[BEFORE / AFTER] INITIAL operando-6].
Exemplo 1:
INSPECT NOME TALLYING CONTADOR FOR CHARACTERS
FOR INITIAL ‘P’.
CONTADOR 0 8
Explanação do exemplo 1:
Foi efetuada uma contagem de caracteres que precedem o primeiro caractere ‘P’
encontrado, no caso, 8.
Exemplo 2:
INSPECT NOME REPLACING LEADING ZEROS
BY ‘9’ AFTER INITIAL ‘P’.
BA004P0020AB BA004P9920AB
NOME
ABCPD5004P0 ABCPDP5004P0
Explanação do exemplo 2:
Na primeira execução houve uma substituição dos caracteres ‘00’ que estão após
o caractere ‘P’, pelos caracteres ‘99’, enquanto que na segunda execução, como
não existe nenhum caractere ‘0’ após o caractere ‘P’, não foi efetuada nenhuma
substituição.
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 88 de 143
C O B O L
Exemplo 3:
INSPECT ITEM TALLYING CONTADOR FOR LEADING ‘L’
BEFORE INITIAL ‘A’.
Campos Conteúdo
Explanação do exemplo 3:
Foi efetuada uma contagem de caracteres ‘L’ que precedem o primeiro caractere
‘A’.
Exemplo 4:
MOVE ZEROS TO CONTADOR.
INSPECT ITENS TALLYING CONTADOR FOR ALL ‘L’
REPLACING LEADING ‘E’ BY ‘A’ AFTER INITIAL ‘L’.
Campos Conteúdo
Explanação do exemplo 4:
Foi efetuada uma contagem de caracteres ‘L’ que aparecem nos conteúdos do
campo ITENS e ao mesmo tempo, houve uma substituição dos caracteres ‘A’ que
precedam o primeiro caractere ‘L’ por ‘E’.
Exemplo 5:
INSPECT SENTIDO REPLACING ALL
SEPARADORES BY TRANSFORMACAO.
Campos Conteúdo
SENTIDO SAO[PAULO[-[RIO[DE[JANEIRO[
TRANSFORMACAO ‘‘
TRANSFORMACAO ‘‘
Explanação do exemplo 5:
Foi efetuada uma verificação no campo SENTIDO, onde os caracteres iguais aos
informados no campo SEPARACAO, foi substituído pelos caracteres encontrados
no campo TRANSFORMACAO.
13.4.13 Move
Formato 1:
MOVE identificador-1 / literal-1 TO identificador-2
identificador-3
literal-2
MOVE CORRESPONDING identificador-1 TO identificador-2
ou
MOVE CORR identificador-1 TO identificador-2
Observação:
MOVE CORRESPONDING – movimenta dados entre itens com o mesmo nome.
Exemplo:
WORKING-STORAGE SECTION.
01 AREA-1 PIC X(06) VALUE ‘FUTURE’.
01 AREA-2 PIC X(06).
01 AREA-3 PIC X(06).
PROCEDURE DIVISION.
MOVE AREA-1 TO AREA-2.
MOVE AREA-1 TO AREA-2
AREA-3.
Exemplos com literais figurativas:
MOVE SPACES TO AREA-1
AREA-4.
MOVE ‘FUTURE’ TO AREA-1
AREA-4.
MOVE ZEROS TO CAMPO-5
CAMPO-8.
MOVE 13579 TO CAMPO-5
CAMPO-8.
Exemplos com MOVE CORRESPONDING (CORR):
01 AREA-1.
05 NUMERO PIC 9.
05 NOME PIC X(30).
01 AREA-2.
05 NOME PIC X(30).
05 NUMERO PIC 9.
PROCEDURE DIVISION.
MOVE CORRESPONDIG AREA-1 TO AREA-2.
ou
MOVE CORR AREA-1 TO AREA-2.
Observação:
Se o campo fonte e o campo receptor forem de algum modo superpostos (uso do
REDEFINES) o resultado do comando MOVE será imprevisível.
Antes Depois
** b = espaço.
Tabela de movimentação
Receptor
GR AL NA BI NE ANE DI
Emissor
grupo (GR) S S S S1 S1 S1 S1
alfabético (AL) S S S N N S N
alfanumérico (AN) S S S S4 S4 S S4
binário (BI) S1 N S2 S S S2 S
zeros S N S S3 S3 S3 S3
brancos (spaces) S S S N N S N
high-values / low-values S N S N N S N
all literal S S S S5 S5 S S5
literal numérico S1 N S2 S S S2 S
13.4.14 On
Formato:
Exemplo 1:
ON 50
GO TO FIM-PROCES
ELSE
MOVE A TO B.
Exemplo 2:
ON 1
MOVE ‘*’ TO XAVE.
Neste caso só a primeira vez o campo XAVE será atualizado com ‘*’.
Exemplo 3:
ON 1 AND EVERY 20
WRITE RELATO FROM CABEC1 AFTER CANAL-1.
Neste caso na primeira vez e a cada 20 vezes a linha ‘CABEC1’ será impressa.
Observação:
A comando ‘ON’ não aceita o comando ‘IF’ ou um comando ‘READ’ que tenha a
condição ‘AT END’ ou ‘INVALID KEY’.
13.4.15 Perform
Observações gerais:
Formato 1:
PERFORM [<procedure-name1>
[THRU | THROUGH <procedure-name2>]] [<comando1>
[END-PERFORM]]
PROCEDURE DIVISION.
PERFORM ROTINA1.
STOP RUN.
ROTINA1.
COMANDO1.
COMANDO2.
COMANDO3.
PROCEDURE DIVISION.
PERFORM
COMANDO1
COMANDO2
COMANDO3
END-PERFORM.
Formato 2:
Opção Significado
TIMES Número de vezes que uma rotina ou os comandos do seu escopo serão executados.
PROCEDURE DIVISION.
PERFORM 10 TIMES.
COMANDO1
COMANDO2
COMANDO3
END-PERFORM.
Formato 3:
Opção Significado
Faz com que o teste da <condição2> seja feito após a primeira execução
WITH TEST AFTER
do PERFORM.
Exemplo:
Formato 4:
Opção Significado
Formato:
READY TRACE.
RESET TRACE.
Exemplo:
PROCEDURE DIVISION.
000-00-COMECOU SECTION.
READY TRACE.
.
.
.
000-00-EXIT.
001-00-PRIM-ROTINA SECTION.
.
.
.
001-00-EXIT.
999-99-ULTIMA-ROTINA SECTION.
.
.
.
RESET TRACE.
999-99-EXIT.
Observação:
Formato:
STOP RUN.
ou
STOP RUN | <literal> …
Opção Significado
Exemplo:
999-00-ULTIMA-ROTINA SECTION.
CLOSE ARQUIVO
RELATO.
STOP RUN.
13.4.18 String
Formato:
STRING{<campo1> | <literalnn1>
DELIMITED BY <campo2> | <literalnn2> | SIZE}
INTO <campox3>
[WITH POINTER <campon4>]
[ON OVERFLOW <comando1>]
[NOT ON OVERFLOW <comando2>]
[END-STRING
Opção Significado
Exemplo 1:
77 CAMPO1 PIC X(06) VALUE ‘FUTURE’.
77 CAMPO2 PIC X(06) VALUE ‘SCHOOL’.
77 RESULTADO PIC X(13).
PROCEDURE DIVISION.
STRING CAMPO1 ‘-’ CAMPO2 DELIMITED BY SIZE INTO RESULTADO.
RESULTADO FUTURE-SCHOOL
Exemplo 2:
FD ARQENTRA
03 DATA-ATUAL.
05 DIA-ATUAL PIC 99.
05 MES-ATUAL PIC 99.
05 ANO-ATUAL PIC 99.
WORKING-STORAGE SECTION.
01 LIN-IMPRESSAO.
03 FILLER PIC X(20) VALUE SPACES.
03 LIN-DATA.
05 LIN-DIA PIC X(02)B.
05 LIN-DATA-EXT PIC X(40).
01 TABELA-MESEXT.
03 FILLER PIC X(20) VALUE ‘DE JANEIRO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE FEVEREIRO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE MARCO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE ABRIL DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE MAIO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE JUNHO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE JULHO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE AGOSTO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE SETEMBRO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE OUTUBRO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE NOVEMBRO DE 20*’.
03 FILLER PIC X(20) VALUE ‘DE DEZEMBRO DE 20*’.
01 FILLER REDEFINES TABELA-MESEXT.
03 MES-EXT PIC X(20) OCCURS 12 TIMES.
PROCEDURE DIVISION.
MOVE DIA-ATUAL TO LIN-DIA
STRING MES-EXT (MES-ATUAL) ANO-ATUAL
DELIMITED BY ‘*’ INTO LIN-DATA-EXT.
DIA-ATUAL 15 15
MES-ATUAL 02 02
ANO-ATUAL 05 05
13.4.19 Synchronized
Formato:
(SYNCHRONIZED) (LEFT)
ou
(SYNC) (RIGHT)
Exemplo 01:
01 REGISTRO.
05 NOME PIC X(15).
05 CODIGO PIC 9(06).
05 FILLER PIC X(01).
05 AREA-A PIC S9(04) COMP.
05 FILLER PIC X(02).
05 AREA-B PIC S9(03) COMP.
05 AREA-C PIC S9(07) COMP.
01 REGISTRO.
05 NOME PIC X(15).
05 CODIGO PIC 9(06).
05 FILLER PIC X(01).
05 AREA-A PIC S9(04) COMP SYNC.
05 FILLER PIC X(02).
05 AREA-B PIC S9(03) COMP SYNC.
05 AREA-C PIC S9(07) COMP SYNC.
PROCEDURE DIVISION.
ADD 10 TO AREA-A
AREA-B
AREA-C.
SUBTRACT 20 FROM AREA-A
AREA-C.
13.4.20 Transform
Formato:
Regras:
Exemplos:
CAMPO-X X17ABC
CAMPO-Y CBA71X
13.4.21 Unstring
Faz com que os dados de um único campo sejam separados, pelo delimitadores,
em sub-campos.
Formato:
Opção Significado
Identificador-1 Campo a ter os caracteres extraídos.
DELIMITED BY Especifica um delimitador.
Indica que uma ou mais ocorrências contíguas do delimitador serão tratadas
ALL
como uma única.
INTO Especifica o(s) campo(s) receptor(es) dos caracteres extraídos do identificador-1.
Especifica o(s) campo(s) que conterá(ao) os caracteres delimitadores. Usada
DELIMITER IN
apenas se a opção DELIMITED BY for especificada.
Especifica o(s) campo(s) que conterá(ao) as quantidades de caracteres
COUNT IN verificadas no identificador-1. Usada apenas se a opção DELIMITED BY for
especificada.
Indica a posição de início no identificador-1 a partir da qual começará a
WITH POINTER
verificação.
Especifica o campo que conterá um valor que é igual ao seu valor inicial mais a
TALLYING N
quantidade de campo ativada durante a execução.
Ocorrerá: 1) Quando o valor do identificador-5 for menor que 1 ou maior que o
comprimento do identificador-1 ou, 2) Se durante a execução do UNSTRING
OVERFLOW
todos os campos receptores tiverem sido ativados e o identificador-1 ainda
contiver caracteres não verificados.
NOT OVERFLOW Ocorrerá em situação contrária à de OVERFLOW.
Exemplo 1:
RECEPTOR-1 FUTURE/SCHOOL/CURSOS/COMPUTACAO
CAMPO-01 FUTURE
CAMPO-02 SCHOOL
CAMPO-03 CURSOS
CAMPO-04 COMPUTACAO
Exemplo 2:
CAMPO-01 FUTURE
DELM(1) 0
CONT(1) 0 6
CAMPO-02 SCHOOL
DELM(2) 0 *
CONT(2) 0 6
CAMPO-03 CURSOS
DELM(3) 0 /
CONT(3) 0 6
CAMPO-04 COMPUTACAO
DELM(4) 0
CONT(4) 0 10
CONT-POINTER 0 32
CONT-REG 0 4
13.5.1 Call
Formatos:
Observação:
13.5.2 Cancel
Faz com que o programa chamado volte ao seu estado inicial em uma próxima
chamada.
Formato:
Observação:
13.5.3 Chain
Formatos:
Observação:
Formato:
EXIT PROGRAM.
Programa Chamador:
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTURE01.
AUTHOR. FUTURE SCHOOL CURSOS DE COMPUTACAO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
.
.
DATA DIVISION.
FILE SECTION.
.
.
01 REG-ARQENTRA.
05 CODCLI-ENTRA PIC 9(05).
05 VLR-EMPRESTIMO PIC S9(13)V99 COMP-3.
05 PERIODO PIC 9(03).
05 TAXA PIC S9(03)V9(06) COMP-3.
05 TIPO-JUROS PIC X.
05 FILLER PIC X(03).
FD ARQSAIDA
.
.
WORKING-STORAGE SECTION.
01 AC-COMUNICACAO.
05 AC-EMPRESTIMO PIC S9(13)V99.
05 AC-PERIODO PIC 9(03).
05 AC-TAXA PIC S9(03)V9(06).
05 AC-TIPO-JUROS PIC X.
05 AC-VLR-JUROS PIC S9(13)V99.
PROCEDURE DIVISION.
.
.
MOVE VLR-EMPRESTIMO TO AC-EMPRESTIMO.
MOVE PERIODO TO AC-PERIODO.
MOVE TAXA TO AC-TAXA.
MOVE TIPO-JUROS TO AC-TIPO-JUROS.
CALL ‘FUTURE02” USING AC-COMUNICACAO.
.
.
STOP RUN.
Programa Chamado:
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTURE02.
AUTHOR. FUTURE SCHOOL CURSOS DE COMPUTACAO.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 AREAS-AUXILIARES.
05 WS-TAXA PIC 9(03)V9(06).
05 WS-JUROS PIC 9(12)V99.
LINKAGE SECTION.
01 LK-COMUNICACAO.
05 LK-TAMANHO PIC S9(04) COMP.
05 LK-EMPRESTIMO PIC S9(13)V99.
05 LK-PERIODO PIC 9(03).
05 LK-TAXA PIC S9(03)V9(06).
05 LK-TIPO-JUROS PIC X.
05 LK-VLR-JUROS PIC S9(13)V99.
PROCEDURE DIVISION USING LK-COMUNICACAO.
.
.
COMPUTE WS-TAXA = LK-TAXA / 100.
IF LK-TIPO-JUROS EQUAL ‘S’
COMPUTE WS-JUROS ROUNDED = (LK-EMPRESTIMO *
(LK-PERIODO-TELA * WS-TAXA))
MOVE WS-JUROS TO LK-VLR-JUROS
ELSE
IF LK-TIPO-JUROS EQUAL ‘C’
COMPUTE WS-JUROS ROUNDED = (LK-EMPRESTIMO *
((1 + WS-TAXA) ** LK-PERIODO))
COMPUTE WS-JUROS = WS-JUROS – LK-EMPRESTIMO
MOVE WS-JUROS TO LK-VLR-JUROS
ELSE
MOVE ZEROS TO LK-VLR-JUROS
END-IF
END-IF.
GOBACK.
Formato
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARQUIVO ASSIGN TO DA-I-ARQUIVO
ACCESS MODE IS RANDOM /
SEQUENTIAL /
DYNAMIC
RECORD KEY IS CHAVE-ARQUIVO
NOMINAL KEY IS WS-CHAV-ARQ.
WORKING-STORAGE SECTION.
FD ARQUIVO
LABEL RECORD STANDARD
RECODING MODE F
RECORD CONTAINS 130 CHARACTERS
BLOCK CONTAINS 10 RECORDS.
01 REG-ARQUIVO.
05 CHAVE-ARQUIVO PIC 9(06).
05 NOME-ARQ PIC X(40).
.
.
.
WORKING-STORAGE SECTION.
01 WS-CHAV-ARQ PIC 9(06) VALUE 2456.
Cláusulas Descrição
Observação: Hoje em dia a NOMINAL KEY não está sendo mais utilizada, e a
cláusula ACCESS MODE, geralmente é DYNAMIC.
15 Tabelas internas
15.1.1 Identidade
Exemplo:
01 DOMINGO
02 SEGUNDA-FEIRA
03 TERÇA-FEIRA
04 QUARTA-FEIRA
05 QUINTA-FEIRA
06 SEXTA-FEIRA
07 SÁBADO
A ocorrência equivale à posição do dia da semana, quando o código lido for igual
a 06, automaticamente é a sexta ocorrência que será relacionada, no caso,
SEXTA-FEIRA (esta tabela tem uma ocorrência de 7 vezes.)
AA RPG II
AB CLIPPER
AC FORTRAN
AD COBOL
AE PL 1
AF VISUAL BASIC
AG JAVA
Existem vários níveis de ocorrências de tabelas. Até agora nos referimos a tabelas
de apenas um nível, e estas tabelas são denominadas Unidimensionais. Existem
também as tabelas denominadas Bidimensionais (dois níveis de ocorrências) e
Tridimensionais (três níveis de ocorrências).
15.2.1 Unidimensional
Exemplo 1:
01 TABELA.
05 TAB-DIAS-SEMANA.
10 FILLER PIC X(13) VALUE ‘DOMINGO ’.
10 FILLER PIC X(13) VALUE ‘SEGUNDA-FEIRA’.
10 FILLER PIC X(13) VALUE ‘TERCA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘QUARTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘QUINTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘SEXTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘SABADO ’.
05 TAB-DIAS-SEMANA-R REDEFINES TAB-DIAS-SEMANA.
10 DIA-DA-SEMANA PIC X(13) OCCURS 7 TIMES.
Exemplo02:
01 TABELA.
05 TAB-SIGLAS-ESTADOS.
10 FILLER PIC X(21) VALUE ‘ACACRE ’.
10 FILLER PIC X(21) VALUE ‘ALALAGOAS ’.
10 FILLER PIC X(21) VALUE ‘AMAMAZONAS ’.
10 FILLER PIC X(21) VALUE ‘APAMAPA ’.
10 FILLER PIC X(21) VALUE ‘BABAHIA ’.
10 FILLER PIC X(21) VALUE ‘CECEARA ’.
10 FILLER PIC X(21) VALUE ‘DFDISTRITO FEDERAL ’.
10 FILLER PIC X(21) VALUE ‘ESESPIRITO SANTO ’.
10 FILLER PIC X(21) VALUE ‘GOGOIAS ’.
10 FILLER PIC X(21) VALUE ‘MAMARANHAO ’.
10 FILLER PIC X(21) VALUE ‘MGMINAS GERAIS ’.
10 FILLER PIC X(21) VALUE ‘MSMATO GROSSO DO SUL ’.
10 FILLER PIC X(21) VALUE ‘MTMATO GROSSO ’.
10 FILLER PIC X(21) VALUE ‘PAPARA ’.
10 FILLER PIC X(21) VALUE ‘PBPARAIBA ’.
10 FILLER PIC X(21) VALUE ‘PEPERNAMBUCO ’.
10 FILLER PIC X(21) VALUE ‘PIPIAUI ’.
10 FILLER PIC X(21) VALUE ‘PRPARANA ’.
10 FILLER PIC X(21) VALUE ‘RJRIO DE JANEIRO ’.
10 FILLER PIC X(21) VALUE ‘RNRIO GRANDE DO NORTE’.
10 FILLER PIC X(21) VALUE ‘RORONDONIA ’.
10 FILLER PIC X(21) VALUE ‘RRRORAIMA ’.
10 FILLER PIC X(21) VALUE ‘RSRIO GRANDE DO SUL ’.
10 FILLER PIC X(21) VALUE ‘SCSNATA CATARINA ’.
10 FILLER PIC X(21) VALUE ‘SESERGIPE ’.
10 FILLER PIC X(21) VALUE ‘SPSAO PAULO ’.
10 FILLER PIC X(21) VALUE ‘TOTOCANTINS ’.
05 TAB-ESTADOS REDEFINES TAB-SIGLA-ESTADOS OCCURS 27.
10 SIGLA PIC X(02).
10 ESTADO PIC X(19).
15.2.2 Bidimensional
Exemplo :
WORKING-STORAGE SECTION.
77 LIN PIC 9 VALUE 0.
77 COL PIC 9 VALUE 4.
01 TABELA.
05 LINHAS OCCURS 4.
10 COLUNAS OCCURS 3.
15 SIGLA PIC X(02).
15 ESTADO PIC X(19).
PROCEDURE DIVISION.
.
.
PERFORM PESQUISA VARYING LIN FROM 1 BY 1 UNTIL LIN GREATER 4
AFTER COL FROM 1 BY 1 UNTIL COL GREATER 3
PERFORM LER.
PESQUISA.
PERFORM CARREGAR.
PERFORM IMPRIMIR.
15.2.3 Tridimensional
Exemplo :
WORKING-STORAGE SECTION.
77 FOL PIC 9 VALUE 0.
77 LIN PIC 9 VALUE 0.
77 COL PIC 9 VALUE 0.
01 TABELA.
05 FOLHAS OCCURS 4.
10 LINHAS OCCURS 4.
15 COLUNAS OCCURS 7.
20 CPO PIC X(03).
PROCEDURE DIVISION.
.
.
PERFORM PESQUISA VARYING FOL FROM 1 BY 1 UNTIL FOL GREATER 4
AFTER LIN FROM 1 BY 1 UNTIL LIN GREATER 4
AFTER COL FROM 1 BY 1 UNTIL COL GREATER 7
PERFORM LER.
PESQUISA.
PERFORM CARREGAR.
PERFORM IMPRIMIR.
CPO
15.3.1 Occurs
Formatos:
Nível nome de dado OCCURS inteiro [TIME(S)]
[INDEXED BY nome de índice]
Exemplo 1:
WORKING-STORAGE SECTION.
01 DIA-EXTENSO PIC X(13) VALUE SPACES.
77 INDICE PIC 9 VALUE 5.
01 TABELA.
05 TAB-DIAS-SEMANA.
10 FILLER PIC X(13) VALUE ‘DOMINGO ’.
10 FILLER PIC X(13) VALUE ‘SEGUNDA-FEIRA’.
10 FILLER PIC X(13) VALUE ‘TERCA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘QUARTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘QUINTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘SEXTA-FEIRA ’.
10 FILLER PIC X(13) VALUE ‘SABADO ’.
05 TAB-DIAS-SEMANA-R REDEFINES TAB-DIAS-SEMANA.
10 DIA-DA-SEMANA PIC X(13) OCCURS 7 TIMES.
PROCEDURE DIVISION.
.
MOVE DIA-DA-SEMANA(INDICE) TO DIA-EXTENSO.
.
Explanação do exemplo acima:
Exemplo 2:
77 IND PIC 9(02) COMP SYNC VALUE 0.
01 LINHA-DISPLAY.
05 FILLER PIC X(19) VALUE.
‘TOTAL DO ESTADO DE ‘.
05 NOME-ESTADO PIC X(19).
01 TABELA.
05 TAB-SIGLAS-ESTADOS.
10 FILLER PIC X(63) VALUE
‘ACACRE ALALAGOAS AMAMAZONAS ’.
10 FILLER PIC X(63) VALUE
‘APAMAPA BABAHIA CECEARA ’.
10 FILLER PIC X(63) VALUE
‘DFDISTRITO FEDERAL ESESPIRITO SANTO GOGOIAS ’.
10 FILLER PIC X(63) VALUE
‘MAMARANHAO MGMINAS GERAIS MSMATO GROSSO DO SUL ’.
10 FILLER PIC X(63) VALUE
‘MTMATO GROSSO PAPARA PBPARAIBA ’.
10 FILLER PIC X(63) VALUE
‘PEPERNAMBUCO PIPIAUI PRPARANA ’.
10 FILLER PIC X(63) VALUE
‘RJRIO DE JANEIRO RNRIO GRANDE DO NORTERORONDONIA ’.
10 FILLER PIC X(63) VALUE
‘RRRORAIMA RSRIO GRANDE DO SUL SCSNATA CATARINA ’.
10 FILLER PIC X(63) VALUE
SESERGIPE SPSAO PAULO TOTOCANTINS ’.
05 TAB-ESTADOS REDEFINES TAB-SIGLA-ESTADOS OCCURS 27.
10 SIGLA PIC X(02).
10 ESTADO PIC X(19).
PROCEDURE DIVISION.
.
.
PERFORM ACHA-ESTADO VARYING IND FROM 1 BY 1
UNTIL IND GREATER 27.
.
.
ACHA-ESTADO.
IF SIGLA(IND) EQUAL EST-ARQUIVO
MOVE ESTADO(IND) TO NOME-ESTADO
DISPLAY LINHA-DISPLAY
MOVE 30 TO IND
ELSE
IF IND EQUAL 27
MOVE ‘ESTADO INVALIDO’ TO NOME ESTADO.
15.3.2 Search
Formato 1:
SEARCH tabela
[AT END comando1]
WHEN condição1 comando2 | NEXT SENTENCE
WHEN condição2 comando3 | NEXT SENTENCE]
END-SEARCH
Opção Significado
Formato 2:
Opção Significado
WORKING-STORAGE SECTION.
01 TABELA1.
05 TAB-NOMES.
05 FILLER PIC X(11) VALUE ‘ANA LUCIA’.
05 FILLER PIC X(11) VALUE ‘VINICIUS’.
05 FILLER PIC X(11) VALUE ‘VITOR’.
05 FILLER PIC X(11) VALUE ‘LUIS’.
05 FILLER PIC X(11) VALUE ‘NATHALIA’.
05 FILLER PIC X(11) VALUE ‘FELIPE’.
05 FILLER PIC X(11) VALUE ‘CAROLINA’.
05 FILLER PIC X(11) VALUE ‘MARISTELA’.
05 FILLER PIC X(11) VALUE ‘ZILDA’.
05 FILLER PIC X(11) VALUE ‘ANDERSON’.
05 FILLER PIC X(11) VALUE ‘MEYRE’.
05 FILLER PIC X(11) VALUE ‘ANA PAULA’.
05 FILLER PIC X(11) VALUE ‘SAMANTHA’.
05 FILLER PIC X(11) VALUE ‘RODOLFO’.
05 TAB-NOMES-R REDEFINE TAB-NOMES
OCCURS 14 INDEXED BY IND.
10 TAB-NOM PIC X(11).
*
01 AUX-NOME PIC X(11) VALUE SPACES.
01 IND PIC 9.
PROCEDURE DIVISION.
000-00-INICIO SECTION.
*
000-01-RECEBER-NOME.
*
DISPLAY ‘FAVOR DIGITAR O NOME A SER PESQUISADO, PIC X(11) ‘
UPON CONSOLE.
*
ACCEPT AUX-NOME FROM CONSOLE.
*
SET IND TO 1
*
SEARCH TAB-NOMES
AT END GO TO 999-99-FIM
WHEN TAB-NOM (IND) EQUAL AUX-NOME
PERFORM 005-00-ACHOU-NOME.
.
.
Observação:
15.3.3 Set
Formato 1:
Formato 2:
Opção Significado
Exemplos:
SET I3 TO 25.
SET I2 I1 TO I3.
SET I3 UP BY 1.
SET I4 DOWN BY 1.
16 Tratamento de Impressão
16.1 Advancing
Se um número inteiro for usado (1 a 100) serão saltadas tantas linhas quantas
forem o valor do inteiro.
Exemplos:
16.2 Positioning
CARACTERE SIGNIFICADO
Exemplos:
FD RELATO
LABEL OMITTED
RECORDING F
BLOCK 0.
01 REG-RELATO.
05 CARRO PIC X(01).
05 FILLER PIC X(132).
*
01 CAB001.
05 FILLER PIC X(01) VALUE ‘1’.
.
.
.
01 CAB002.
05 FILLER PIC X(01) VALUE ‘-’.
.
.
.
*
01 DET001.
05 FILLER PIC X(01) VALUE ‘0’.
.
.
.
PROCEDURE DIVISION.
.
.
.
WRITE REG-RELATO FROM CAB001 AFTER POSITIONING CARRO.
WRITE REG-RELATO FROM CAB002 AFTER POSITIONING CARRO.
WRITE REG-RELATO FROM DET001 AFTER POSITIONING 2 LINES.
Observações:
17 File status
Após cada operação, o sistema movimenta um valor para a STATUS KEY (campo
alfanumérico, com 2 (dois) caracteres definido na ENVIRONMENT DIVISION
através da cláusula SELECT e posteriormente montado na DATA DIVISION) que
acusa se a execução foi efetuada com sucesso ou não.
Qualquer valor movido para a STATUS KEY diferente de zero, revela que a
execução não foi efetuada com sucesso, porém, no caso da STATUS KEY receber
o código 10 na primeira leitura (READ), isso quer dizer que o arquivo está vazio,
neste caso, pode acontecer do programa poder continuar sem problemas.
Exemplo
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTURE01.
AUTHOR. FUTURE SCHOOL CURSOS DE COMPUTACAO.
*
* USANDO FILE STATUS
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CADPECA ASSIGN TO UT-S-CADPECA
FILE STATUS IS FS-CADPECA.
*
SELECT CADATU ASSIGN TO UT-S-CADATU
FILE STATUS IS FS-CADATU.
*
DATA DIVISION.
FILE SECTION.
*
FD CADPECA
RECORD CONTAINS 70 CHARACTERS
LABEL RECORD IS STANDARD
DATA RECORD IS REG-CADPECA.
01 REG-CADPECA.
05 COD-PECA PIC 9(05).
05 NOME-PECA PIC X(30).
05 QTD-PECA PIC S9(05) COMP-3.
05 LOCAL-PECA.
10 PRAT-PECA PIC X(02).
10 ALTU-PECA PIC X.
10 GAVE-PECA PIC X(03).
05 PUNIT-PECA PIC S9(07)V99 COMP-3.
05 CONTA-PECA PIC X(10).
05 FILLER PIC X(11).
*
FD CADATU
RECORD CONTAINS 75 CHARACTERS
LABEL RECORD IS STANDARD
DATA RECORD IS REG-CADATU.
05 COD-ATUAL PIC 9(05).
05 NOME-ATUAL PIC X(30).
05 QTD-ATUAL PIC S9(05) COMP-3.
05 LOCAL-ATUAL.
10 PRAT-ATUAL PIC X(02).
10 ALTU-ATUAL PIC X.
10 GAVE-ATUAL PIC X(03).
05 PUNIT-ATUAL PIC S9(07)V99 COMP-3.
05 PTOTAL-ATUAL PIC S9(09)V99 COMP-3
05 CONTA-ATUAL PIC X(10).
*
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 129 de 143
C O B O L
WORKING-STORAGE SECTION.
*
* FILE STATUS
*
77 FS-CADPECA PIC X(02) VALUE SPACES.
77 FS-CADATU PIC X(02) VALUE SPACES.
77 FS-COD-STATUS PIC X(02) VALUE SPACES.
77 FS-ARQUIVO PIC X(08) VALUE SPACES.
77 FS-OPERACAO PIC X(13) VALUE SPACES.
77 FS-ABERTURA PIC X(13) VALUE 'NA ABERTURA'.
77 FS-LEITURA PIC X(13) VALUE 'NA LEITURA'.
77 FS-GRAVACAO PIC X(13) VALUE 'NA GRAVACAO'.
77 FS-FECHAMENTO PIC X(13) VALUE 'NO FECHAMENTO'.
*
PROCEDURE DIVISION.
*================================================================*
000-00-INICIO SECTION.
*================================================================*
PERFORM 001-00-ABRIR-ARQUIVOS.
PERFORM 002-00-VER-ARQ-VAZIO.
PERFORM 003-00-TRATAR-CADPECA
UNTIL FS-CADPECA EQUAL '10'.
PERFORM 004-00-FECHAR-ARQUIVOS.
STOP RUN.
*================================================================*
001-00-ABRIR-ARQUIVOS SECTION.
*================================================================*
MOVE FS-ABERTURA TO FS-OPERACAO.
OPEN INPUT CADPECA
OUTPUT CADATU.
PERFORM 001-01-TESTAR-FS.
001-00-FIM. EXIT.
*================================================================*
001-01-TESTAR-FS SECTION.
*================================================================*
PERFORM 001-02-FS-CADPECA.
PERFORM 001-03-FS-CADATU.
001-01-FIM. EXIT.
*================================================================*
001-02-FS-CADPECA SECTION.
*================================================================*
MOVE 'CADPECA' TO FS-ARQUIVO.
MOVE FS-CADPECA TO FS-COD-STATUS.
IF FS-CADPECA NOT EQUAL '00' AND '10'
PERFORM 900-00-ERRO.
001-02-FIM. EXIT.
*================================================================*
001-03-FS-CADATU SECTION.
*================================================================*
MOVE 'CADATU' TO FS-ARQUIVO.
MOVE FS-CADATU TO FS-COD-STATUS.
IF FS-CADATU NOT EQUAL '00' AND '10'
PERFORM 900-00-ERRO.
001-03-FIM. EXIT.
*================================================================*
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 130 de 143
C O B O L
002-00-VER-ARQ-VAZIO SECTION.
*================================================================*
PERFORM 002-01-LER-CADPECA.
IF FS-CADPECA EQUAL '10'
DISPLAY '******************************************'
DISPLAY '* *'
DISPLAY '* ARQUIVO CADPECA VAZIO *'
DISPLAY '* *'
DISPLAY '* PROGRAMA CANCELADO *'
DISPLAY '* *'
DISPLAY '******************************************'
PERFORM 004-00-FECHAR-ARQUIVOS
STOP RUN.
002-00-FIM. EXIT.
*================================================================*
002-01-LER-CADPECA SECTION.
*================================================================*
MOVE FS-LEITURA TO FS-OPERACAO.
READ CADPECA.
IF FS-CADPECA NOT EQUAL '10'
PERFORM 001-02-FS-CADPECA.
002-01-FIM. EXIT.
*================================================================*
003-00-TRATAR-CADPECA SECTION.
*================================================================*
MOVE FS-GRAVACAO TO FS-OPERACAO.
MOVE COD-PECA TO COD-ATUAL.
MOVE NOME-PECA TO NOME-ATUAL.
MOVE QTD-PECA TO QTD-ATUAL.
MOVE LOCAL-PECA TO LOCAL-ATUAL.
MOVE PUNIT-PECA TO PUNIT-ATUAL.
COMPUTE PTOTAL-ATUAL = QTD-PECA * PUNIT-PECA.
MOVE CONTA-PECA TO CONTA-ATUAL.
WRITE REG-CADATU FROM REG-CADPECA.
PERFORM 001-03-FS-CADATU.
PERFORM 002-01-LER-CADPECA.
003-00-FIM. EXIT.
*================================================================*
004-00-FECHAR-ARQUIVOS SECTION.
*================================================================*
MOVE FS-FECHAMENTO TO FS-OPERACAO.
CLOSE CADPECA
CADATU.
PERFORM 001-01-TESTAR-FS.
004-00-FIM. EXIT.
*================================================================*
900-00-ERRO SECTION.
*================================================================*
DISPLAY '******************************************'
DISPLAY '* *'
DISPLAY '* ERRO ' FS-OPERACAO ' DO ARQUIVO ' FS-ARQUIVO ' *'
DISPLAY '* *'
DISPLAY '* FILE STATUS = ' FS-COD-STATUS
' *'
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 131 de 143
C O B O L
Formato :
Opção Significado
Formato :
SD <arquivo-sort>
[RECORD CONTAINS <literal> CHARACTERS
DATA RECORD IS | RECORDS ARE <data-name1> | <data-name2>] …]
<descrição-registro>]
Opção Significado
18.3 Sort
Formato 1:
• Classifica arquivos.
SORT <arquivo-sort> ON ASCENDING KEY |
DESCENDING KEY <data-name1> ...
[ON ASCENDING | DESCENDING KEY <data-name2>]
[WITH DUPLICATES IN ORDER]
{INPUT PROCEDURE IS <procedure1>
[THRU | THROUGH <procedure2>]} {USING <arquivo2> …}
{OUTPUT PROCEDURE IS <procedure3>
[THRU | THROUGH <procedure4>]} {GIVING <arquivo3>}
Opção Significado
OUTPUT
Define uma rotina para um processamento após a classificação.
PROCEDURE
Formato 2:
• Classifica tabelas.
SORT <tabela> [ON ASCENDING KEY |
DESCENDING KEY <data-name>] ... ]
[WITH DUPLICATES IN ORDER]
Opção Significado
18.4 Merge
Formato :
Opção Significado
18.5 Release
Formato :
Opção Significado
18.6 Return
Formato :
Opção Significado
IDENTIFICATION DIVISION.
PROGRAM-ID. FUTURE02.
AUTHOR. FUTURE SCHOOL CURSOS DE COMPUTACAO.
*
* EMITIR RELATORIO DO CADASTRO DE ALUNOS
* CLASSIFICADO POR NOME DE ALUNO
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CADALUNO ASSIGN TO UT-S-CADALUNO
FILE STATUS IS FS-CADALUNO.
*
SELECT SORALUNO ASSIGN TO UT-S-SORALUNO.
*
SELECT RELATO ASSIGN TO PRINTER
FILE STATUS IS FS-RELATO.
*
DATA DIVISION.
FILE SECTION.
*
FD CADALUNO
RECORD CONTAINS 60 CHARACTERS
LABEL RECORD IS STANDARD
DATA RECORD IS REG-CADALUNO.
01 REG-CADALUNO.
05 CODALU PIC 9(04).
05 NOMEALU PIC X(30).
05 TURMAALU PIC 9(03).
05 NOTA1ALU PIC 9(02)V99.
05 NOTA2ALU PIC 9(02)V99.
05 NOTA3ALU PIC 9(02)V99.
05 NOTA4ALU PIC 9(02)V99.
05 FILLER PIC X(07).
*
FD RELATO
LABEL RECORD IS OMITTED
RECORD CONTAINS 77 CHARACTERS
DATA RECORD IS REG-RELATO.
01 REG-RELATO PIC X(77).
*
SD SORALUNO
DATA RECORD IS REG-SORALUNO.
01 REG-SORALUNO.
05 CODSOR PIC 9(04).
05 NOMESOR PIC X(30).
05 TURMASOR PIC 9(03).
05 NOTA1SOR PIC 9(02)V99.
05 NOTA2SOR PIC 9(02)V99.
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 138 de 143
C O B O L
'NOME DO ALUNO'.
05 FILLER PIC X(09) VALUE 'TURMA'.
05 FILLER PIC X(08) VALUE 'NOTA'.
05 FILLER PIC X(08) VALUE 'NOTA'.
05 FILLER PIC X(08) VALUE 'NOTA'.
05 FILLER PIC X(04) VALUE 'NOTA'.
*
01 CAB004.
05 FILLER PIC X(48) VALUE SPACES.
05 FILLER PIC X(08) VALUE '1.BIM'.
05 FILLER PIC X(08) VALUE '2.BIM'.
05 FILLER PIC X(08) VALUE '3.BIM'.
05 FILLER PIC X(05) VALUE '4.BIM'.
*
01 DET001.
05 FILLER PIC X(01) VALUE ' '.
05 DET001-CODIGO PIC 9(04).
05 FILLER PIC X(03) VALUE SPACES.
05 DET001-NOME PIC X(30).
05 FILLER PIC X(03) VALUE SPACES.
05 DET001-TURMA PIC 9(03).
05 FILLER PIC X(04) VALUE SPACES.
05 DET001-1BIM PIC Z9,99.
05 FILLER PIC X(03) VALUE SPACES.
05 DET001-2BIM PIC Z9,99.
05 FILLER PIC X(03) VALUE SPACES.
05 DET001-3BIM PIC Z9,99.
05 FILLER PIC X(03) VALUE SPACES.
05 DET001-4BIM PIC Z9,99.
*
PROCEDURE DIVISION.
*================================================================*
000-00-INICIO SECTION.
*================================================================*
SORT SORALUNO ASCENDING KEY NOMESOR
INPUT PROCEDURE 001-00-CLASSIFICAR-ARQUIVO
OUTPUT PROCEDURE 002-00-LISTAR-ARQUIVO.
PERFORM 003-00-FECHAR-ARQUIVOS.
STOP RUN.
001-00-FIM. EXIT.
*================================================================*
001-00-CLASSIFICAR-ARQUIVO SECTION.
*================================================================*
PERFORM 001-01-ABRIR-ARQUIVOS.
PERFORM 001-06-VER-CADALUNO-VAZIO.
PERFORM 001-07-CLASSIFICACAO UNTIL
FS-CADALUNO EQUAL '10'.
001-00-FIM. EXIT.
*================================================================*
001-01-ABRIR-ARQUIVOS SECTION.
*================================================================*
MOVE FS-ABERTURA TO FS-OPERACAO.
OPEN INPUT CADALUNO
OUTPUT RELATO.
PERFORM 001-02-TESTAR-FS.
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 140 de 143
C O B O L
001-01-FIM. EXIT.
*================================================================*
001-02-TESTAR-FS SECTION.
*================================================================*
PERFORM 001-03-TESTAR-FS-CADALUNO.
PERFORM 001-04-TESTAR-FS-RELATO.
001-02-FIM. EXIT.
*================================================================*
001-03-TESTAR-FS-CADALUNO SECTION.
*================================================================*
MOVE 'CADALUNO' TO FS-ARQUIVO.
MOVE FS-CADALUNO TO FS-COD-STATUS.
IF FS-CADALUNO NOT EQUAL '00' AND '10'
PERFORM 900-00-ERRO.
001-03-FIM. EXIT.
*================================================================*
001-04-TESTAR-FS-RELATO SECTION.
*================================================================*
MOVE 'RELATO' TO FS-ARQUIVO.
MOVE FS-RELATO TO FS-COD-STATUS.
IF FS-RELATO NOT EQUAL '00' AND '10'
PERFORM 900-00-ERRO.
001-04-FIM. EXIT.
*=================================================================
001-06-VER-CADALUNO-VAZIO SECTION.
*=================================================================
PERFORM 001-08-LER-CADALUNO.
IF FS-CADALUNO EQUAL '10'
DISPLAY '*******************************'
DISPLAY '* ARQUIVO CADALUNO VAZIO *'
DISPLAY '* PROGRAMA CANCELADO *'
DISPLAY '*******************************'
PERFORM 003-00-FECHAR-ARQUIVOS
STOP RUN.
001-06-FIM. EXIT.
*=================================================================
001-07-CLASSIFICACAO SECTION.
*=================================================================
MOVE REG-CADALUNO TO REG-SORALUNO.
RELEASE REG-SORALUNO.
PERFORM 001-08-LER-CADALUNO.
001-07-FIM. EXIT.
*=================================================================
001-08-LER-CADALUNO SECTION.
*=================================================================
MOVE FS-ABERTURA TO FS-OPERACAO
READ CADALUNO.
IF FS-CADALUNO NOT EQUAL '10'
PERFORM 001-03-TESTAR-FS-CADALUNO.
001-08-FIM. EXIT.
*================================================================*
002-00-LISTAR-ARQUIVO SECTION.
*================================================================*
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 141 de 143
C O B O L
PERFORM 002-01-OBTER-DATA-HORA.
PERFORM 002-02-LER-SORALUNO.
PERFORM 002-03-IMPRIMIR-SORALUNO UNTIL
WS-FIM-ARQ EQUAL 'FIM'.
002-00-FIM. EXIT.
*=================================================================
002-01-OBTER-DATA-HORA SECTION.
*=================================================================
ACCEPT WS-DATA-SYS FROM DATE.
MOVE WS-DIA-SYS TO CAB002-DIA.
MOVE WS-MES-SYS TO CAB002-MES.
MOVE WS-ANO-SYS TO CAB002-ANO.
ACCEPT WS-HORARIO-SYS FROM TIME.
MOVE WS-HORA-SYS TO CAB002-HORA.
MOVE WS-MINU-SYS TO CAB002-MINU.
002-01-FIM. EXIT.
*=================================================================
002-02-LER-SORALUNO SECTION.
*=================================================================
MOVE FS-LEITURA TO FS-OPERACAO.
RETURN SORALUNO
AT END
MOVE 'FIM' TO WS-FIM-ARQ.
002-02-FIM. EXIT.
*=================================================================
002-03-IMPRIMIR-SORALUNO SECTION.
*=================================================================
MOVE FS-GRAVACAO TO FS-OPERACAO.
IF ACUM-LINHAS GREATER 59
PERFORM 002-04-CABECALHOS.
MOVE CODSOR TO DET001-CODIGO.
MOVE NOMESOR TO DET001-NOME.
MOVE TURMASOR TO DET001-TURMA.
MOVE NOTA1SOR TO DET001-1BIM.
MOVE NOTA2SOR TO DET001-2BIM.
MOVE NOTA3SOR TO DET001-3BIM.
MOVE NOTA4SOR TO DET001-4BIM.
WRITE REG-RELATO FROM DET001 AFTER 1.
PERFORM 001-04-TESTAR-FS-RELATO.
ADD 1 TO ACUM-LINHAS.
PERFORM 002-02-LER-SORALUNO.
002-03-FIM. EXIT.
*=================================================================
002-04-CABECALHOS SECTION.
*=================================================================
ADD 1 TO ACUM-PAG.
MOVE ACUM-PAG TO CAB001-PAG.
WRITE REG-RELATO FROM CAB001 AFTER PAGE.
PERFORM 001-04-TESTAR-FS-RELATO.
WRITE REG-RELATO FROM CAB002 AFTER 1.
PERFORM 001-04-TESTAR-FS-RELATO.
WRITE REG-RELATO FROM CAB003 AFTER 2.
PERFORM 001-04-TESTAR-FS-RELATO.
WRITE REG-RELATO FROM CAB004 AFTER 1.
PERFORM 001-04-TESTAR-FS-RELATO.
FUTURE SCHOOL – Cursos de Computação
Rua Dona Primitiva Vianco, 244 - 2º Piso - Centro - Osasco - SP
Fone: (0XX11) 3681-4319 ou 3682-8355
www.fschool.com.br - futureschool@bn.com.br
Página 142 de 143
C O B O L