Aula 06 – Funções Nativas & Strings

Manipulação de Strings: O Superpoder do REXX!
Funções nativas que transformam dados brutos em informação valiosa

🔤 Funções de String ESSENCIAIS:

rexx
/* LENGTH - Tamanho da string */
nome = "Mainframe"
tamanho = LENGTH(nome)  /* = 9 */

/* SUBSTR - Extrai parte da string */
texto = "REXX é incrível"
parte = SUBSTR(texto, 6, 2)  /* = "é" */

/* INDEX - Encontra posição */
pos = INDEX("Hello World", "World")  /* = 7 */

/* WORDS e WORD - Trabalhando com palavras */
frase = "REXX no mainframe z/OS"
quantas = WORDS(frase)  /* = 4 palavras */
terceira = WORD(frase, 3)  /* = "mainframe" */

🛠️ Kit completo de funções:

rexx
/* CONVERSÕES */
num = "123"
valor = num + 1  /* REXX converte automaticamente! */

/* Maiúsculas/minúsculas */
grande = UPCASE("rexx")  /* = "REXX" */
pequena = LOWER("IBM")   /* = "ibm" */

/* Formatação */
centralizado = CENTER("Título", 20, "-")
/* = "-------Título-------" */

/* Busca e substituição */
novo = CHANGE("Olá Mundo", "Mundo", "Mainframe")
/* = "Olá Mainframe" */

💼 Exemplo REAL no mainframe:

rexx
/* ANALISA_JOB.rex - Analisa saída de job */
saida = "JOB1234 ENDED OK - 00:05:23 EXECUTION" 
/* Suponha que isso veio de um arquivo de log */

/* Extrai informações */
IF POS('ENDED OK', saida) > 0 THEN DO
  /* Encontra tempo de execução */
  pos_inicio = INDEX(saida, '00:')
  tempo = SUBSTR(saida, pos_inicio, 8)
  
  /* Extrai número do job */
  primeiro_espaco = INDEX(saida, ' ')
  job_num = SUBSTR(saida, 1, primeiro_espaco-1)
  
  SAY 'Job' job_num 'concluído com sucesso!'
  SAY 'Tempo de execução:' tempo
END ELSE DO
  SAY 'Job não concluído corretamente'
  SAY 'Status:' WORD(saida, 3)
END

📊 Processando múltiplas linhas:

rexx
/* Processa lista de datasets */
datasets = "USER.DATA.CLIENTES",
           "USER.DATA.VENDAS",
           "USER.DATA.PRODUTOS"

DO i = 1 TO WORDS(datasets)
  dsname = WORD(datasets, i)
  
  /* Extrai último componente */
  ultimo_ponto = LASTPOS('.', dsname)
  tipo = SUBSTR(dsname, ultimo_ponto + 1)
  
  SAY 'Dataset' i ':' tipo '->' dsname
END

🎁 BÔNUS: Funções úteis pouco conhecidas:

rexx
/* SPACE - Controla espaços entre palavras */
compacto = SPACE("REXX    no   mainframe", 1)

/* COPIES - Repete strings */
separador = COPIES('-', 30)  /* 30 traços */

/* DATATYPE - Verifica tipo */
SAY DATATYPE("123")   /* = NUM */
SAY DATATYPE("ABC")   /* = CHAR */
SAY DATATYPE(" ")     /* = BLANK */

CTA: 📚 Material completo com TODAS as funções nos comentários!