Translate

Mostrar mensagens com a etiqueta aprendizado. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta aprendizado. Mostrar todas as mensagens

quarta-feira, 4 de fevereiro de 2026

🔥 COBOL NÃO MORREU… MAS SE VOCÊ NÃO APRENDER PYTHON, SUA CARREIRA PODE!

 

Bellacosa Mainframe introduz o Python ao Jedi Cobol

🔥 COBOL NÃO MORREU… MAS SE VOCÊ NÃO APRENDER PYTHON, SUA CARREIRA PODE!

☕ Um Café no Bellacosa Mainframe

Se você é coboleiro raiz, daqueles que já brigou com JCL às 3 da manhã e já domou um CICS em produção… deixa eu te contar uma verdade que ninguém fala alto:

👉 Python não veio substituir você. Ele veio ampliar o seu poder.

Mas tem um detalhe…
Quem não entender isso rápido vai virar peça de museu — junto com aquele manual de VSAM encadernado.


🧠 O Choque Cultural: COBOL vs Python

O primeiro impacto é inevitável:

COBOLPython
VerbosoMinimalista
EstruturadoDinâmico
Tipado rígidoTipagem dinâmica
BatchTempo real / APIs

👉 O coboleiro pensa: “Cadê o WORKING-STORAGE?”
👉 O Python responde: “Relaxa, confia…”

E é aqui que começa a transformação.


🚀 O que um Coboleiro PRECISA dominar em Python

1. 🧩 Pensar em dados como objetos (não só registros)

No COBOL:

01 CLIENTE.
   05 NOME PIC X(30).
   05 IDADE PIC 9(3).

No Python:

cliente = {
    "nome": "Bellacosa",
    "idade": 42
}

💡 Dica Bellacosa:
Pare de pensar em "layout fixo". Python vive no mundo flexível.


2. 🔁 Loops sem sofrimento (adeus PERFORM VARYING)

COBOL:

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10

Python:

for i in range(1, 11):
    print(i)

👉 Mais curto. Mais claro. Mais perigoso (se você não entender bem 😏).


3. 📦 Trabalhar com APIs (o novo "CALL")

Aqui está o divisor de águas.

COBOL chama programa.
Python conversa com o mundo.

import requests

response = requests.get("https://api.exemplo.com/clientes")
dados = response.json()

💥 Isso aqui é o novo CICS, meu amigo.


4. 🧠 Manipulação de dados (o novo poder absoluto)

Se você domina SORT, IDCAMS… segura isso:

import pandas as pd

df = pd.read_csv("clientes.csv")
df_filtrado = df[df["idade"] > 30]

👉 Você acabou de fazer algo que no mainframe levaria JCL + SORT + programa COBOL.


5. 🧪 Script rápido (o anti-batch)

No COBOL:

  • Escreve
  • Compila
  • Linka
  • Executa

No Python:

python programa.py

😳 Sim… é só isso.


⚠️ Armadilhas que o Coboleiro cai

❌ 1. Tentar “escrever COBOL em Python”

Indentação errada, código travado, sem aproveitar o poder real.

❌ 2. Ignorar exceções

COBOL trata erro de forma explícita.
Python? Se você não tratar… 💣 BOOM.

try:
    x = 10 / 0
except ZeroDivisionError:
    print("Erro controlado!")

❌ 3. Não entender ambiente (virtualenv)

No mainframe: ambiente é controlado.
No Python: você cria o seu universo.

python -m venv meu_ambiente

🧠 Curiosidade de Bastidores

Sabia que:

👉 Bancos usam Python HOJE para:

  • Machine Learning
  • Antifraude
  • Automação de batch moderno

👉 E sabe quem entende melhor regra de negócio?

🔥 O COBOLZEIRO.


💡 Ideias práticas para começar HOJE

  • Criar um leitor de arquivo VSAM exportado (CSV)
  • Simular um batch COBOL em Python
  • Criar uma API simples que expõe dados do mainframe
  • Automatizar relatórios que você fazia em JCL

☕ O Segredo que ninguém te conta

Python não substitui COBOL.

👉 Python potencializa COBOL.

O profissional mais valioso hoje não é:

  • o que só sabe COBOL
  • nem o que só sabe Python

🔥 É o que sabe traduzir os dois mundos.


🎯 Conclusão estilo Bellacosa

Se você já domina:

  • lógica
  • processamento
  • regra de negócio
  • performance

Então você já tem 70% do que precisa.

👉 Python é só a nova interface do poder que você já tem.


🚨 Provocação final

Você quer continuar sendo:

  • operador de legado…

ou

🔥 arquiteto da nova geração híbrida (Mainframe + APIs + Python)?


segunda-feira, 2 de fevereiro de 2026

🔥 PYTHON NÃO É COBOL! — Os Pecados Capitais que Todo Coboleiro Comete (e Como Evitar Antes de Quebrar em Produção)

 

Bellacosa Mainframe dicas python para dev cobol

🔥 “PYTHON NÃO É COBOL! — Os Pecados Capitais que Todo Coboleiro Comete (e Como Evitar Antes de Quebrar em Produção)”

Se você veio do mundo do mainframe, já carrega uma das maiores vantagens da indústria: disciplina, clareza de fluxo e respeito por processamento crítico. Mas aqui vai a verdade nua e crua:

👉 Python não joga pelas mesmas regras.
E é exatamente aí que muita gente boa tropeça.

Hoje você vai receber aquele conteúdo raiz, estilo Bellacosa Mainframe: direto, prático, com história, pancada técnica e alguns “easter eggs” pra deixar a jornada divertida.


🧠 Python: o Anti-COBOL?

Antes de tudo, entenda o choque cultural.

COBOL 🧾Python 🐍
Verboso, explícitoMinimalista, implícito
Tipagem forteTipagem dinâmica
Estruturado por divisãoEstruturado por blocos
Batch e previsívelDinâmico e interativo
RigidezFlexibilidade extrema

📌 Python nasceu nos anos 90 com Guido van Rossum, inspirado na ideia de código legível como inglês.
📌 O nome vem do grupo de comédia Monty Python (sim, já começa com humor 😄).

👉 Enquanto COBOL foi feito para processar negócios, Python foi feito para resolver problemas rapidamente.


⚠️ Os Pecados Capitais do Coboleiro em Python

❌ 1. Escrever Python como se fosse COBOL

Se você começa assim:

if x == True:

👉 Você já caiu na armadilha.

✔️ O jeito Python:

if x:

💡 Python valoriza simplicidade extrema.


❌ 2. Tentar declarar tudo antes (mentalidade DATA DIVISION)

Em COBOL:

01 WS-NOME PIC X(30).

Em Python:

nome = "Vagner"

👉 Não existe declaração formal. Variável nasce no uso.

⚠️ Problema comum:

  • Confundir tipos
  • Criar bugs silenciosos
x = 10
x = "dez" # permitido (e perigoso!)

❌ 3. Ignorar identação (o maior choque)

COBOL usa palavras.
Python usa espaços.

if x > 10:
print("erro") # ERRO!

✔️ Correto:

if x > 10:
print("ok")

👉 Em Python, identação define o programa.


❌ 4. Criar código “proceduralzão”

Coboleiro ama fluxo linear.
Python ama abstração.

Evite isso:

def processar():
# 200 linhas aqui

✔️ Prefira:

def validar():
pass

def calcular():
pass

def gravar():
pass

👉 Modularização é essencial.


🧬 Como Python Funciona (Mentalidade Correta)

🔹 Tudo é objeto

x = 10

👉 x é um objeto. Até funções são objetos.

def f():
pass

print(type(f))

🔹 Interpretado e dinâmico

Python executa linha por linha.

👉 Isso traz:

  • rapidez de desenvolvimento
  • bugs em runtime (cuidado!)

🔹 Duck Typing 🦆

“Se parece com pato e faz quack, é pato.”

def som(animal):
animal.fazer_som()

👉 Não importa o tipo, importa o comportamento.


🧠 Patterns que Você PRECISA Aprender

🟢 1. List Comprehension (o “SORT” do Python)

numeros = [x for x in range(10)]

✔️ Mais poderoso:

pares = [x for x in range(10) if x % 2 == 0]

🟢 2. EAFP vs LBYL

COBOL: valida tudo antes
Python: tenta e trata erro

try:
x = int("10")
except:
x = 0

👉 Filosofia Python: é melhor pedir perdão do que permissão


🟢 3. Context Manager (tipo controle de arquivo elegante)

with open("arquivo.txt") as f:
dados = f.read()

👉 Ele fecha automaticamente (sem CLOSE manual)


🟢 4. Funções de primeira classe

def soma(a, b):
return a + b

f = soma
print(f(2,3))

💥 Problemas Clássicos de Iniciantes

⚠️ 1. Mutabilidade traiçoeira

lista = []
def add(x, l=lista):
l.append(x)
return l

👉 Isso acumula valores entre chamadas!


⚠️ 2. Comparação errada

if x is 10: # errado

✔️ Use:

if x == 10:

⚠️ 3. Import bagunçado

from modulo import *

❌ Nunca faça isso!

✔️ Prefira:

import modulo

⚠️ 4. Performance ignorada

Python não é batch otimizado como COBOL.

👉 Evite:

  • loops desnecessários
  • processamento pesado sem biblioteca (use NumPy, etc.)

🧰 Dicas de Ouro (Modo Produção Mainframe)

💡 1. Use virtualenv

Isola dependências:

python -m venv venv

💡 2. Leia o “Zen of Python”

import this

👉 Easter egg clássico 😄

Você verá frases como:

“Simple is better than complex.”


💡 3. Logging > Print

import logging
logging.info("processando...")

💡 4. Teste sempre (mentalidade batch)

Use:

pytest

💡 5. Nome de variável importa MUITO

# ruim
x = 10

# bom
quantidade_registros = 10

