Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
isaiasdd
Contributor

Procurar valor dentro de palavra com valor em array

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?

1 Solution

Accepted Solutions
rvsilvestre
Contributor III

Re: Procurar valor dentro de palavra com valor em array

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

6 Replies
rvsilvestre
Contributor III

Re: Procurar valor dentro de palavra com valor em array

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

isaiasdd
Contributor

Re: Procurar valor dentro de palavra com valor em array

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!

rvsilvestre
Contributor III

Re: Procurar valor dentro de palavra com valor em array

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.

Employee
Employee

Re: Procurar valor dentro de palavra com valor em array

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

isaiasdd
Contributor

Re: Procurar valor dentro de palavra com valor em array

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

rvsilvestre
Contributor III

Re: Procurar valor dentro de palavra com valor em array

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