Code archives/Miscellaneous/Split Function
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| ;Usage Example: s.StringArray = Split("Eyore/Heffalumps//Piglet", "/") For i = 1 To s\Count Print sa_Get(s, i) Next ;======================== ---Output--- Eyore Heffalumps Piglet ========================================================= The code also implements a useful StringArray object with methods: sa_Append (adds to the end of an array) sa_Get (gets the value of specified element) sa_Destroy (destroys the whole array) sa_Find (gets the specified element) | |||||
Type StringArray
Field Value$
Field FirstElement.StringArray
Field NextElement.StringArray
Field PrevElement.StringArray
Field Count%
End Type
Function Split.StringArray(sVal$, sSep$)
s.StringArray = New StringArray
If sVal = "" Then
Return s
End If
While Len(sVal) > 0
i% = Instr(sVal, sSep)
If i = 0 Then
sa_Append s, sVal
sVal = ""
Else
sa_Append s, Left(sVal,i-1)
sVal = Mid(sVal, i+Len(sSep))
End If
Wend
Return s
End Function
Function sa_Append(s.StringArray, sVal$)
If s=Null Then Return
If s\FirstElement = Null Then
s\Count = 1
s\FirstElement = s
s\Value = sVal
;DebugLog "sa_Append, Appended:" + sVal
Return
End If
If s\NextElement = Null
s\count = s\count + 1
s\NextElement = New StringArray
s\NextElement\count = 1
s\NextElement\PrevElement = s
s\NextElement\FirstElement= s\FirstElement
s\NextElement\Value = sVal
;DebugLog "sa_Append, Appended:" + sVal
Else
s\count = s\count + 1
sa_Append(s\NextElement , sVal)
End If
End Function
Function sa_Count%(s.StringArray)
If s = Null Then Return 0
Return s\FirstElement\Count%
End Function
Function sa_Find.StringArray(s.StringArray, index%)
If s = Null Then Return Null
If index < 1 Then Return Null
If index = 1 Then Return s
Return sa_Find(s\NextElement, index-1)
End Function
Function sa_Get$(s.StringArray, index%)
If s = Null Then Return ""
s = s\FirstElement
s = sa_Find(s, index)
If s<>Null Then Return s\Value
End Function
Function sa_Destroy(s.StringArray)
If s = Null Then Return
If s\FirstElement = Null Then
;DebugLog "sa_Destroy, Deleted: " + s\Value
Delete s
Return
End If
If s\NextElement = Null Then
s = s\PrevElement
;DebugLog "sa_Destroy, Deleted: " + s\NextElement\Value
Delete s\NextElement
sa_Destroy s
Else
s = s\FirstElement
s\FirstElement = Null
sa_Destroy sa_Find(s, s\Count)
End If
End Function |
Comments
None.
Code Archives Forum