🕰️ Curiosidades que Todo Coboleiro Vai Gostar

  • Python foi criado como projeto de férias de Natal 🎄
  • O criador sumiu por anos (BDFL aposentado 😄)
  • Indentação obrigatória foi decisão polêmica e genial
  • Python roda até em mainframe hoje (sim, no z/OS!)

🎯 Mentalidade Final: O Upgrade do Coboleiro

Se você dominar isso, vira uma máquina híbrida:

👉 Disciplina COBOL + Flexibilidade Python = 🔥 PODER REAL

Você passa a:

  • Prototipar rápido
  • Automatizar processos
  • Integrar com APIs
  • Substituir scripts legacy

🚀 Conclusão

Python não substitui COBOL.
Mas ele expande seu alcance brutalmente.

👉 O erro não é aprender Python…
👉 O erro é tentar escrever Python como COBOL.

Se você mudar o mindset, acontece algo poderoso:

💡 Você deixa de ser apenas um programador…
💡 E vira um engenheiro de soluções moderno com raiz mainframe



domingo, 18 de janeiro de 2026

📜 CAPÍTULO 10 — CONCLUSÃO, ANEXOS E GLOSSÁRIO FINAL

 


📜 CAPÍTULO 10 — CONCLUSÃO, ANEXOS E GLOSSÁRIO FINAL

“Consolidando o conhecimento, reforçando a aventura e eternizando a lenda”

“Todo manual é apenas um mapa; a aventura verdadeira acontece na mesa, na mente e no coração dos jogadores.”
Mestre Bellacosa, Crônicas da Mesa Eterna


🌌 Conclusão do Volume 1

O Plano Completo Bellacosa de RPG — Volume 1 apresentou:

  1. Fundamentos e arquétipos de personagens.

  2. Monstros clássicos, dungeons e magia.

  3. Guildas, ranks e a jornada do herói.

  4. O papel do Mestre como narrador, demiurgo e guia.

“Cada capítulo é uma peça do quebra-cabeça; a mesa é o lugar onde todas se encaixam.”

O aprendizado central: RPG é narrativa compartilhada, emoção, escolha e consequência, e cada regra ou rank existe para enriquecer a história, não limitá-la.


📚 Anexos Práticos

A — Tabelas de Monstros (Exemplo Simplificado)

MonstroForçaCuriosidadeOrigem
SlimeBaixaPrimeiro inimigo clássicoJRPG / D&D
WyvernMédiaDracônico, asas e caudaMitologia europeia e fantasia
GoblinBaixaInteligentes e traiçoeirosFolclore medieval
Dragão AncestralMuito altaLenda viva, símbolo de poderMitologia global e fantasia

B — Estrutura de Guildas e Reinos

OrganizaçãoFunçãoConflito Potencial
Guilda MercenáriaMissões e lucroRivalidade e lealdade
Círculo ArcanoMagia e estudoDisputa por conhecimento
ReinoGoverno e leiGuerras, intrigas políticas
Ordem ReligiosaFé e moralFanatismo e corrupção

C — Ranks e Progressão

RankSímboloTipo de Missão
FCobreTarefas básicas
DPrataExplorações simples
BPlatinaMissões críticas
SAdamanteAventuras épicas

D — Tipos de Magia

MagiaFonteUsoRisco
ArcanaEstudoAtaque/defesaFadiga, perda de controle
DivinaCura/ProteçãoPerda de fé, pactos
NecromanciaPactosControle de mortosCorrupção moral
AlquímicaExperimentoPoções/TransmutaçãoFalha, explosão

🪶 Filosofia Bellacosa do Volume

  • Narrativa antes de mecânica: regras existem para enriquecer a história, não para substituí-la.

  • Heróis e jogadores evoluem juntos: cada desafio, rank ou dungeon é oportunidade de crescimento.

  • O Mestre é ponte e guardião: equilíbrio entre caos e ordem, liberdade e consequência.

  • A aventura é coletiva: cada escolha de cada jogador reverbera no mundo da mesa.

📜 Quadro Filosófico Final:

“O RPG é um espelho do heroísmo humano — coragem, medo, curiosidade e ética.
A mesa é o templo; o dado, a oferenda; e a história, a eternidade.”


🔮 Curiosidades Bellacosa

  • O termo “RPG” (Role-Playing Game) surgiu nos anos 70, mas os fundamentos narrativos existem desde épicos medievais e lendas orais.

  • Sistemas japoneses e ocidentais compartilham arquétipos de personagens, mas diferem na progressão e abordagem da narrativa.

  • Mestres lendários são lembrados mais por histórias emocionantes e escolhas memoráveis do que por regras ou mortes de personagens.


⚙️ Glossário Final

TermoDefinição
DungeonEstrutura de exploração cheia de perigos e recompensas.
GuildaOrganização de aventureiros com objetivos, regras e hierarquia.
RankMedida de experiência, prestígio e poder de um personagem.
MagiaPoder que exige estudo, fé ou pacto, com consequências.
NPCPersonagem não-jogador controlado pelo Mestre.
XPExperiência adquirida para evolução do personagem.
MestreGuardião da narrativa, criador de mundos e regulador da mesa.
ArquetipoModelo clássico de personagem ou classe que guia criação e narrativa.

💬 Nota Marginal Final do Mestre

“Este Volume 1 é apenas o início.
O verdadeiro aprendizado acontece na mesa, entre dados, amigos e histórias.
Cada sessão é um capítulo, cada escolha uma página, cada personagem uma lenda.”


⚔️ Encerramento do Plano Completo Bellacosa — Volume 1

O Volume 1 fornece:

  • Fundamentos do RPG.

  • Estruturas de personagens, monstros e magia.

  • Guias de guildas, ranks, dungeons e jornadas.

  • Filosofia, notas e quadros do Mestre.

“O herói lê o manual.
O jogador vive a aventura.
O Mestre eterniza a lenda.”

quinta-feira, 7 de agosto de 2025

Conheça os diversos tipos de variáveis COBOL

 

Conheça os diversos tipos de variáveis COBOL

4,424 followers

Salve jovem padawan, no artigo de hoje, apresento um programa COBOL explorando os diversos tipos de variáveis, gerando como saída, um arquivo de 143 bytes ilustrando como é o armazenamento e o formato dos dados.

Aproveito e apresento alguns comandos COBOL com diversas parametrizações, onde poderemos explorar e entender na prática seu funcionamento.

O programa foi dividido em Sections e Parágrafos, ajudando a conhecer técnicas de laço e salto de parágrafo.

