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
Extraer emails de un texto [SOLUCIONADO]
Objetivo: Extraer emails de un texto [SOLUCIONADO]
última edición por TrueneX el Viernes, 08 Octobre 2010, 22:54; editado 1 vez
última edición por TrueneX el Viernes, 08 Octobre 2010, 22:54; editado 1 vez
Objetivo: 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
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
Objetivo: 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
Gracias man
Saludos
Objetivo: Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean
última edición por soplo el Viernes, 08 Octobre 2010, 19:18; editado 1 vez
Hola
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
Y para usarla
Esta función no considera el caso de que no haya ningún email.
Citar:
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
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
Objetivo: 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:
y un pantallazo de como lo resuelve:
Saludos
- 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
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:
Saludos
Objetivo: Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean
última edición por TrueneX el Viernes, 08 Octobre 2010, 23:27; editado 1 vez
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
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
Objetivo: Re: [Consulta]Verificar Texto / Retorno De String Y No Boolean [SOLUCIONADO]
última edición por soplo el Sabado, 09 Octobre 2010, 02:36; editado 1 vez
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 #
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
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
Objetivo: Re: Extraer Emails De Un Texto [SOLUCIONADO]
última edición por jsbsan el Sabado, 09 Octobre 2010, 12:37; editado 1 vez
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:
Saludos
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
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
última edición por jsbsan el Sabado, 09 Octobre 2010, 12:37; editado 1 vez
Página 1 de 1
No puede crear mensajesNo 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
Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.
Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo
Página generada en:: 0.5116s (PHP: -61% SQL: 161%)
Consultas SQL: 50 - Debug off - GZIP Activado