https://foro.gambas-es.org/viewtopic.php?f=5&t=1002&p=5598#p5598
-----------------------------------
jsbsan
Sabado, 09 Octobre 2010, 12:35

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 "


[b]¡que bueno es el código libre!, todos aprendemos de todos y al final salen cosas muy útiles... :mryellow: [/b]

Quedaria asi:

[code linenumbers=false syntax=gambas]
' 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



[/code]


Saludos