PROGRAMA COBOL117

 *****************************************************************
      * DATA     : 29/08/2024
      * AUTOR    : VAGNER RENATO BELLACOSA
      * OBJETIVO : PROGRAMA EXEMPLO ARQUIVO QSAM LOOP
      * CPD      : INEFE
      *****************************************************************
       IDENTIFICATION DIVISION.
      *************************
       PROGRAM-ID. COBOL117.
       AUTHOR. VAGNER BELLACOSA.
       DATE-WRITTEN. 29/08/24 @ 21:18:00.
       DATE-COMPILED. 2024-08-29.

      **********************
       ENVIRONMENT DIVISION.
      **********************
      *
       CONFIGURATION SECTION.
      *
       SOURCE-COMPUTER. IBM-I.
       OBJECT-COMPUTER. IBM-I.
       SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
      *
       INPUT-OUTPUT SECTION.
      *
       FILE-CONTROL.
           SELECT OUTPTFL    ASSIGN TO OUTPTFL
           ORGANIZATION IS SEQUENTIAL
           ACCESS MODE IS SEQUENTIAL
           FILE STATUS IS FS-STATUS.

      ***************
       DATA DIVISION.
      ***************
      *
       FILE SECTION.
      *
       FD OUTPTFL
           RECORD CONTAINS 145 CHARACTERS
           LABEL RECORDS ARE STANDARD
           RECORDING MODE IS F
           DATA RECORD IS REG-DADOS.
      *
       COPY COPY117A.
      *
      *
       WORKING-STORAGE SECTION.
      *
      *
       01  WSS-VARIAVEL-AUX.
          05  WSS-EOF            PIC A(01).
          05  FS-STATUS          PIC 99.
      *
       77 WSS-RANDOM-NUMBER1   PIC 999 VALUE ZEROES.
       77 WSS-RANDOM-NUMBER2   PIC 999 VALUE ZEROES.
       77 WSS-REG-GRAVADOS     PIC 999 VALUE ZEROES.
       77 WSS-CICLO            PIC 99  VALUE 15.
       77 WSS-DATA-COMPIL      PIC X(16).
      *
      ****************************************************************
      **  DECLARATIONS FOR THE LOCAL DATE/TIME FOR DISPLAY
      ****************************************************************
       01  WSS-CAMPOS-AUXILIARES.
           05 WSS-YYYYMMDD          PIC  9(008).
           05 WSS-YYMMDD            PIC  9(006).
           05 WSS-HHMMSS            PIC  9(006).
           05 WSS-HHMMSSCC          PIC  9(008).
           05 WSS-DIA-SEMANA        PIC  9(001).
           05 WSS-ANO-DIA           PIC  9(005).
           05 WSS-DAY-YYYYDDD       PIC  9(007).
           05 WSS-DAY-001           PIC  S9(009).
           05 WSS-INTEGER-FORM      PIC  S9(9) SIGN LEADING SEPARATE.
           05 WSS-INT-DATE          PIC  9(8) VALUE ZERO.
           05 WSS-DATE-TODAY        PIC  9(7) VALUE ZERO.
           05 WSS-DUE-DATE          PIC  9(7) VALUE ZERO.

      ********************
       PROCEDURE DIVISION.
      ********************

       001-INICIALIZAR          SECTION.

           PERFORM ROT-LISTA-INFO
              THRU ROT-LISTA-INFO-EXIT.

           PERFORM ROT-OPEN-FILE
              THRU ROT-OPEN-FILE-EXIT.

           PERFORM ROT-INITIALIZE-VAR
              THRU ROT-INITIALIZE-VAR-EXIT.

       002-WORKFILE             SECTION.

           PERFORM ROT-FORMATA-OUTPUT
              THRU ROT-FORMATA-OUTPUT-EXIT WSS-CICLO TIMES.

       003-PROCEDIMENTOS-FINAIS SECTION.

           PERFORM ROT-CLOSE-FILE
              THRU ROT-CLOSE-FILE-EXIT.

           PERFORM ROT-ESTATISTICA
              THRU ROT-ESTATISTICA-EXIT.

           STOP RUN.

      * SEçãO DE CODIGOS AUXILIARES
       004-PARAGRAFOS            SECTION.

      * INICIALIZA VARIAVEIS
       ROT-INITIALIZE-VAR.

      **** MOVE ZEROES TO REG-DADOS

           INITIALIZE REG-DADOS
              REPLACING ALPHANUMERIC BY   SPACES
                        NUMERIC      BY   ZEROES.

       ROT-INITIALIZE-VAR-EXIT.
           EXIT.

      * LISTA CABECALHO DO PROGRAMA
       ROT-LISTA-INFO.

           DISPLAY ' '.
           DISPLAY '*****************************************'.
           DISPLAY '*            COBOL117                   *'.
           DISPLAY '*****************************************'.
           DISPLAY '*                                       *'.
           DISPLAY '* EXEMPLO DE OPEN WRITE CLOSE QSAM FILE *'.
           DISPLAY '*  USO DE COPY BOOK PARA LAYOUT ARQUIVO *'.
           DISPLAY '*  GRAVACAO ALFABETICA ALFANUMERICA     *'.
           DISPLAY '*  COMP1 COMP2 COMP3 COMP4 COMP5        *'.
           DISPLAY '*  USO DE FUNçãO INTRINSECA             *'.
           DISPLAY '*  INITIALIZE 3 MODOS                   *'.
           DISPLAY '*  SECTIONS E PARAGRAFOS                *'.
           DISPLAY '*  TAMANHO DO REGISTRO '
                               LENGTH OF REG-DADOS ' BYTES  *'.
           DISPLAY '*  WSS-CICLO = ' WSS-CICLO
                   '      LOOP DE GRAVACAO *'
           DISPLAY '*****************************************'.
           DISPLAY ' '.

           PERFORM ROT-GET-DATA
              THRU ROT-GET-DATA-EXIT.

           DISPLAY '* WSS-DATA-COMPIL = ' WSS-DATA-COMPIL
                          '          *'.
           DISPLAY ' '.

       ROT-LISTA-INFO-EXIT.
           EXIT.

      * FUNCOES INTRINSECAS OBTEM DADOS DO SISTEMA
       ROT-GET-DATA.

      * OBTEM A DATA DA COMPILACAO
           MOVE FUNCTION WHEN-COMPILED  TO WSS-DATA-COMPIL

      * BUSCA DATA VIA CURRENT-DATE

           MOVE FUNCTION CURRENT-DATE(1:8) TO WSS-YYYYMMDD

           DISPLAY ' WSS-YYYYMMDD    = ' WSS-YYYYMMDD

      * CALCULA DIA VIA INTEGER-OF-DATE

           COMPUTE WSS-YYYYMMDD    = FUNCTION INTEGER-OF-DATE
                                     (WSS-YYYYMMDD)
                                     + 15.
           DISPLAY ' WSS-YYYYMMDD    = ' WSS-YYYYMMDD
           DISPLAY 'NOVA DATA: ' WSS-DAY-YYYYDDD

      * ACCEPT

           ACCEPT WSS-DAY-YYYYDDD FROM DAY YYYYDDD.
           ACCEPT WSS-YYYYMMDD    FROM DATE YYYYMMDD.
           ACCEPT WSS-YYMMDD      FROM DATE.
           ACCEPT WSS-HHMMSS      FROM TIME.
           ACCEPT WSS-HHMMSSCC    FROM TIME.
           ACCEPT WSS-DIA-SEMANA  FROM DAY-OF-WEEK.
           ACCEPT WSS-ANO-DIA     FROM DAY.

       ROT-GET-DATA-EXIT.
           EXIT.

      * ABERTURA DE ARQUIVO QSAM
       ROT-OPEN-FILE.

           DISPLAY 'ROT-OPEN-FILE'.

           OPEN OUTPUT OUTPTFL.

           IF FS-STATUS > 0
              DISPLAY 'ERRO NA ABERTURA DO ARQUIVO OUTPTFL '
              DISPLAY 'FS-STATUS : ' FS-STATUS
              MOVE FS-STATUS    TO  RETURN-CODE
              PERFORM ROT-ABEND
           END-IF.

       ROT-OPEN-FILE-EXIT.
           EXIT.

      * FORMATA REGISTRO DE SAIDA
       ROT-FORMATA-OUTPUT.

           DISPLAY 'ROT-FORMATA-OUTPUT'.

           PERFORM ROT-INITIALIZE-VAR
              THRU ROT-INITIALIZE-VAR-EXIT.

           MOVE  'WILSON LUPINO'   TO   REG-NOME.
           MOVE  '2014-05-11'      TO   REG-DATA-NASC.
           MOVE  WSS-REG-GRAVADOS  TO   REG-ORDEM.
           MOVE  'RUA A NO 15'     TO   REG-ENDERECO
           MOVE  'TAUBATE'         TO   REG-CIDADE
           MOVE  'SP'              TO   REG-ESTADO
           MOVE  '18000-100'       TO   REG-CEP
           MOVE   123              TO   REG-COMP1-4
           MOVE   123456           TO   REG-COMP2-8
           MOVE  -123456           TO   REG-COMP3-5
           MOVE   199998           TO   REG-COMP3-5A
           MOVE  -789012           TO   REG-COMP3-6
           MOVE  1000              TO   REG-COMP4-2
           MOVE  2000000           TO   REG-COMP4-4
           MOVE  3000000000        TO   REG-COMP4-8
           MOVE  -1000             TO   REG-COMP5-2
           MOVE  -2000000          TO   REG-COMP5-4
           MOVE  -3000000000       TO   REG-COMP5-8
           MOVE  'FIM'             TO   REG-TEXTO5C

           PERFORM ROT-ALEATORIA
              THRU ROT-ALEATORIA-EXIT.

           MOVE WSS-RANDOM-NUMBER1 TO   REG-ANO-DIA.
           MOVE WSS-RANDOM-NUMBER2 TO   REG-ANO-MES.

           DISPLAY ' REG-DADOS     : ' REG-DADOS ' '
                     LENGTH OF REG-DADOS ' BYTES '.
           DISPLAY ' REG-NOME      : ' REG-NOME.
           DISPLAY ' REG-DATA-NASC : ' REG-DATA-NASC.
           DISPLAY ' WSS-CICLO     : ' WSS-CICLO.

           PERFORM ROT-WRITE-FILE
              THRU ROT-WRITE-FILE-EXIT

      ***** 4 LINHAS ADICIONAIS

           IF WSS-REG-GRAVADOS = 15
      * GRAVA LOW-VALUES NO ARQUIVO
             MOVE LOW-VALUES       TO REG-DADOS
             PERFORM ROT-WRITE-FILE
                THRU ROT-WRITE-FILE-EXIT
      * GRAVA HIGH-VALUES NO ARQUIVO
             MOVE HIGH-VALUES      TO REG-DADOS
             PERFORM ROT-WRITE-FILE
                THRU ROT-WRITE-FILE-EXIT
      * INICIALIZA ESTRUTURA DO ARQUIVO COM 9 E X
             INITIALIZE REG-DADOS
                REPLACING ALPHANUMERIC DATA BY 'X'
                          NUMERIC      DATA BY 9
             PERFORM ROT-WRITE-FILE
                THRU ROT-WRITE-FILE-EXIT
      * INICIALIZA ESTRUTURA
             INITIALIZE REG-DADOS
             PERFORM ROT-WRITE-FILE
                THRU ROT-WRITE-FILE-EXIT
           END-IF.

       ROT-FORMATA-OUTPUT-EXIT.
           EXIT.

      * GRAVA REGISTRO DE SAIDA
       ROT-WRITE-FILE.

           WRITE REG-DADOS
           END-WRITE.

           IF FS-STATUS > 0
              DISPLAY 'ERRO NA GRAVACAO DO ARQUIVO OUTPTFL '
              DISPLAY 'FS-STATUS : ' FS-STATUS
              MOVE FS-STATUS    TO  RETURN-CODE
              PERFORM ROT-ABEND
           END-IF.

           ADD  01                 TO   WSS-REG-GRAVADOS.

       ROT-WRITE-FILE-EXIT.
           EXIT.

      * FECHA ARQUIVO QSAM
       ROT-CLOSE-FILE.

           DISPLAY 'ROT-CLOSE-FILE'.

           CLOSE OUTPTFL.

           IF FS-STATUS > 0
              DISPLAY 'ERRO NO FECHAMENTO DO ARQUIVO OUTPTFL '
              DISPLAY 'FS-STATUS : ' FS-STATUS
              MOVE FS-STATUS    TO  RETURN-CODE
              PERFORM ROT-ABEND
           END-IF.

       ROT-CLOSE-FILE-EXIT.
           EXIT.

      * LISTA AS ESTATISTICAS DO PROCESSAMENTO
       ROT-ESTATISTICA.

           ACCEPT WSS-HHMMSSCC    FROM TIME.

           DISPLAY ' '.
           DISPLAY '*******************************************'.
           DISPLAY '*** PROGRAMA COBOL117                   ***'.
           DISPLAY '*******************************************'.
           DISPLAY '*** DATA DO PROCESSAMENTO : '
                    WSS-YYYYMMDD  '   ***'.
           DISPLAY '*** HORA DO PROCESSAMENTO : '
                    WSS-HHMMSSCC  '   ***'.
           DISPLAY '*******************************************'.
           DISPLAY '*                                         *'.
           DISPLAY '* TERMINO DE PROCESSAMENTO OK             *'.
           DISPLAY '*                                         *'.
           DISPLAY '* REGISTRO GRAVADOS : ' WSS-REG-GRAVADOS
                   '                *'.
           DISPLAY '*                                         *'.
           DISPLAY '*******************************************'.

       ROT-ESTATISTICA-EXIT.
           EXIT.

      * SAIDA CONTROLADA - ABEND NO PROCESSAMENTO
       ROT-ABEND.

           ACCEPT WSS-HHMMSSCC    FROM TIME.

           DISPLAY '*******************************************'.
           DISPLAY '*** PROGRAMA COBOL117                   ***'.
           DISPLAY '*******************************************'.
           DISPLAY '*** DATA DO PROCESSAMENTO : '
                    WSS-YYYYMMDD  '  ***'.
           DISPLAY '*** HORA DO PROCESSAMENTO : '
                    WSS-HHMMSSCC  '  **'.
           DISPLAY '*******************************************'.
           DISPLAY ' ABEND PROGRAMADO '.
           DISPLAY ' ERRO ENCONTRADO : '  RETURN-CODE.
           DISPLAY ' FAVOR AVISAR O ANALISTA RESPONSAVEL'.
           DISPLAY '*******************************************'.
      **** CALL ABEND.
           STOP RUN.

       ROT-ABEND-EXIT.
           EXIT.

      * GERADOR DE NUMERO ALEATORIO
       ROT-ALEATORIA.

           COMPUTE WSS-RANDOM-NUMBER1 = FUNCTION RANDOM * 31.
           COMPUTE WSS-RANDOM-NUMBER2 = FUNCTION RANDOM * 12.
           DISPLAY ' '.
           DISPLAY ' 1 --> ' WSS-RANDOM-NUMBER1
                   ' 2 --> ' WSS-RANDOM-NUMBER2
           DISPLAY ' '.

       ROT-ALEATORIA-EXIT.
           EXIT.

       END PROGRAM COBOL117.
      ********************** FIM PROGRAMA   **************************** 

