Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Extraer emails de un texto [SOLUCIONADO]
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Extraer emails de un texto [SOLUCIONADO] 
 
Buenas, estoy haciendo una aplicacion para extraer mails... pero tengo un problemin,  a la hora de revisar en un texto en busca de emails no encuentro una funcion que devuelva el valor string (el email)  sino que todas devuelven boolean (InStr,LIKE,Etc) es decir (True/1 o False/0) no si alguien ya estubo mirando com ohacerlo o alguein tiene una idea de como lograr esto? la idea es obtenerlo en una variable (no en un archivo) ya que luego con un bucle voy lsitando todos los correos de ese texto...   si me explique mal por favor avisen y explico mejor  si puedo

Saludos
 



 
última edición por TrueneX el Viernes, 08 Octobre 2010, 22:54; editado 1 vez 
TrueneX - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean 
 
Echale un vistazo a esta documentacion de la orden Mid$

Yo lo haria de la siguiente manera:
Buscaría todas las @ que tengas el texto, (con un bucle For.... Next) y vas examinando cada caracter de la cadena y si es igual a @ guardas la posición que este  en un array.

Luego para cada posición que hayas encontrado tendras que buscar las direcciones:
Seguramente los correos estarán separados por algún caracter "(" ,")", "<",">" o espacios
Con cada  posición que te ha dado las busqueda (@), buscar hacia la derecha el caracter ")" , ">" o espacio
y hacia la izquierda "(" , "<", o espacio.

Tendras ya la posicion izquierda y posicion derecha de cada direccion, lo extraes con Mid$(texto_analizado,posicion_izquierda,posicion_derecha)

¿entiendes el procedimiento?

Espero haberte ayudado.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean 
 
si eso lo lei por ahi sacando las posiciones ...  pero como vi el proceso mas complicado queria ver si habia alguna fomra mas simple , pero en fin ... lo voy a probar a ver que onda , si alguien save algun otro ejemplo , bienvenido sea


Gracias man


Saludos
 



 
TrueneX - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean 
 
Hola

Citar:
a la hora de revisar en un texto en busca de emails no encuentro una funcion que devuelva el valor string (el email)


private function EstraerEmail(Texto as string) as string
Dim PartesEmail as string[], Partes as string[]
Dim Email as string

PartesEmail=split(Texto,"@")
'ahora en PartesEmail[0] tienes todo lo anterior a la @ es decir, basura y el usuario
'en PartesEmail[1] tienes el dominio y basura.

Para obtener el usuario hay que buscar la posición del último espacio. Todo lo que haya desde esa posición en adelante es el usuario.

Partes=split(PartesEmail[0]," ")
Con esto cojo la primera parte (donde está la basura y luego el usuario) y divido por espacios. El último item es el usuario

Email=Partes[Partes.max] & "@" 'con esto ya tengo el usuario y la arroba. Ahora obtener el dominio.

Para obtener el dominio divido la segunda parte por espacios y el primer item es el dominio
Partes=split(PartesEmail[1]," ")
Email &= Partes[0]

Osea, imagina un texto "hola que tal y tal y tal"
Al dividir por @ obtengo (PartesEmail=split(texto,"@")
PartesEmail[0]="Hola que tal nombre"
PartesEmail[1]="dominio.com y tal y tal"

Ahora de PartesEmail[0] busco el último espacio y todo lo siguiente es el usuario. Lo mas fácil dividir por espacios y quedarme con el último item (partes=split(PartesEmail[0]," ") y obtengo:

Partes[0]="Hola"
Partes[1]="que"
Partes[2]="tal"
Partes[3]="nombre"
Me quedo con el último para sabe el usuario

El email ya será Partes[3] & "@

Para saber el dominio cojo PartesEmail[1] y lo primero es el dominio. Lo que hago es dividir por espacios Partes=split(PartesEmail[1]," "). Al hacerlo obtengo
Partes[0]="dominio.com"
Partes[1]="y"
Partes[2]="tal"
...

En definitiva la función es
private function EstraerEmail(Texto as string) as string
Dim PartesEmail as string[], Partes as string[], Usuario as string, Dominio as string
Dim Email as string

PartesEmail=split(Texto,"@")
Partes=split(PartesEmail[0]," ")
Usuario=Partes[Partes.max]

Partes=split(PartesEmail[1]," ")
Dominio=Partes[0]

Email=Usuario & "@" & Dominio
return Email
end


Y para usarla
Email=ExtraerEmail(texto.text)


Esta función no considera el caso de que no haya ningún email.

 
 



 
última edición por soplo el Viernes, 08 Octobre 2010, 19:18; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean 
 
El codigo de Soplo esta muy bien, y lo he mejorado un poco.
- Detecta si no hay correos en el texto
- Y usa un array ( email[] ) por si el texto contiene más de un correo, haciendo que la función  ExtraerEmail  devuelva ese array o matriz.

Te paso el codigo, he creado un textArea (llamado TextAreaAnalizar), un Listbox (llamada ListBoxCorreos) y un boton (llamado ButtonBuscar)

Te adjunto el código:
' gambas class file
PUBLIC FUNCTION ExtraerEmail(Texto AS String) AS String[]
DIM PartesEmail AS NEW string[], Parteusuario AS NEW string[], partedominio AS NEW String[], Email AS NEW String[]
DIM a AS Integer

PartesEmail = Split(" " & Texto & " ", "@")

IF Len(partesemail[0]) = (Len(texto) + 2) THEN
Message.Info("no hay direcciones de correo en el texto")
RETURN email
ENDIF

'redimensiona los arrays segun las partes obtenidas -1
email.Resize(PartesEmail.count - 1)
parteusuario.resize(PartesEmail.count - 1)
partedominio.resize(partesemail.count - 1)

'busca las partes de usuario y dominio de cada @ encontrada
FOR a = 0 TO partesemail.count - 2 STEP 1
parteusuario[a] = Mid$(partesemail[a], RInStr(PartesEmail[a], " ") + 1, Len(partesemail[a]) - InStr(PartesEmail[a], " "))

partedominio[a] = Mid$(partesemail[a + 1], 1, InStr(PartesEmail[a + 1], " ") - 1)

email[a] = parteusuario[a] & "@" & partedominio[a]
NEXT

'devuelve el array email[]
RETURN Email
END




PUBLIC SUB ButtonBuscar_Click()
DIM email AS NEW String[]
DIM a AS Integer
ListBoxCorreos.Clear()

Email = ExtraerEmail(TextAreaAnalizar.text)

FOR a = 0 TO email.Count - 1
ListBoxCorreos.Add(email[a])
NEXT

END


y un pantallazo de como lo resuelve:
 pantallazo_1286568322_539525

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean 
 
Joya gracias por la ayuda , tema resuelto

PD: y si los correos estan en por ejemplo un documendo .sql , los correos no van a estar separados por espacios... sino por comillas simples, dobles ,? ya cambiaria todo el code ... pero buen ome pogno a investigar
 



 
última edición por TrueneX el Viernes, 08 Octobre 2010, 23:27; editado 1 vez 
TrueneX - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean [SOLUCIONADO] 
 
Sugiero que el código de jsbsan se ponga como fragmentos de código en el foro correspondiente.

 


Ya que dices que no siempre el delimitador será el espacio para tus fines realizo un pequeño cambio en la función que puse (por simplificar, la de jsbsan está mejor) para que valga con cualquier delimitador que quieras usar.


private function EstraerEmail(Texto as string, Optional Delimitador as string) as string
Dim PartesEmail as string[], Partes as string[], Usuario as string, Dominio as string
Dim Email as string

if not Delimitador then
   Delimitador=" "
endif

PartesEmail=split(Texto,"@")
Partes=split(PartesEmail[0],Delimitador)
Usuario=Partes[Partes.max]

Partes=split(PartesEmail[1],Delimitador)
Dominio=Partes[0]

Email=Usuario & "@" & Dominio
return Email
end


Tal y como está ahora la función puedes opcionalmente incluir como parámetro el delimitador que quieres usar. Si no dices nada usa el espacio y hace lo mismo que antes. Si especificas uno entonces se usa ese.

Para usarlo
Email=ExtraerEmail(texto.text) 'esto busca email delimitado por espacios
Email=ExtraerEmail(Texto.text," ") 'esto también busca email delimitado por espacios
Email=ExtraerEmail(Texto.text,"'") esto busca email delimitados por comita
Email=ExtraerEmail(Texto.text,"""") esto busca email delimitados por doble comilla (creo que es así como se entrecomilla una comilla pero no estoy seguro).
Email=ExtraerEmail(Texto.text,"#") esto busca email delimitado por #

 
 



 
última edición por soplo el Sabado, 09 Octobre 2010, 02:36; editado 1 vez 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Extraer Emails De Un Texto [SOLUCIONADO] 
 
Ok, Soplo,  le añado tu mejora de "delimitador", pero direfenciando dos delimitadores inicial y final, por si el correo esta asi: <direccion@hotmai.com> en vez de usar "direccion@hotmial.com", para ya hacerlo mas generalizado...

Ademas el tema de """" (doble comilla), creo que es mejor usar chr$(34), que te genera las "


¡que bueno es el código libre!, todos aprendemos de todos y al final salen cosas muy útiles...

Quedaria asi:

' gambas class file
PUBLIC FUNCTION ExtraerEmail(Texto AS String, OPTIONAL DelimitadorInicial AS String, OPTIONAL DelimitadorFinal AS String) AS String[]
'Para usarlo
'Email=ExtraerEmail(texto.text) 'esto busca email delimitado por espacios
'Email=ExtraerEmail(Texto.text," ") 'esto también busca email delimitado por espacios'
'Email=ExtraerEmail(Texto.text,"'") esto busca email delimitados por comita
'Email=ExtraerEmail(Texto.text,chr$(34)) esto busca email delimitados por doble comilla (creo que es así como se entrecomilla una comilla pero no estoy seguro).
'Email=ExtraerEmail(Texto.text,"#") esto busca email delimitado por #
'Email=ExtraerEmail(Texto.text,"<",">") esto busca email delimitado que este delimitado  al inicio por < y al final >

DIM PartesEmail AS NEW string[], Parteusuario AS NEW string[], partedominio AS NEW String[], Email AS NEW String[]
DIM a AS Integer

'comprobaciones de delimitadores
IF NOT Delimitadorinicial THEN
 Delimitadorinicial = " "
 delimitadorfinal = " "
ENDIF

IF NOT DelimitadorFinal THEN
DelimitadorFinal = DelimitadorInicial
ENDIF



PartesEmail = Split(DelimitadorInicial & Texto & DelimitadorFinal, "@")

IF Len(partesemail[0]) = (Len(texto) + 2) THEN
Message.Info("no hay direcciones de correo en el texto")
RETURN email
ENDIF

'redimensiona los arrays segun las partes obtenidas -1
email.Resize(PartesEmail.count - 1)
parteusuario.resize(PartesEmail.count - 1)
partedominio.resize(partesemail.count - 1)

'busca las partes de usuario y dominio de cada @ encontrada
FOR a = 0 TO partesemail.count - 2 STEP 1
parteusuario[a] = Mid$(partesemail[a], RInStr(PartesEmail[a], DelimitadorInicial) + 1, Len(partesemail[a]) - InStr(PartesEmail[a], DelimitadorInicial))

partedominio[a] = Mid$(partesemail[a + 1], 1, InStr(PartesEmail[a + 1], delimitadorfinal) - 1)

email[a] = parteusuario[a] & "@" & partedominio[a]
NEXT

'devuelve el array email[]
RETURN Email
END








PUBLIC SUB ButtonBuscar_Click()
DIM email AS NEW String[]
DIM a AS Integer
ListBoxCorreos.Clear()

Email = ExtraerEmail(TextAreaAnalizar.text, "<", ">")

FOR a = 0 TO email.Count - 1
ListBoxCorreos.Add(email[a])
NEXT

END



 



Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
última edición por jsbsan el Sabado, 09 Octobre 2010, 12:37; editado 1 vez 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Cargar fichero de texto en TextEdit leonel General 2 Sabado, 05 Abril 2014, 08:53 Ver último mensaje
jguardon
No hay nuevos mensajes Extraer Texto De Last (objeto) v3ctor General 1 Jueves, 22 May 2014, 06:06 Ver último mensaje
jguardon
No hay nuevos mensajes Extraer Datos HTML calcena Aplicaciones/Fragmentos de Código 19 Domingo, 10 Febrero 2019, 19:10 Ver último mensaje
razaAztk
No hay nuevos mensajes [SOLUCIONADO] Extraer Propiedades De Un Color Grandamakulo General 10 Miercoles, 04 Septiembre 2019, 08:11 Ver último mensaje
gambafeliz
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron