sexta-feira, 7 de maio de 2010

Kung fu dos textos!

Você deve estar imaginando que raio de titulo é esse! Isso porque você não deve ter muita intimidade com o SplitRegEx, caso contrário o acharia até normal. Diante desse faixa preta, não existe oponente, ele quebra mesmo!

O SplitRegEx é uma função que opera sob a forma de expressão regular que tem por finalidade quebrar um texto do tipo CHARACTER, ele não aceita varchar ou longvarchar, em partes que  normalmente armazenadas em uma Collection. A regra para a quebra é definida por uma expressão que pode ser um ou mais caracteres que simbolizam a separação entre as partes de texto.

Por exemplo, arquivos CSV, separa as partes de um texto por meio de ponto-e-virgula ou qualquer outro caracter. Desta forma a frase a seguir tem um significado de um conjunto de informações separadas pelo mesmo texto.

10;Jose da Silva; Av.Central,10;Santana do Parnaiba;São Paulo

Desta forma essa função é muito útil na sua luta diária com Genexus. E para definir o tatame voce pode criar um WebPanel. E na área de Events programe:

Event Start
     &texto  = "10;Jose da Silva; Av.Central,10;Santana do Parnaiba;São Paulo"
     &itens   =  &teste.SplitRegEx(';')
     for &item in &itens   
             msg(&item)
     endfor
EndEvent

As variáveis podem ser definidas como:

&item  = Character(100)
&itens  = Character(100) - Collection
&texto = Character(200)

O resultado é a quebra do texto nas partes indicadas por ; e a apresentação de cada parte individualmente como uma mensagem.

Observe que em &itens voce terá uma série de informações, tais como o numero de itens, o item corrente navegado, entre outros.

Boa luta!

4 comentários:

Unknown disse...

Add janmarcelo@rpsavi.com.br pra trocarmos figurinhas, sou desenvolvedor GeneXus á 3 anos, e 1 ano e meio com a GeneXus X... abraços, fique com DEUS!

salinorr@gmail.com disse...

Hummm..Legal... Estava lendo um material em Java sobre o método split(). Ele tokeniza os dados a partir de um Pattern, neste caso posso usar expressões regulares com metacaracteres e ainda quantificadores tipo:

"\\d" --> somente dígitos
"\\s" --> espaços em branco
"\\w" --> Caracteres alfanuméricos e hífen
etc...
Quantificadores
* --> 0 e mais ocorrências
+ --> 1 e mais ocorrências
? --> 0 ou 1 ocorrência

Exemplo:

String Texto = "abc1abc1abc1abc"
--> uma forma
texto.split("1")
--> outra forma
texto.split("\\d")


;)

Genexando disse...

Caro Presidente,
Gostei do seu comentário, essa coisa de expressão regular é de outro mundo, e este contribuiu muito na questão.
ab e obrigado

M. Douglas :) disse...

Olá senhores.
Precisei pegar apenas a primeira palavra de uma string e fiz assim:

stringOriginal = "Genexus Genexando Genexecitamos Exemplo bla bla"

Passos:
1° Criei uma coleção tipo LongVarchar: &ColectionString
2° Utilizei o SplitRegEX para carregar a &ColectionString(vai pegar só as palavras, sem espaços):

&ColectionString = stringOriginal .SplitRegEx(" ")

ou:

&ColectionString = stringOriginal .SplitRegEx("\\s")

ColectionString Carregada:
[1]"Genexus",
[2]"Genexando",
[3]"Genexecitamos",
[4]"Exemplo",
[5]"bla",
[6]"bla"

No meu caso como eu queria só a primeira palavra, então fiz assim:

&PrimeiraPalavra = ColectionString.Item(1)

Resultado: "Genexus"

Espero ter ajudado.