Código Comentado por Section

Este programa foi dividido em 4 seções, o código usou da Logica Estruturado preparado para receber novos parágrafos e funcionalidades com o menor impacto no código legado.

001-INICIALIZAR SECTION.

Nesta seção o programa lista a info da abertura do programa, abre arquivo output e inicializa as variaveis.

002-WORKFILE SECTION.

Nesta seção trataremos da formatação das variáveis e procedimento de gravação dos registros.

003-PROCEDIMENTOS-FINAIS SECTION.

Nesta seção trataremos dos procedimentos finais, fechando arquivo e listando a estatistica do processamento

004-PARAGRAFOS SECTION.

Seção auxiliar que armazena as diversas sub-rotinas do programa. Objetivando facilitar a manutenção das mesmas.


COPY

É um arquivo de definição das variáveis publico, destinado a compartilhar entre diversos programas a mesma estrutura. Em um COPY book inclui o Grupo de Dados estruturado e separados por níveis de 1 até 10.

Exemplificamos os três tipos de variável COBOL. Alfabética, Alfanumérica e Numérico, expandindo para os tipos Computacional de 1 a 5.

************************************************************************************
*******  ESTE COPY BOOK CONTEM COMANDOS DA DATA DIVISION                       ***
*******                                    WORKING-STORAGE SECTION.                                    ***
*******  EM TEMPO DE COMPILACAO ESTE BLOCO DE CODIGO SERA INSERIDO NO***
*******  PROGRAMA, PODENDO SER REUTILIZADO POR N PROGRAMAS, DEVENDO**  ***
*******  ESTAR NA LIBRARY DEFINIDA PARA OS COPIES.                   ***
************************************************************************
      *
      * DATA GROUP ITEM
       01 REG-DADOS.
      *
      *  VARIABLE NUMERIC       -> PIC 9
         05 REG-ORDEM                  PIC 999.
      *  VARIABLE ALPHABETIC   -> PIC A
         05 REG-NOME                    PIC A(20).
      *  VARIABLE ALPHANUMERIC -> PIC X
         05 REG-DATA-NASC            PIC X(10).
      *  REDEFINES ITEM
         05 FILLER       REDEFINES  REG-DATA-NASC.
           10 REG-ANO-NASC           PIC 9(04).
           10 FILLER                            PIC X.
           10 REG-ANO-MES              PIC 9(02).
           10 FILLER                            PIC X.
           10 REG-ANO-DIA               PIC 9(02).
         05 REG-ENDERECO              PIC X(20).
         05 REG-CIDADE                   PIC X(10).
         05 REG-ESTADO                  PIC XX.
         05 REG-CEP                         PIC X(09).
         05 FILLER       REDEFINES  REG-CEP.
           10 REG-CEP-INT                PIC 9(05).
           10 FILLER                           PIC X.
           10 REG-CEP-COMP           PIC 9(03).
      * COMPUTACIONAL  1
         05 REG-COMP1-4            USAGE IS COMP-1.
         05 REG-TEXTO1                  PIC X(01).
      * COMPUTACIONAL  2
         05 REG-COMP2-8            USAGE IS COMP-2.
         05 REG-TEXTO2                  PIC X(01).
      * COMPUTACIONAL  3
         05 REG-COMP3-5               PIC S9(10) COMP-3.
         05 REG-TEXTO3A                PIC X(01).
         05 REG-COMP3-5A             PIC  9(10) COMP-3.
         05 REG-TEXTO3B                PIC X(01).
         05 REG-COMP3-6               PIC S9(11) COMP-3.
         05 REG-TEXTO3C                PIC X(01).
      * COMPUTACIONAL  4
         05 REG-COMP4-2               PIC S9(4)  COMP-4.
         05 REG-TEXTO4A                PIC X(01).
         05 REG-COMP4-4               PIC S9(9)  COMP-4.
         05 REG-TEXTO4B                PIC X(01).
         05 REG-COMP4-8               PIC S9(18) COMP-4.
         05 REG-TEXTO4C                PIC X(01).
      * COMPUTACIONAL  5
         05 REG-COMP5-2               PIC S9(4)  COMP-5.
         05 REG-TEXTO5A                PIC X(01).
         05 REG-COMP5-4               PIC S9(9)  COMP-5.
         05 REG-TEXTO5B                PIC X(01).
         05 REG-COMP5-8               PIC S9(18) COMP-5.
      *
         05 REG-TEXTO5C                PIC X(03).
