Translate

Mostrar mensagens com a etiqueta Legacy Systems. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Legacy Systems. Mostrar todas as mensagens

quinta-feira, 26 de março de 2026

🧪 LABORATÓRIO — DO JCL AO JSON

 

Bellacosa Mainframe do jcl ao json laboratorio pratico

🧪 LABORATÓRIO — DO JCL AO JSON

🐍 Missão: Dominar dados reais com Python

👉 Formato: desafios práticos
👉 Nível: iniciante → intermediário
👉 Ideal para 1–2 dias de hands-on
👉 Pode virar curso ou workshop


🔹 BLOCO 1 — Arquivos (I/O)

🧩 Desafio 1 — Leitor de arquivo sequencial

Crie um programa que:

  • Leia clientes.txt
  • Mostre número total de linhas
  • Mostre a primeira e última linha

💡 Analog: processamento sequencial COBOL


🧩 Desafio 2 — Contador de registros válidos

Arquivo contém linhas vazias e comentários iniciados por #.

Conte apenas registros válidos.


🧩 Desafio 3 — Gerador de arquivo batch

Crie um arquivo relatorio.txt contendo:

  • Data/hora atual
  • Total de registros processados
  • Status “OK”

🧩 Desafio 4 — Conversor TXT → CSV

Entrada:

123;Ana;1200
456;João;950

Produza um CSV com cabeçalho.


🧩 Desafio 5 — Copiador com filtro

Copie transacoes.txt para aprovadas.txt
apenas registros com valor > 1000.


🔹 BLOCO 2 — Pandas (Dados tabulares)

🧩 Desafio 6 — Carregar dataset

Use Pandas para:

  • Ler um CSV
  • Mostrar as 5 primeiras linhas
  • Mostrar número de registros

🧩 Desafio 7 — Filtro de negócios

Mostre apenas clientes com saldo > 1000.

Ordene por saldo decrescente.


🧩 Desafio 8 — Estatísticas rápidas

Calcule:

  • Média do saldo
  • Máximo
  • Mínimo
  • Total

🧩 Desafio 9 — Agrupamento

Agrupe clientes por cidade e conte quantos há em cada uma.

💡 Similar a GROUP BY


🧩 Desafio 10 — Pipeline batch moderno

Leia um CSV → filtre → salve novo CSV com resultados.


🔹 BLOCO 3 — NumPy (Processamento numérico)

🧩 Desafio 11 — Operações vetoriais

Crie dois arrays e calcule:

  • Soma elemento a elemento
  • Produto elemento a elemento
  • Produto escalar

🧩 Desafio 12 — Matriz de desempenho

Simule vendas por região:

  • Matriz 3×4
  • Calcule totais por linha e coluna

🔹 BLOCO 4 — APIs (Integração moderna)

🧩 Desafio 13 — Consumidor de API

Use uma API pública (ex.: cotação de moedas).

Exiba:

  • Valor atual
  • Data/hora
  • Fonte

💡 Biblioteca: requests


🧩 Desafio 14 — API → DataFrame

Obtenha dados JSON de uma API e:

  • Converta para Pandas
  • Mostre estatísticas
  • Salve em CSV

🔹 BLOCO 5 — Web Scraping

🧩 Desafio 15 — Minerador de dados web

Extraia dados de uma página pública:

  • Títulos de notícias OU
  • Tabela da Wikipedia

Salve em arquivo estruturado.

💡 Bibliotecas:

requests
BeautifulSoup
pandas.read_html()

🏆 DESAFIO EXTRA (Modo Arquitetura)

🔥 Mega-missão — Pipeline completo

Construa um fluxo:

👉 Coletar dados de API
👉 Complementar com dados de arquivo local
👉 Processar com Pandas
👉 Salvar resultado final

💥 Isso simula um ETL moderno.


🎯 O que você dominará ao concluir

✔ Manipulação de arquivos
✔ Processamento tabular
✔ Computação numérica
✔ Integração com sistemas externos
✔ Coleta de dados da web
✔ Data pipelines
✔ Base para Data Science


🚀 Tradução para linguagem mainframe

Arquivos → Dataset sequencial

Pandas → DB2 em memória

NumPy → cálculo científico

APIs → integração online

Scraping → coleta automática


sexta-feira, 27 de fevereiro de 2026

☕ Se Você Ainda Usa Subscript… o Batch Já Está Rindo de Você

 

Bellacosa Mainframe apresenta guia de tabelas no COBOL

☕ “Se Você Ainda Usa Subscript… o Batch Já Está Rindo de Você”

O Guia Jedi de Tabelas COBOL que Todo Padawan Precisa Antes que o CPU Account Chegue 💸

“No Mainframe, memória é preciosa… mas CPU é dinheiro vivo.”

Padawan, aproxime-se do terminal. Hoje vamos falar de um dos poderes mais silenciosos — e mais subestimados — do universo COBOL:

🛰️ TABELAS. ÍNDICES. BUSCAS. MEMÓRIA PURA.

Se você domina isso… domina o coração do batch.
Se não domina… o batch domina você.


🧠 Parte 1 — A Verdade Oculta: OCCURS Não É Só Um Array

Muitos iniciantes pensam:

“Ah, OCCURS é só um array.”

Não, jovem padawan.
É um buffer estruturado diretamente na memória do programa.

01 EMP-TABLE.
05 EMP-ENTRY OCCURS 100 TIMES.
10 EMP-ID PIC 9(6).
10 EMP-NAME PIC X(30).

