Pessoal, tem algum comando nativo do progress para transformar variavel em array? no php basta executar a função explode ( string $delimiter , string $string [, int $limit ] ) : array que ele retorna uma matriz de strings, cada uma como substring de string formada pela divisão dela a partir do delimiter. existe algo similar no progress?
Eu faço usando esse código que desenvolvi, mas hoje em dia prefiro usar string mesmo junto com as funções NUM-ENTRIES e ENTRY. Código: FUNCTION Split RETURNS CHARACTER EXTENT (vTextoEntrada AS CHAR,vSeparador AS CHAR) : DEF VAR vValores AS CHAR EXTENT. DEF VAR idx1 AS INTEGER. DEF VAR PosAtual AS INTEGER. DEF VAR ValInicial AS INTEGER. DEF VAR QtdeCar AS INTEGER. PosAtual = 1. DO WHILE TRUE. PosAtual = INDEX(vTextoEntrada,vSeparador,PosAtual). IF PosAtual = 0 THEN LEAVE. idx1 = idx1 + 1. PosAtual = PosAtual + 1. END. EXTENT(vValores) = idx1 + 1. PosAtual = 1. DO idx1 = 1 TO EXTENT(vValores). IF LENGTH(vSeparador) > 1 THEN ValInicial = (IF PosAtual > 1 THEN PosAtual + (LENGTH(vSeparador) - 1) ELSE PosAtual). ELSE ValInicial = PosAtual. QtdeCar = INDEX(vTextoEntrada,vSeparador,PosAtual) - ValInicial. QtdeCar = (IF QtdeCar < 0 THEN -1 ELSE QtdeCar). ASSIGN vValores[idx1] = SUBSTRING(vTextoEntrada,ValInicial,QtdeCar). PosAtual = INDEX(vTextoEntrada,vSeparador,PosAtual). PosAtual = PosAtual + 1. END. RETURN vValores. /* Function return value. */ END FUNCTION.
Exemplo de uso da função SPLIT acima: Código: ASSIGN Separador = "¶". ASSIGN Teste = "cod-volume|nome-abrev|peso¶" + "INTEGER|STRING|DECIMAL ¶" + "1500|AAA|50,75¶" + "2000|BBB|75,12". Linhas = Split(Teste,Separador). ASSIGN Separador = "|". DO idx = 1 TO EXTENT(Linhas). Celulas = Split(Linhas[idx],Separador). MESSAGE Celulas[1] SKIP Celulas[2] SKIP Celulas[3] VIEW-AS ALERT-BOX INFO BUTTONS OK. END.