**************************** FIM DO COPYBOOK *************************** 

JCL - JOB CONTROL LANGUAGE

Para o teste, após compilarmos o programa num compilador igual ou maior que a versão 4, o ideal é a versão 6.3. Segue o JCL em dois steps.

//EXECPGM1   JOB ('00'),TSO.&SYSUID,                           
//          REGION=0M,NOTIFY=&SYSUID,LINES=(17000,CANCEL),
//          MSGCLASS=T,MSGLEVEL=1,CLASS=A
//**********************************************************************
//*            TESTE PARA CRIACãO DE ARQUIVO
//*            GERAR UM ARQUIVO COM 143 BYTES
//**********************************************************************
//JOBLIB  DD DSN=KC02745.LIB.CBLPDSE,DISP=SHR
//**********************************************************************
//* STEP TO DELETE A DATASET
//**********************************************************************
//STEP001  EXEC PGM=IEFBR14
//DD1      DD DSN=KC02745.OUTPTFL.EXEWRITE.D0117,
//         DISP=(OLD,DELETE,DELETE)
//**********************************************************************
//* PROGRAMA QUE GERA ARQUIVO DE SAIDA COM EXEMPLO DE COMPUTACIONAL
//**********************************************************************
//STEP002  EXEC PGM=COBOL117
//*    ARQUIVO DE SAIDA                                                   *\\
//OUTPTFL DD DSN=KC02745.OUTPTFL.EXEWRITE.D0117,
//             DISP=(NEW,CATLG,DELETE),
//             SPACE=(TRK,(1,1),RLSE),UNIT=SYSDA,
//             DCB=(LRECL=145,RECFM=FB,BLKSIZE=0)
//SYSTSPRT DD  SYSOUT=*
//SYSPRINT DD  SYSOUT=*
//CEEDUMP  DD  SYSOUT=*
//SYSUDUMP DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//REPORT   DD  SYSOUT=*
//SYSABOUT DD  SYSOUT=*
//SYSDBOUT DD  SYSOUT=*
/*
//****************************** FIM DO JCL **************************** 

//STEP001 EXEC PGM=IEFBR14

Este aplicativo da IBM permite apagar o Dataset.

//STEP002 EXEC PGM=COBOL117

Executa o programa e grava arquivo de saída com 145 bytes.

Output

Resultado com as estatísticas de execução.

SDSF

Exobe a Sysout do processamento, lembrando que um JOB é enviado ao JES2. onde passa por 3 filas de workflow, senda a primeira de validação , a segunda de execução e a terceira de impressão.

Article content
Article content

O Resultado será do processamento irá criar um Dataset QSAM Fixo Blocado com 145 bytes de cumprimento por registro e ao final será gravado 19 linhas.

Info do DATASET

Article content

Registros EBCDIC convertidos no Emulador para ASCII

O arquivo no formato EBCDIC:


Article content
Article content

Formato HEX

Usando comando de linha Hexadecimal o arquivo mostrará os registros no formato EBCDIC divididos em Alto e Baixo do octeto de bits.


Article content

Neste print exemplifico os registros de 15 até 19 no formato hexadecimal.

Conheça os diversos formatos


  1. Low-Values
  2. High-Values
  3. Initialize de X a 9
  4. Initialize de espaços e zero


Computacional de 1 a 5


Article content

Exemplo de uso das variáveis computacional e seu uso em bytes na geração de arquivo.


Espero ter ajudado e qualquer duvida entre em contato.