Estrazione di stringa

di il
3 risposte

Estrazione di stringa

Ciao a tutti. Ho un problema di questo tipo. Ho un campo "note" di tipo testo che contiene un indirizzo email. La posizione dell'indirizzo è variabile per cui sto provando una funzione che ricerchi all'interno della stringa il carattere @, con un ciclo for next faccio leggere la stringa finchè non incontra uno spazio, imposto questo valore come inizio della stringa che voglio estrarre e come fine impongo la lunghezza della stringa.
Il problema è che il ciclo di risalita individua correttamente la posizione dello spazio ma non si ferma.

Function FilterString1(text As String) As String
Dim inizio, fine, pos As Long, i As Long, result As String

pos = InStr(1, text, "@")

For i = pos To inizio - 1 Step -1
If Asc(Mid$(text, i, 1)) = 32 Then
inizio = i
End If
Next
If i = 1 Then
inizio = 1
End If


For i = pos To Len(text)
If Asc(Mid$(text, i, 1)) = 32 Then
fine = i
End If
Next
If i = Len(text) Then
fine = Len(text)
End If



result = Mid(text, inizio, fine)

FilterString1 = result
End Function

Mi date qualche suggerimento? Grazie. Max.

3 Risposte

  • Re: Estrazione di stringa

    Ciao.
    Scusa, una precisazione:
    Ma l'indirizzo e-mail è l'unica cosa contenuta in questo campo "note" o può trovarsi insieme ad altre parole...?!
  • Re: Estrazione di stringa

    Ciao, prova così:

    Dim ctr As Boolean = False

    For i = pos To Len(text)
    If Asc(Mid$(text, i, 1)) = 32 Then
    fine = i

    ctr = True

    End If

    If ctr Then
    exit For
    End If

    Next
    If i = Len(text) Then
    fine = Len(text)
    End If
  • Re: Estrazione di stringa

    Ok, capisco che l'indirizzo e-mail è all'interno di un testo... Scusate...
    Ma il consiglio dato da Filips, non mi sembra che raggiunga l'obiettivo, cioè di estrapolare da qualunque testo una 'e-mail', infatti c'è solo un ciclo che trova su quale posizione del 'testo' si trova il primo spazio... e poi...?!
    Credo che bisognerebbe fare un ragionamento che porti, anche se pur semplice, ad un algoritmo risolutivo.
    Inzierei con descrivere i passi, senza scriverti il codice, ma per iniziare a ragionare insieme:
    Ammettiamo che le variabili:
    - Note (contiene il testo)
    - Mail (conterrà l'e-mail estrapolata)
    - PosAt (conterrà la posizione di AT = chiocciola)
    - ISx (sarà l'indice che scandirà alla sinistra di @)
    - IDx (sarà l'indice che scandirà alla destra di @)
    - LimSx (conterrà la prima posizione a sinistra della e-mail)
    - LimDx (conterrà l'ultima posizione a destra della e-mail)

    Avremo che la posizione di @
    PosAt = Instr(Note,"@")

    Che se chiaramente = 0 o meglio < 1 - Dirà che NON ci sono indirizzi in quanto NON c'e' una "@"

    poi potremo avere 2 loop di scansione a sinistra e a destra di @ (fino a che troveremo 1 spazio e destra e 1 a sinistra e sommando 1 a sin. e sottraendo 1 a destra, avremo:
    LimSx (primo carattere dell'e-mail) e LimDx (ultimo carattere)
    dopo, puntando al primo per la diff. dei limiti + 1 avremo la substringa estrapolata dal testo contenente l'e-mail, del tipo:
    Mail = Mid(Note,LimSx, LimDx-Limsx+1)

    Però attenzione!!! il programma funzinerebbe solo se l'e-mail si trova nel mezzo a 2 spazi e quindi ha bisogno di una serie di verifiche e parti che controllano/agiscono da Gestire nel caso di:
    - se l'e-mail è l'unica cosa contenuta nel campo Note...?! (NON ci saranno spazi ai lati dell'e-mail e che facciamo ??!!)
    - se l'email è all'inizio o in fondo, avremo lo stesso problema di mancanza dello spazzio in fondo...
    Spero di averti dato un'idea x sviluppare la routine/funzione che ti serve.
    Saluti.
Devi accedere o registrarti per scrivere nel forum
3 risposte