codice:
Dim intInizio, strProt' variabili globali
' routine trovaInizio
' determina l'inizio dell'url
' riceve da formatUrl stringa (stringa input) e inizio (inizio della ricerca)
' restituisce intInizio (inizio url) e strProt (prefisso da anteporre per costruire l'url se mancante)
Sub trovaInizio(stringa, inizio)
Dim intHttp, intWww, intMail, intSpazio, intEnter, intFtp, intNews
strProt = "" ' azzera la stringa del protocollo
intHttp = inStr(inizio, stringa, "http://") ' determina posizione http://
intWww = inStr(inizio, stringa, "www.") ' determina posizione www.
intMail = inStr(inizio, stringa, "@") ' determina posizione chiocciola
If intMail > 0 Then ' se c'è una chiocciola
intSpazio = inStrRev(stringa, " ", intMail) + 1 ' determina posizione spazio prima della chiocciola
intEnter = inStrRev(stringa, Chr(13), intMail) + 1 'determina posizione ritorno a capo prima della chiocciola
If intSpazio > intEnter Then ' determina inizio effettivo dell'indirizzo email
intMail = intSpazio
Else
intMail = intEnter
End If
End If
intFtp = inStr(inizio, stringa, "ftp://") ' determina posizione ftp://
intNews = inStr(inizio, stringa, "news://") ' determina posizione news://
If intHttp = 0 Or (intWww > 0 And intHttp > intWww) Then ' determina inizio indirizzo http: se non c'è http è la posizione di www.
intInizio = intWww
strProt = "http://" ' e allora aggiunge il protocollo per costruire il link
Else ' altrimenti e' quella di http
intInizio = intHttp
End If
If intMail > 0 And (intInizio = 0 Or intInizio > intMail) Then ' determina inizio del primo indirizzo nella stringa
intInizio = intMail ' mail
strProt = "mailto:" ' aggiunge protocollo
End If
If intFtp > 0 And (intInizio = 0 Or intInizio > intFtp) Then
intInizio = intFtp ' ftp
strProt = "" ' azzera protocollo
End If
If intNews > 0 And (intInizio = 0 Or intInizio >= intNews) Then
intInizio = intNews ' news
strProt = "" ' azzera protocollo
End If
End Sub
' funzione formatUrl
' riceve input (stringa di input)
' restituisce strOutput (stringa con url convertiti)
Function formatUrl(input)
Dim arrCar, strOutput, intFine, cntConta, strUrl
arrCar = Array(Chr(13), ",", ". ", ": ", ";", "!", "? ", "..") ' matrice con i caratteri possibili di fine url, escluso lo spazio di default
strOutput = input ' stringa di output. Inizialmente è uguale a quella di input.
input = input & " " ' aggiunge alla stringa di input uno spazio per gestire il caso in cui non vi siano altri caratteri dopo l'ultimo url
trovaInizio input, 1 ' trova inizio primo indirizzo
Do While intInizio > 0 ' ciclo di controllo stringa input. Prosegue fino a che non ci sono più possibili url
intFine = inStr(intInizio, input, " ") ' determina posizione spazio dopo l'url
For cntConta = 0 to Ubound(arrCar) ' determina fine url effettiva controllando la presenza dei caratteri di fine url possibili
If inStr(intInizio, input, arrCar(cntConta)) > 0 And intFine > inStr(intInizio, input, arrCar(cntConta)) Then intFine = inStr(intInizio, input, arrCar(cntConta))
Next
strUrl = Mid(input, intInizio, intFine - intInizio) ' estrae l'url
strOutput = Replace(strOutput, strUrl, "" & strUrl & "")
'inserisce il tag <a> nella stringa di output
trovaInizio input, intFine ' trova inizio indirizzi successivi
Loop
formatUrl = strOutput
End Function
e la richiami semplicemente: