Ir para conteúdo
Entre para seguir isso  
Pedro

Filtrando Informações para Sockets

Recommended Posts

Pedro    1
Pedro

[Tutorial - Filtrando informação]

 

~*Introdução

Percebi que muitas pessoas vem tendo dificuldade a aprender a filtrar informação de um site, utilizando sockets, porisso me veio a idéia de criar um tutorial. Gostaria de lembrar que apenas estou iniciando nesse assunto, mais acho que o que eu sei já pode ajudar algumas pessoas. Nesse tutorial, vamos filtrar informação utilizando Tokens e Expressões Regulares. Dê uma lida em alguns tutoriais para aprender esses assuntos antes de ler meu tutorial, para faciltiar a compreensão. Outro ponto importante, é que nesse tutorial, eu manipulo as informações através de um documento.txt, que é gravado no sockread. Se você escreve seu socket utilizando %var, terá que mudar os $read pela sua %var

 

 

~*Prática

O que acontece, é que muitos tutoriais(até o meu sobre tokens) não conseguem montar a idéia de como ele realmente seria utilizado numa situação. Por isso, nesse tópico, não vou entrar em questões básicas, e sim, realmente na prática.

 

Para começarmos a filtrar a informação, precisamos da linha onde se encontra o que queremos. Para isso, vamos usar um simples $read, com essa sintaxe:

$read(arquivo.txt,w,informação)
Explicando

Em vermelho é bem simples, troque para o nome do arquivo.txt onde se encontra o código fonte do site, puxado pelo sockread.

Em azul, nós colocaremos uma informação que se encontra unicamente nessa linha. Exemplo:

<h1>Nome: Fulano de tal</h1>

<h1>Idade: 32 </h1>

 

Perceba que a uma informação exclusiva dai é o Nome. então, colocaremos esse comando

 

set %linha $read(nomeidade.txt,w,*Nome:*)

Perceba que setei numa váriavel para ser utilizada posteriormente, cuidado para não repitir os nomes de váriaveis!

Ok, agora na nossa váriavel %linha temos esse conteudo:

<h1>Nome: Fulano de tal</h1>

Para remover essas tags html, nós poderiamos utilizar um remove:

$remove(%linha,<h1>,</h1>)

Porém, eu sei que, algumas tags html são extensas, e podem haver muitas num texto. Porisso, é mais fácil filtrar com um $regsubex.

$regsubex(%linha,\<.*?>\g,$null)

Regsubex normalmente é utilizado para substituição, porém eu fiz ele substituir por um $null, ou seja, apaguei a informação. Nesse caso ele remove todo e qualquer coisa que esteja dentro de < e >, inclusive aquilo que não é tag html.

 

Ok, agora vamos simplificar esse código, e colocá-lo numa linha só:

 

set %linha $regsubex($read(nomeidade.txt,w,*Nome:*),\<.*?>\g,$null)

 

Que no nosso caso retornaria apenas:

 

Nome: Fulano de tal

 

Ok, está pronto. Porém, e se eu quisesse deixar o Nome: de uma cor e o Fulano de tal de outra? Existem várias maneiras. Uma delas é dar um $remove no Nome: para depois escrever ele manualmente. Ficaria assim:

 

$remove($read(nomeidade.txt,w,*Nome:*),w,$null),Nome: )

 

Agora vou explicar um modo mais complicado, somente para ilustrar como se usa $regex para filtrar informações. Ele ficaria assim

 

if ($regex(%linha,Nome: (.*?)) { set %linhafinal $regml(1) }

 

Não vou entrar muito a fundo nas ER's, porém, gostaria de explicar que $regml(1) retornaria o primeiro grupo(tudo que está entre parenteses) no nosso caso, exatamente o nome da pessoa.

 

~*Finalizando

Obrigado por ler meu tutorial, espero que tenha gostado, caso tenha algo que complete/corrija meu tutorial ou alguma dúvida, ficarei feliz se a postar aqui no tópico. Obrigado ao Archangel, porque ele me explicou o $regsubex a um tempo atrás. Até mais! (Nota: tive que dar alguns espaçamentos a mais porque senão eles virariam emoticons)

Editado por ΡєĐŕøøø

Compartilhar este post


Link para o post
Compartilhar em outros sites
Archangel    0
Archangel

Bom..

Encontrei um erro :P

Temos em todos os exemplos que você usou $regsubex, você está usando a ER de modo errado.

O correto seria no caso do seu exemplo:

$regsubex(%linha,/<.*?>/g,$null)

 

E não como você estava usando:

$regsubex(%linha,\<.*?>\g,$null)

 

Isso em todos os exemplos usando $regsubex.

 

Espero ter ajudado.

 

 

t+

Archangel~

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pedro    1
Pedro

&Archangel

Certissimo, inclusive tive problemas pra fazer minha função porque usava \\g e não //g, só não corrijo agora porque to de saída. Também vou colocar gettok porque eu nem falei dele.

 

~pedroo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×