Registrado: Noviembre 2009
Mensajes: 9
Edad: 30 Ubicación:
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
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
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)
Registrado: Noviembre 2009
Mensajes: 9
Edad: 30 Ubicación:
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
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
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"
...
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
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)
'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], " "))
Registrado: Noviembre 2009
Mensajes: 9
Edad: 30 Ubicación:
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
Registrado: Septiembre 2009
Mensajes: 843
Edad: 44
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.
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
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
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...
' gambas class file PUBLICFUNCTION ExtraerEmail(Texto ASString, OPTIONAL DelimitadorInicial ASString, OPTIONAL DelimitadorFinal ASString)ASString[] '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 >
'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))
Fecha y hora actual: Viernes, 26 Abril 2024, 09:57 • Todas las horas son UTC + 1 Hora
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
Lista de permisos
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