| Bellacosa Mainframe e a leitura de dados de um dataset cobol |
Leitura de Dataset no COBOL
Uma das funções mais importantes do COBOL no mainframe é:
processamento de arquivos.
Grande parte dos sistemas batch trabalha lendo:
datasets sequenciais;
VSAM;
arquivos financeiros;
relatórios;
cargas;
integrações.
Por isso, entender:
ENVIRONMENT DIVISION;
DATA DIVISION;
FILE SECTION;
FILE STATUS;
layouts;
associação com JCL;
é fundamental no ambiente:
IBM Z / zOS.
Fluxo geral da leitura de arquivos
JCL
↓
DDNAME
↓
ENVIRONMENT DIVISION
↓
SELECT / ASSIGN
↓
FILE SECTION
↓
FD
↓
READ
↓
PROCESSAMENTO
Onde o arquivo é definido no COBOL?
Principalmente em:
ENVIRONMENT DIVISION;
DATA DIVISION.
ENVIRONMENT DIVISION
Responsável por:
ambiente e associação dos arquivos.
Estrutura clássica
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
O que é FILE-CONTROL?
Área onde o COBOL:
associa arquivos lógicos ao JCL.
Exemplo
SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL.
Explicando
| Elemento | Função |
|---|---|
| ARQCLIENTE | Nome lógico COBOL |
| CLIENTE | DDNAME do JCL |
| SEQUENTIAL | Organização arquivo |
O que é ASSIGN?
Faz ligação entre:
COBOL;
JCL.
Relação COBOL ↔ JCL
COBOL: ASSIGN TO CLIENTE
↓
JCL: //CLIENTE DD DSN=...
Exemplo completo no JCL
//STEP1 EXEC PGM=COBPGM
//CLIENTE DD DSN=EMPRESA.CLIENTES,
// DISP=SHR
Como COBOL encontra o dataset?
Pelo:
DDNAME.
DATA DIVISION
Responsável pelos:
dados e layouts.
Estrutura típica
DATA DIVISION.
FILE SECTION.
O que é FILE SECTION?
Define:
layout do arquivo.
Exemplo
FD ARQCLIENTE.
01 REG-CLIENTE.
05 CLI-ID PIC 9(5).
05 CLI-NOME PIC X(30).
05 CLI-SALDO PIC 9(7)V99.
O que é FD?
File Description
Define:
características;
layout;
estrutura registro.
O que é REG-CLIENTE?
Área memória usada no:
READ.
Fluxo do READ
READ ARQCLIENTE
↓
registro carregado
↓
REG-CLIENTE preenchido
Exemplo simples de leitura
READ ARQCLIENTE
Leitura completa correta
READ ARQCLIENTE
AT END
MOVE 'S' TO EOF
END-READ
O que é EOF?
End Of File
Fim arquivo.
Controle clássico batch
PERFORM UNTIL EOF = 'S'
READ ARQCLIENTE
AT END
MOVE 'S' TO EOF
NOT AT END
PERFORM PROCESSA
END-READ
END-PERFORM
O que é FILE STATUS?
Código retorno da operação arquivo.
Muito importante no COBOL.
Definição FILE STATUS
Fica na:
WORKING-STORAGE.
Exemplo
01 WS-FS-CLIENTE PIC XX.
Associando FILE STATUS
SELECT ARQCLIENTE
ASSIGN TO CLIENTE
FILE STATUS IS WS-FS-CLIENTE.
O que ele faz?
Após:
OPEN;
READ;
WRITE;
CLOSE;
o COBOL grava:
status da operação.
Exemplo status comuns
| Status | Significado |
|---|---|
| 00 | OK |
| 10 | EOF |
| 35 | Arquivo inexistente |
| 39 | Layout incompatível |
| 92 | Erro lógico |
| 93 | Arquivo não aberto |
Exemplo validação
IF WS-FS-CLIENTE NOT = '00'
DISPLAY 'ERRO ARQUIVO'
END-IF
O que é OPEN?
Abre arquivo.
Exemplos
OPEN INPUT ARQCLIENTE
Leitura.
OPEN OUTPUT ARQREL
Saída.
OPEN I-O ARQVSAM
Leitura e gravação.
O que é CLOSE?
Fecha arquivo.
Exemplo
CLOSE ARQCLIENTE
Tipos comuns de arquivos COBOL
Sequential
Sequencial.
Indexed
VSAM KSDS.
Relative
Acesso relativo.
Line Sequential
Texto.
Organização do arquivo
ORGANIZATION IS SEQUENTIAL
Acesso
ACCESS MODE IS SEQUENTIAL
Exemplo completo
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARQCLIENTE
ASSIGN TO CLIENTE
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-FS.
DATA DIVISION.
FILE SECTION.
FD ARQCLIENTE.
01 REG-CLIENTE.
05 CLI-ID PIC 9(5).
05 CLI-NOME PIC X(30).
WORKING-STORAGE SECTION.
01 WS-FS PIC XX.
01 EOF PIC X VALUE 'N'.
PROCEDURE DIVISION.
MAIN.
OPEN INPUT ARQCLIENTE
PERFORM UNTIL EOF = 'S'
READ ARQCLIENTE
AT END
MOVE 'S' TO EOF
NOT AT END
DISPLAY CLI-NOME
END-READ
END-PERFORM
CLOSE ARQCLIENTE
STOP RUN.
O que é layout?
Estrutura do registro.
Exemplo
12345JOAO SILVA 0001500
Layout correspondente
05 ID PIC 9(5).
05 NOME PIC X(30).
05 SALDO PIC 9(7).
O que acontece se layout estiver errado?
Pode causar:
lixo dados;
truncamento;
ABEND;
S0C7.
COBOL e JCL trabalham juntos
JCL
Entrega dataset.
COBOL
Processa dataset.
Fluxo real
Dataset
↓
JCL DD
↓
ASSIGN
↓
READ
↓
REGISTRO MEMÓRIA
↓
PROCESSAMENTO
O que é DISP=SHR?
Compartilhado.
O que é DISP=OLD?
Uso exclusivo.
Como isso aparece no batch?
Praticamente em:
bancos;
folha salarial;
PIX;
cartões;
faturamento.
Curiosidades incríveis
1. Muitos batchs processam bilhões de registros COBOL diariamente
2. FILE STATUS evita muitos ABENDs
3. Grande parte do mundo financeiro ainda depende fortemente de arquivos sequenciais
4. JCL + COBOL é uma das integrações mais clássicas do mainframe
Erros comuns de iniciantes
1. Esquecer OPEN
2. Não tratar FILE STATUS
3. Layout incompatível
4. DDNAME diferente do ASSIGN
5. Não controlar EOF
Dicas importantes
Sempre trate FILE STATUS
Controle EOF corretamente
Valide layouts
Nomeie DDNAME claramente
Resumo rápido
| Elemento | Função |
|---|---|
| SELECT | Define arquivo lógico |
| ASSIGN | Liga ao JCL |
| FD | Define layout |
| READ | Lê registro |
| FILE STATUS | Retorno operação |
| OPEN | Abre arquivo |
| CLOSE | Fecha arquivo |
| EOF | Fim arquivo |
Conclusão
A leitura de arquivos é uma das bases do COBOL batch no ambiente mainframe IBM Z.
ENVIRONMENT DIVISION, DATA DIVISION, FILE SECTION, FILE STATUS e integração com JCL permitem processar grandes volumes de dados com segurança, organização e alta confiabilidade no z/OS.