1. Funções básicas — LENGTH, SUBSTR, POS

FunçãoO que fazExemploResultado
LENGTH(s)Comprimento da stringLENGTH('ABC')3
SUBSTR(s,n,len)Extrai substringSUBSTR('ABCDE',2,3)BCD
POS(sub,s)Posição de substringPOS('B','ABCD')2
LASTPOS(sub,s)Última ocorrênciaLASTPOS('.','a.b.c')4
INDEX(s,sub)Alias de POSINDEX('ABCD','BC')2
COPIES(s,n)Repete string n vezesCOPIES('-',20)--------------------
/* Exemplos práticos */ DSN = 'USUARIO.DADOS.CLIENTES' /* Extrair o HLQ (tudo antes do primeiro ponto) */ PONTO = POS('.', DSN) HLQ = SUBSTR(DSN, 1, PONTO - 1) SAY HLQ /* Saída: USUARIO */ /* Extrair o último qualificador */ ULTIMO_PONTO = LASTPOS('.', DSN) ULTIMO = SUBSTR(DSN, ULTIMO_PONTO + 1) SAY ULTIMO /* Saída: CLIENTES */ /* Verificar se dataset começa com prefixo */ IF POS('PROD.', DSN) = 1 THEN SAY 'É dataset de produção'

2. Transformação — STRIP, TRANSLATE, REVERSE

FunçãoO que fazExemploResultado
STRIP(s)Remove espaços iniciais e finaisSTRIP(' AB ')AB
STRIP(s,'L')Remove só à esquerdaSTRIP(' AB ','L')AB
STRIP(s,'T')Remove só à direitaSTRIP(' AB ','T') AB
TRANSLATE(s)Converte para maiúsculoTRANSLATE('abc')ABC
TRANSLATE(s,out,in)Substitui caracteresTRANSLATE('a-b','_','-')a_b
REVERSE(s)Inverte a stringREVERSE('ABCD')DCBA
SPACE(s,n)Normaliza espaços entre palavrasSPACE('A B C')A B C
/* Casos de uso comuns */ /* Normalizar entrada do usuário */ PULL ENTRADA ENTRADA = STRIP(ENTRADA) /* remove espaços extras */ /* Substituir pontos por hífens num nome de dataset */ DSN_NORM = TRANSLATE(DSN, '-', '.') /* 'USUARIO.DADOS.SEQ' → 'USUARIO-DADOS-SEQ' */ /* Linha separadora decorativa */ SAY COPIES('=', 50)

3. Funções de palavras — WORD, WORDS, WORDPOS

O REXX trata strings como sequências de palavras separadas por espaços. Esse modelo é especialmente útil para processar saída de comandos TSO, que costuma vir em formato de texto com palavras separadas por espaços:

FunçãoO que fazExemploResultado
WORDS(s)Número de palavrasWORDS('A B C')3
WORD(s,n)n-ésima palavraWORD('A B C',2)B
WORDPOS(w,s)Posição de uma palavraWORDPOS('B','A B C')2
SUBWORD(s,n,len)Extrai n palavras a partir da posição nSUBWORD('A B C D',2,2)B C
DELWORD(s,n,len)Remove palavras da stringDELWORD('A B C',2,1)A C
/* Processar linha de status de job TSO: "JOB CALCJOB (JOB01234) ON OUTPUT QUEUE" */ LINHA = 'JOB CALCJOB (JOB01234) ON OUTPUT QUEUE' JOBNOME = WORD(LINHA, 2) /* CALCJOB */ JOBID = WORD(LINHA, 3) /* (JOB01234) */ STATUS = SUBWORD(LINHA, 4) /* ON OUTPUT QUEUE */ SAY 'Job:' JOBNOME 'Status:' STATUS

4. Alinhamento — LEFT, RIGHT, CENTER

Funções de alinhamento são essenciais para gerar relatórios formatados com colunas alinhadas:

SAY LEFT('NOME', 20)||RIGHT('VALOR', 12) SAY COPIES('-', 32) SAY LEFT('Maria Santos', 20)||RIGHT('4500.00', 12) SAY LEFT('João Silva', 20)||RIGHT('3200.00', 12) /* Saída: NOME VALOR -------------------------------- Maria Santos 4500.00 João Silva 3200.00 */ /* CENTER — centralizar título */ SAY CENTER('RELATÓRIO MENSAL', 60, '=') /* Saída: ===================RELATÓRIO MENSAL=================== */

5. Data e hora — DATE, TIME

ChamadaResultado exemploFormato
DATE()17 Jun 2026Padrão (DD Mmm YYYY)
DATE('S')20260617Sorted (AAAAMMDD)
DATE('U')06/17/26USA (MM/DD/AA)
DATE('E')17/06/26European (DD/MM/AA)
DATE('O')26/06/17Ordered (AA/MM/DD)
TIME()14:35:22HH:MM:SS
TIME('S')52522Segundos desde meia-noite
/* Gerar nome de arquivo com timestamp */ DATAHORA = DATE('S') || TRANSLATE(TIME(), '', ':') DSN_LOG = 'USUARIO.LOG.D' || DATAHORA SAY DSN_LOG /* Ex: USUARIO.LOG.D20260617143522 */ /* Calcular diferença de tempo (em segundos) */ INICIO = TIME('S') /* ... processamento ... */ FIM = TIME('S') SAY 'Duração:' FIM - INICIO 'segundos'

6. Funções numéricas — DATATYPE, FORMAT, ABS

FunçãoO que fazExemploResultado
DATATYPE(s)Retorna 'NUM' ou 'CHAR'DATATYPE('123')NUM
DATATYPE(s,'N')Verifica se é numérico (1=sim)DATATYPE('12X','N')0
ABS(n)Valor absolutoABS(-42)42
MAX(a,b,...)Maior valorMAX(3,7,2)7
MIN(a,b,...)Menor valorMIN(3,7,2)2
FORMAT(n,b,a)Formata número com casasFORMAT(3.1415,4,2) 3.14
/* Validar entrada numérica antes de operar */ SAY 'Digite um valor:' PULL VALOR IF \DATATYPE(VALOR, 'N') THEN DO SAY 'Erro: valor não numérico' EXIT 8 END SAY 'Valor formatado:' FORMAT(VALOR, 10, 2)