1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Duvida Função Explode

Discussão em 'Progress 4GL' iniciado por ueluis, Maio 28, 2019.

  1. ueluis

    ueluis Membro Participativo

    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?
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    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.
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    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.
    
  4. ueluis

    ueluis Membro Participativo

    obrigado pela resposta, vou testar!

Compartilhe esta Página