Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
isaiasdd
Creator
Creator

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?

Labels (3)
1 Solution

Accepted Solutions
Anonymous
Not applicable

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

View solution in original post

6 Replies
Anonymous
Not applicable

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
Creator
Creator
Author

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!

Anonymous
Not applicable

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.

Clever_Anjos
Employee
Employee

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
Creator
Creator
Author

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

Anonymous
Not applicable

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