Public Function StringSplit(ByVal SplitString As String, Optional ByVal Delimiter As String = ",") As Double()
' splitta una stringa in tokens separati dal delimitatore specificato
' ?sensibile alla presenza di stringhe nella SpliString, per cui i delimitatori
' presenti dentro a "..." non vengono considerati validi
Dim SLen As Long, nTokens As Long
Dim MaskStr() As Byte
Dim i As Long, k As Long, j As Long, z As Long
Dim retval() As Double
SLen = Len(SplitString)
If SLen > 0 Then
ReDim MaskStr(1 To SLen)
' RICERCA DOPPI APICI
i = 0
k = 0
Do
i = InStr(i + 1, SplitString, Chr(34))
If k = 0 Then
k = i
Else
If i = 0 Then ' fino alla fine della stringa
z = SLen
Else
z = i
End If
For j = k To z
MaskStr(j) = 1
Next j
k = 0
End If
Loop Until i = 0
' splittaggio vero e proprio
ReDim retval(0 To SLen - 1) As Double ' dimesioni massime possibili
nTokens = 0
i = 0
k = 1
Do
i = InStr(i + 1, SplitString, Delimiter)
If i > 0 Then
If MaskStr(i) = 0 Then ' delimitatore valido
retval(nTokens) = CDbl(Trim(Mid$(SplitString, k, i - k)))
nTokens = nTokens + 1
k = i + 1
End If
Else
If k > 0 Then ' fino alla fine - ultimo token
retval(nTokens) = CDbl(Trim(Mid$(SplitString, k)))
nTokens = nTokens + 1
k = 0
End If
End If
Loop Until i = 0
ReDim Preserve retval(0 To nTokens - 1) As Double