6 Replies Latest reply: Sep 21, 2016 4:16 PM by rodrigo silvestre RSS

    Procurar valor dentro de palavra com valor em array

    Isaias Darci

      Em meu script declarei alguns arrays:


      SET vCasoA = 'A', 'B';

      SET vCasoB = 'C', 'D';


      E a minha tabela:


      LOAD

           Palavra,

           Teste

      FROM arquivo.csv;


      O que estou tentando fazer é:

       

      Verificar se o campo Palavra possui valores que estão nesses arrays.

       

      Exemplo:

      Palavra = "Animal" => Preciso verificar se existe existe alguma letra ou trecho na palavra "Animal" que se enquadre em algum Array.

      Neste caso se enquadraria no vCasoA.

       

      Tentei fazer algo com a função "Index", mas não consigo fazer ela percorrer os valores contidos em um array.

       

      Alguma de ideia de como posso fazer isso?

        • Re: Procurar valor dentro de palavra com valor em array
          rodrigo silvestre

          São só letras nesse array() ?   Tem a função PurgeChar() que tbm daria para usar se fosse buscar caracters dentro do campo, mas se for pra busca uma palavra ou conjunto de caracter, dai acho essa função não serviria, teria que ser o index() mesmo e pra fazer percorrer os valores tu pode tentar usar um FOR EACH

            • Re: Procurar valor dentro de palavra com valor em array
              Isaias Darci

              No exemplo usei somente caracteres, mas na verdade poderei ter palavras ou pedaços de palavras. por exemplo 'Ani' ou 'mal'.

               

              Tentei usar o for each mas ao rodar o script ele da erro de syntax, e não consegui descobrir o que tinha de errado.

               

              LOAD

                   Palavra,

                   Teste,

                   For Each valor in $(vCasoA)

                       If(Index(Palavra, valor), 'Caso A') as Tipo

                   Next

              FROM arquivo.csv

               

              ele sublinha a palavra Each e valor de vermelho e o script não roda!

                • Re: Procurar valor dentro de palavra com valor em array
                  rodrigo silvestre

                  o For each tem que ficar fora do LOAD

                   

                  qual é o objetivo final? trazer apenas o que tem no array() ?  Se for isso, tente assim:

                   

                  For Each vCasoA in 'A', 'B','mal','ani'


                       LOAD *

                       FROM arquivo.csv

                       where Index(Palavra, '$(vCasoA)') > 0 ;

                   

                  next


                  Se não for isso, não der certo, poste um qvw de exemplo pra ficar mais fácil de ajudar.

                    • Re: Procurar valor dentro de palavra com valor em array
                      Clever Anjos

                      Coincidentemente hoje eu precisei fazer algo parecido

                      SET Folders = ,- Portinho;

                      For i = 0 to 5

                      For j = 0 to SubStringCount(Folders,',') // Verificando quantos tem

                            Let Folder=SubField(Folders,',',j+1); // Pegando um dos valores

                      • Re: Procurar valor dentro de palavra com valor em array
                        Isaias Darci

                        Rodrigo, o objetivo é criar uma classificação dependendo os valores que tem no array. Por exemplo no Array vCasoA eu tenho 5 valores, e quando for fazer o load a descrição que se encaixar nos valores do array recebe uma classificação tipo CasoA, e assim sucessivamente... no caso eu teria varios arrays não somente um.. eu teria no minimo uns 5 arrays.

                         

                        Vou fazer uns testes com está solução...

                          • Re: Procurar valor dentro de palavra com valor em array
                            rodrigo silvestre

                            Veja se é +- isso que vc precisa:

                             

                            TabArray:

                            LOAD *,

                            SubField(ARRAY,',') AS VALOR_ARRAY

                            Inline [

                            CLASS, ARRAY

                            CasoA, "a,b,cd,dd,de"

                            CasoB, "dce,an1,peg"

                            CasoC, "1ed,eeee,5g4"

                            CasoD, "23d3,we43,4ree" ];

                             

                            TabStrings:

                            load *

                            Inline [

                            TEXTO

                            "gjeksdce"

                            "hsieuhsia"

                            "dorkijdrio1edkofitj"

                            "rjoirsjoa"

                            "sehiuesh23d3hei"

                            "oijeran1ojio" ];

                             

                            FOR vCont = 0 to NoOfRows('TabArray')

                             

                            let vArray = peek('VALOR_ARRAY' , $(vCont) , 'TabArray' ) ;

                            let vClass = peek('CLASS' , $(vCont) , 'TabArray' ) ;

                             

                              tab_final:

                              load

                              TEXTO,

                              '$(vClass)' as CLASSIFICACAO

                              Resident TabStrings WHERE Index(TEXTO, '$(vArray)' ) > 0;

                             

                            next

                             

                            exit Script