Ho una stringa in cui alcuni valori sono separati da un ben preciso carattere; c’è un modo efficiente per considerare separatamente ogni valore?

Utente HTML.it
chiede

Ho una stringa in cui alcuni valori sono separati da un ben preciso carattere; c’è un modo efficiente per considerare separatamente ogni valore?

Redazione HTML.it
risponde

Con Visual Basic 6.0 è stato introdotto una nuova
funzione, Split, la quale, presa in ingresso una stringa,
restituisce una matrice contenente le sottostringhe delimitate
dal carattere specificato. La sintassi della funzione
Split è la seguente:

Split(espressione [, delimitatore])

La funzione supporta altri parametri oltre a quelli
presentati; per una spiegazione del loro significato si rimanda
alla Guida in linea di Visual Basic. Qui di seguito è
riportato un esempio del suo utilizzo:

Const Nomi As String = “Marco Andrea Cino Luigi
Leonardo”

Dim Nome() As String, Messaggio As
String

Dim I As Integer

‘Divide i nomi utilizzando lo spazio come
delimitatore.

Nome = Split(Nomi, ” “)

For I = 0 To UBound(Nome)

Messaggio = Messaggio & “Nome ” & I + 1
& “: ” & Nome(I) & vbCrLf

Next I

MsgBox “Lista dei nomi: ” & Nomi & vbCrLf &
vbCrLf & “Nomi separati: ” & vbCrLf & Messaggio,
vbInformation

Nelle versioni di VB precedenti alla 6, invece, la funzione
Split non è presente, tuttavia è possibile
ottenere lo stesso risultato di quest’ultima con una
piccola routine:

Sub Split(ByVal str As String, ByVal Separator As String,
ByRef Splitted() As String, ByRef NumElem As Integer)

‘Divide la stringa in base al separatore
specificato.

Dim PosAttuale As Integer, PosOccorrenza As
Integer

If Right$(str, 1) <> Separator Then str =
str & Separator

Do

PosAttuale = PosOccorrenza + Len(Separator)

PosOccorrenza = InStr(PosAttuale, str,
Separator)

If PosOccorrenza <> 0 Then

ReDim Preserve Splitted(NumElem)

Splitted(NumElem) = Mid$(str, PosAttuale,
PosOccorrenza – PosAttuale)

If NumElem = 0 And Len(Separator) > 1
Then Splitted(NumElem) = Left$(str, Len(Separator) – 1) &
Splitted(NumElem)

NumElem = NumElem + 1

End If

Loop Until PosOccorrenza = 0

End Sub