[NÍVEL AVANÇADO] Exercícios Complexos de REXX
Domine IF, SELECT e Loops com problemas do mundo real
🔥 DESAFIO 1: Analisador de Logs de Job
/* OBJETIVO: Analisar múltiplas linhas de log SIMULAÇÃO: Você recebe um array com status de jobs CADA LINHA: "JOBNAME;STARTTIME;ENDTIME;RC" EXEMPLO: jobs.1 = "JOB001;08:00;08:05;00" jobs.2 = "JOB002;08:05;08:07;04" jobs.3 = "JOB003;08:07;08:10;00" TAREFAS: 1. Calcular tempo de cada job 2. Identificar jobs com RC ≠ 0 3. Calcular tempo total de processamento 4. Encontrar job mais longo DICA: Use PARSE para separar por ";" */
🔥 DESAFIO 2: Sistema de Menu com Validação
/* OBJETIVO: Criar sistema de menu profissional REQUISITOS: 1. Loop infinito com opção de sair 2. Validação de entrada 3. Submenus 4. Histórico de operações 5. Limpeza de tela entre menus ESTRUTURA: MENU PRINCIPAL: 1. Processamento 2. Relatórios 3. Utilitários 4. Sair SUBMENU Processamento: 1.1 Validar dados 1.2 Importar arquivos 1.3 Voltar DICA: Use DO FOREVER, SELECT aninhados */
🔥 DESAFIO 3: Gerador de Scripts JCL
/* OBJETIVO: Gerar JCL dinamicamente ENTRADA: Parâmetros do job SAÍDA: Script JCL pronto para usar PARÂMETROS: - Nome do job (1-8 chars) - Programa a executar - Dataset de entrada - Dataset de saída - Região de memória - Classe EXEMPLO DE SAÍDA: //JOB001 JOB ,'DESC',CLASS=A //STEP1 EXEC PGM=PROGRAM1 //INPUT DD DSN=USER.DATA.IN //OUTPUT DD DSN=USER.DATA.OUT DICA: Use loops para múltiplos steps */
💡 SOLUÇÃO do Desafio 1 (após tentativa):
/* SOLUCAO_LOGS.rex */
/* Array simulado de jobs */
jobs.1 = "JOB001;08:00;08:05;00"
jobs.2 = "JOB002;08:05;08:07;04"
jobs.3 = "JOB003;08:07;08:10;00"
total_jobs = 3
/* Variáveis de análise */
total_tempo = 0
jobs_com_erro = 0
job_mais_longo = ""
tempo_mais_longo = 0
SAY "=== ANÁLISE DE LOGS DE JOB ==="
SAY ""
DO i = 1 TO total_jobs
/* Parse para separar campos */
PARSE VAR jobs.i nome ";" inicio ";" fim ";" rc
/* Calcular tempo (em minutos) */
PARSE VAR inicio hh_in ":" mm_in
PARSE VAR fim hh_fim ":" mm_fim
inicio_min = (hh_in * 60) + mm_in
fim_min = (hh_fim * 60) + mm_fim
duracao = fim_min - inicio_min
/* Acumular totais */
total_tempo = total_tempo + duracao
/* Verificar RC */
IF rc <> "00" THEN DO
jobs_com_erro = jobs_com_erro + 1
SAY "ALERTA: Job" nome "falhou com RC =" rc
END
/* Verificar job mais longo */
IF duracao > tempo_mais_longo THEN DO
tempo_mais_longo = duracao
job_mais_longo = nome
END
SAY "Job:" nome "- Duração:" duracao "minutos - RC:" rc
END
/* Relatório final */
SAY ""
SAY "=== RELATÓRIO FINAL ==="
SAY "Total de jobs:" total_jobs
SAY "Jobs com erro:" jobs_com_erro
SAY "Tempo total:" total_tempo "minutos"
SAY "Job mais longo:" job_mais_longo "(" tempo_mais_longo "min)"
SAY "Tempo médio:" (total_tempo / total_jobs) "minutos por job"
IF jobs_com_erro > 0 THEN
SAY "ATENÇÃO: Existem jobs que precisam de análise!"
ELSE
SAY "SUCESSO: Todos os jobs executaram corretamente!"
📚 RECURSOS ADICIONAIS:
-
Playlist completa do curso: [link]
-
Códigos-fonte: [link para repositório]
-
Comunidade no Discord: [link]
-
Cheat Sheet REXX: [download]
🔔 CHAMADA FINAL:
Inscreva-se no canal para não perder as próximas aulas avançadas sobre:
-
Interação com TSO/ISPF
-
Processamento de arquivos
-
Funções personalizadas
-
Debugging profissional
-
Integração com COBOL e DB2
#REXX #Mainframe #zOS #Programação #Automação #TSO #ISPF #Exercícios #Lógica #Developer