This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.¶
Note: Any required file(s) are available in the attachments tab (top right).
' Subroutine to split a delimited string of characters into individual
' substrings and return those substrings in a string array.
' As you can't pass arrays in MM Basic, the returned array will always
' be named splitup$()
' The program automatically calculates the number of substrings in the string
' and the size of the largest substring, then scales the array accordingly.
' The number of substrings is returned in array position 0 and the maximum
' length of each substring is returned in array position 1
Print "Testing code for split$ subroutine"
Print
Print "Test string is 'abc,defg,hijkl,+123.678,-5' with comma delimiter"
a$="abc,defg,hijkl,+123.678,-5"
Print "Usage is SPLIT$ arg$,delimiter$"
split$ a$,","
Print "The splitup array that is created is a one dimensional array that is "
Print "the number of substrings in the argument string + 2 in depth, "
Print "each of which equals the largest substring in characters long"
Print "Splitup$(0) has the number of substrings extracted in it"
Print "Splitup$(1) is the maximum string length of any substring"
Print "Splitup$(2) through Splitup$(n) contain the delimited substrings"
Print " of the argument string"
Print
Print "Test run"
Print "First substring of argument string at position 2 is ",splitup$(2)
Print "Second substring of argument string at position 3 is ",splitup$(3)
Print "Third substring of argument string at position 4 is ",splitup$(4)
Print "Fourth substring of argument string at position 5 is ",splitup$(5)
Print "Fifth substring of argument string at position 6 is ",splitup$(6)
' End of test code
' SPLIT subroutine
Sub split$(arg1$,arg2$)
' arg1$ is the string to be split
' arg2$ is the delimiter to split on
Local whole$,delim$
Local numels,maxlen,wholelen,ellen
whole$=arg1$
delim$=arg2$
If Instr(whole$,delim$) <> 0 Then
numels = 1 ' delimiter found
maxlen = 1
Do While Instr(whole$,delim$) <> 0 ' now count up elements
ellen = Instr(whole$,delim$)-1 ' and maximum size so we
If ellen > maxlen Then
maxlen = ellen ' can dimension array
EndIf
numels = numels + 1
wholelen = Len(whole$)
whole$ = Right$(whole$,wholelen-(ellen + 1))
Loop
If Len(whole$) > maxlen Then
maxlen = Len(whole$)
EndIf
whole$ = arg1$
Erase Splitup$
Dim splitup$(numels+2) length maxlen
splitup$(0) = Str$(numels)
splitup$(1) = Str$(maxlen)
For x = 2 To numels+1
wholelen = Len(whole$)
If x = numels+1 Then
ellen = Len(whole$)
splitup$(x) = whole$
Else
ellen = Instr(whole$,delim$) - 1
splitup$(x)=Left$(whole$,ellen)
whole$ = Right$(whole$,wholelen-(ellen+1))
EndIf
Next x
Else
Print "Error: No delimiter in string"
EndIf
End Sub