| Bellacosa Mainframe apresenta a instrução Parse no REXX |
☕🔥 REXX PARSE: A ARTE MAINFRAME DE DESMONTAR O CAOS EM SEGUNDOS 🔥☕
“Enquanto muita linguagem ainda está procurando o delimitador… o REXX já terminou o trabalho.”
Existe um momento na vida de todo profissional de mainframe em que ele percebe uma verdade inevitável:
Quase tudo no z/OS é texto.
JCL é texto.
SYSOUT é texto.
JESMSGLG é texto.
LISTCAT é texto.
SMF textualizado é texto.
Parâmetros TSO são texto.
Mensagens do CICS são texto.
Relatórios batch são texto.
Até o operador nervoso digitando comando errado no console vira texto.
E então surge uma das instruções mais elegantes já criadas pela engenharia IBM:
PARSE
Uma instrução tão poderosa que parece magia negra escrita em EBCDIC.
🧠 O QUE É O PARSE?
A IBM define PARSE como:
“Resolver algo em suas partes componentes.”
Traduzindo para o dialeto Bellacosa Mainframe:
“Pegar aquele Frankenstein textual horroroso e transformar em variáveis organizadas sem sofrer.”
😱 O TRAUMA UNIVERSAL DO PARSING
Todo programador já passou por isso:
Em outras linguagens…
linha = "JOAO:30:SAOPAULO"
dados = linha.split(":")
Funciona.
Mas aí aparece:
JOAO|30|SAOPAULO
Depois:
JOAO,30,SAOPAULO
Depois:
JOAO 30SP
E de repente você está escrevendo:
- parser,
- regex,
- tokenizer,
- scanner,
- terapia emocional.
😎 O REXX OLHA PARA ISSO E DIZ:
Parse Var linha nome ':' idade ':' cidade
Pronto.
Acabou.
Vai tomar café.
☕ O PARSE É O VERDADEIRO OPERADOR DO MAINFRAME
Porque ele aguenta:
✔ JES2
✔ IDCAMS
✔ DFSORT
✔ IEHLIST
✔ TSO
✔ ISPF
✔ RACF
✔ VTAM
✔ CICS
✔ Outputs monstruosos de utilitários IBM
Enquanto você ainda está tentando descobrir onde começa a coluna 72.
🏛️ A FILOSOFIA IBM ESCONDIDA NO PARSE
O PARSE nasceu numa época em que:
- memória era cara,
- CPU era preciosa,
- programador precisava produzir rápido,
- automação era sobrevivência.
Então a IBM criou algo brilhante:
Um parser declarativo.
Você descreve o formato.
O REXX faz o resto.
🔥 EXEMPLO 1 — O PARSE “WORD BY WORD”
Entrada
COBOL DB2 CICS JES2
Código
linha = "COBOL DB2 CICS JES2"
Parse Var linha lang1 lang2 subsystem spool
Say lang1
Say lang2
Say subsystem
Say spool
Resultado
COBOL
DB2
CICS
JES2
😏 O DETALHE GENIAL
A última variável recebe o resto.
Isso parece pequeno…
Até você perceber quantos milhões de linhas de parsing isso economizou no planeta.
💀 O TERROR DOS ARQUIVOS FIXOS
Quem nunca recebeu um arquivo assim:
000123JOAO SILVA 000045SP
…nunca sofreu de verdade no mainframe.
😎 O REXX RESPONDE COM TRANQUILIDADE
registro = "000123JOAO SILVA 000045SP"
Parse Var registro ,
1 id 7 nome 25 saldo 31 uf
Say id
Say nome
Say saldo
Say uf
RESULTADO
000123
JOAO SILVA
000045
SP
☠️ EASTER EGG MAINFRAME #1
Se você trabalhou com:
- copybook COBOL,
- VSAM KSDS,
- GDG,
- DFSORT OUTREC,
seu cérebro provavelmente já começou automaticamente a contar colunas lendo o exemplo acima.
Você não escolheu o fixed-length life.
O fixed-length life escolheu você.
🚀 PARSE COM DELIMITADOR
Entrada
CLIENTE|ATIVO|PREMIUM|BRASIL
Código
linha = "CLIENTE|ATIVO|PREMIUM|BRASIL"
Parse Var linha ,
tipo '|' ,
status '|' ,
categoria '|' ,
pais
Say tipo
Say status
Say categoria
Say pais
RESULTADO
CLIENTE
ATIVO
PREMIUM
BRASIL
🧨 ISSO ERA REVOLUCIONÁRIO
Lembre:
REXX surgiu nos anos 70.
Muitas linguagens da época ainda estavam brigando com manipulação básica de strings.
O PARSE já fazia parsing inteligente.
🤯 PARSE COM DELIMITADOR DINÂMICO
Agora vem a parte onde o REXX começa a parecer tecnologia alienígena.
EXEMPLO
delim = ';'
linha = "DB2;CICS;MQ;IMS"
Parse Var linha ,
a (delim) ,
b (delim) ,
c (delim) ,
d
RESULTADO
DB2
CICS
MQ
IMS
😳 O DELIMITADOR VEIO DE UMA VARIÁVEL
Sim.
O parser se adapta sozinho.
☕ EASTER EGG MAINFRAME #2
Todo profissional z/OS já viu isso:
IKJ56228I DATA SET NOT IN CATALOG
E imediatamente pensou:
“Hmm… isso aí daria um PARSE VAR bonito…”
Isso é sinal claro de exposição excessiva ao TSO/E.
🧠 PARSE SOURCE — O EXEC AUTOCONSCIENTE
Essa funcionalidade é absurdamente subestimada.
Código
Parse Source ,
ambiente ,
tipo ,
exec ,
ddname ,
dataset
Say ambiente
Say tipo
Say exec
Say dataset
ISSO É INSANO
Seu EXEC consegue descobrir:
✔ como foi chamado
✔ de onde veio
✔ qual dataset o contém
✔ em qual ambiente está rodando
É quase um pequeno HAL 9000 do z/OS.
Só que mais estável.
☢️ O PODER REAL DO PARSE
O PARSE não é apenas parsing.
Ele é:
- automação,
- observabilidade,
- integração,
- produtividade,
- sobrevivência operacional.
🎯 EXEMPLO REALISTA — PARSING DE LISTCAT
Saída IDCAMS
CLUSTER -------- USER.TEST.KSDS
Código
linha = "CLUSTER -------- USER.TEST.KSDS"
Parse Var linha . '--------' dsname
Say dsname
Resultado
USER.TEST.KSDS
😎 TRÊS SEGUNDOS
Sem regex.
Sem loop.
Sem sofrimento existencial.
📼 O CLIMA DOS ANOS 80
Imagine um operador em 1987:
- terminal verde,
- VTAM no ar,
- JES2 fervendo,
- fita magnética rodando,
- café duvidoso,
- e um EXEC REXX automatizando tudo com PARSE.
Cyberpunk corporativo raiz.
🧨 ARMADILHA CLÁSSICA — O “UPPER”
Muita gente esquece disso:
Parse Arg nome
automaticamente faz:
PARSE UPPER ARG
RESULTADO
Entrada:
Joao
Saída:
JOAO
😅 O INICIANTE PENSA:
“Meu programa converteu sozinho!”
Sim.
O REXX gosta de surpresas.
☕ EASTER EGG MAINFRAME #3
Se você já:
-
colocou
TRACE ?R, -
esqueceu um
PULL, - entrou em loop infinito no ISPF,
- ou derrubou um EXEC porque um PARSE pegou coluna errada…
Parabéns.
Você foi oficialmente batizado pelo espírito ancestral do TSO/E.
🚀 O PARSE MODERNO
Hoje o PARSE ainda é extremamente relevante.
Especialmente para:
✔ automação DevOps no z/OS
✔ parsing de REST
✔ USS scripting
✔ logs JSON simplificados
✔ outputs Unix no OMVS
✔ integração híbrida
✔ automação ISPF moderna
🏆 O QUE TORNA O PARSE GENIAL?
✔ Declarativo
✔ Compacto
✔ Legível
✔ Elegante
✔ Poderoso
✔ Natural para automação
✔ Perfeito para o mundo textual IBM
☕ CONCLUSÃO
O PARSE é uma das maiores obras-primas do REXX.
Ele representa perfeitamente a filosofia clássica da IBM:
Resolver problemas reais com elegância absurda.
Enquanto muitas linguagens ainda exigem dezenas de linhas para quebrar texto…
o REXX faz isso quase como uma conversa.
E talvez seja exatamente por isso que décadas depois ele continua vivo no coração do mainframe.
Porque no fim das contas…
O z/OS pode até parecer complexo.
Mas um bom PARSE VAR sempre coloca ordem no caos.