Isso cria 100 registros contíguos.
Sem ponteiros. Sem heap. Sem frescura.

💡 Curiosidade:
COBOL foi projetado quando memória era absurdamente cara — por isso layouts são fixos e previsíveis.


⚔️ Parte 2 — Subscript vs Index: A Batalha dos Dois Caminhos

🔢 Subscript (o caminho do aprendiz)

MOVE EMP-NAME (WS-I) TO PRINT-NAME

✔ Simples
✔ Numérico
❌ Mais lento
❌ Recalcula endereço toda vez


⚡ Index (o caminho do Jedi)

05 EMP-ENTRY OCCURS 100 TIMES
INDEXED BY EMP-IDX.

Uso:

SET EMP-IDX TO 1
MOVE EMP-NAME (EMP-IDX) TO PRINT-NAME

✔ Ponteiro interno
✔ Muito mais eficiente
✔ Necessário para SEARCH
✔ Não é numérico

🧙‍♂️ Easter Egg técnico:
Internamente, o índice é um deslocamento binário — não um número “1, 2, 3”.


🪄 Parte 3 — O Erro que Entrega o Padawan

Se você já escreveu isso:

ADD 1 TO EMP-IDX

🚨 O compilador não apenas desaprova…
ele julga sua linhagem inteira.

Índice só aceita:

SET EMP-IDX UP BY 1
SET EMP-IDX DOWN BY 1
SET EMP-IDX TO 1

💡 Índice NÃO é variável numérica.


🔍 Parte 4 — SEARCH: A Varredura do Deserto

Busca sequencial:

SEARCH EMP-ENTRY
AT END DISPLAY "NOT FOUND"
WHEN EMP-ID (EMP-IDX) = TARGET-ID
DISPLAY "FOUND"
END-SEARCH

Características:

✔ Examina um a um
✔ Não precisa ordenar
✔ Começa na posição atual do índice

💎 Dica avançada:

SET EMP-IDX TO 5

Vai procurar do elemento 5 até o fim.

👉 Muito usado para retomar processamento após checkpoint.


🚀 Parte 5 — SEARCH ALL: O Salto no Hiperespaço

Busca binária:

SEARCH ALL EMP-ENTRY
WHEN EMP-ID (EMP-IDX) = TARGET-ID
DISPLAY "FOUND"
END-SEARCH

Mas cuidado…

⚠️ Regra de Ferro:

👉 A tabela DEVE estar ordenada pela chave da busca

Sem isso:

💀 Pode não encontrar valores existentes
💀 Não gera erro
💀 Bugs fantasma nas madrugadas de fechamento


📊 Comparação brutal

MétodoComparações (1 milhão itens)
Serialaté 1.000.000
Binária~20

💸 Sim, isso vira dinheiro na fatura de CPU.


🔄 Parte 6 — SORT em Memória: O Poder Esquecido

Poucos padawans sabem:

COBOL pode ordenar uma tabela OCCURS inteira.

SORT EMP-ENTRY ASCENDING KEY EMP-ID

Se não especificar chave…

👉 Usa a KEY definida na tabela.

ASCENDING KEY EMP-ID

🧬 Parte 7 — REDEFINES: O Lado Negro da Memória

Aqui começa a magia obscura.

01 RAW-DATA PIC X(24).

01 EMP-TABLE REDEFINES RAW-DATA.
05 EMP OCCURS 4 TIMES.
10 EMP-ID PIC 9(2).
10 EMP-NAME PIC X(4).

Nenhum byte é movido.

👉 Apenas reinterpretado.


🎯 Exemplo clássico

"10JOAO15MARIA20CARL"

Pode virar:

IDNome
10JOAO
15MARIA
20CARL

💡 Isso é parsing sem custo de CPU.


🧹 Parte 8 — INITIALIZE: O Reset Jedi

INITIALIZE EMP-TABLE

Resultado:

✔ Alfanuméricos → espaços
✔ Numéricos → zeros


✈️ Variante poderosa

INITIALIZE EMP-TABLE
REPLACING ALPHANUMERIC DATA BY "ABC"

Todos os campos recebem "ABC".


📚 Parte 9 — VALUE: Carregando a Tabela na Compilação

01 CITY-TABLE VALUE "LHRPEKMELJFK".
02 CITY PIC X(3) OCCURS 4 TIMES.

Distribuição:

1 → LHR
2 → PEK
3 → MEL
4 → JFK

💡 Zero custo em runtime.


🏦 Parte 10 — O Que Bancos REALMENTE Fazem

Tabelas OCCURS são usadas para:

✔ Parâmetros carregados em memória
✔ Tabelas de códigos
✔ Conversões
✔ Regras de negócio
✔ Buffers massivos
✔ Lookups ultra rápidos

Em muitos sistemas críticos, elas substituem chamadas a banco.


🧠 Curiosidade Histórica

COBOL foi criado quando:

🧊 CPU era lenta
💾 Memória era caríssima
📼 Disco era ainda mais lento

Por isso:

👉 Processar em memória sempre foi o caminho do mestre.


🏆 Conclusão — O Segredo que Separa Padawans de Mestres

Se você entendeu este artigo…

Você aprendeu a:

✔ Controlar memória manualmente
✔ Otimizar CPU
✔ Implementar buscas eficientes
✔ Manipular dados sem cópia
✔ Pensar como um engenheiro mainframe


☕ Regra Suprema do Batch

“Quem domina tabelas… domina o tempo de execução.”