Code archives/Miscellaneous/Blitz3D Split String Function
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Here is are split function in Blitz3D ... not sure if it's "fast" but it works. fn_Split(ls_Strng$, ls_Split$, lb_Flush) : This function splits a string based on a delimiter (ls_Split). The delimiter can be any length greater than Zero. The variable lb_Flush (True/False) can be set to true to delete the current colection of objects holding elements of previously split strings.(Type t_StrAry) fn_ToDim() : This function converts the collection of objects into the global array gs_StrAr(n) where n is the number of objects in the collection and each element within gs_StrAr() is populated with its corresponding element value ( See TEST TWO at the bottom of the CODE example) fn_Flush() : the Function Deletes all t_StrAry Objects in the collection. fi_UBound() : Returns the highest t_StrAry Position in the collection. (Starting from 0) fs_GetEl(li_Elemt) : This function takes an integer as an ID number and returns the string value of the t_StrAry object in the collection with the corresponding i_Pos value. _ | |||||
;******************************************************************************** ;---------;---------;---------;---------;---------;---------;---------;---------; ; Dim gs_StrAr$(1) ; ; ;---------------------------------------------------------------------- ; ; Type t_StrAry ; ; Field i_Pos ; Field s_Val$ ; ; End Type ; ; ;---------------------------------------------------------------------- ; ; Function fn_Split(ls_Strng$, ls_Split$, lb_Flush ) ; ; Local li_sPos = 1 ; Local li_ePos = 0 ; Local ls_Token$ = "" ; Local tmp.t_StrAry = Last t_StrAry ; Local li_TknCt = 0 ; Local li_SplLn = Len(ls_Split) ; Local li_StrLn = Len(ls_Strng) ; ; If lb_Flush Then ; ; fn_Flush() ; ; ElseIf tmp <> Null Then ; ; li_TknCt = tmp\i_Pos +1 ; ; EndIf ; ; ; If Right(ls_Strng,li_SplLn) <> ls_Split Then ; ; ls_Strng = ls_Strng + ls_Split ; ; EndIf ; ; Repeat ; ; li_ePos = Instr(ls_Strng,ls_Split,li_sPos) ; ls_Token = Mid( ls_Strng, li_sPos, li_ePos - li_sPos ) ; ; n.t_StrAry = New t_StrAry ; n\i_Pos = li_TknCt ; n\s_Val = ls_Token ; ; li_TknCt = li_TknCt + 1 ; li_sPos = li_ePos + li_SplLn ; ; Until li_sPos > li_StrLn ; ; End Function ; ; ;---------------------------------------------------------------------- ; ; Function fn_Flush() ; ; For s.t_StrAry = Each t_StrAry ; ; Delete s ; ; Next ; ; End Function ; ; ;---------------------------------------------------------------------- ; ; Function fi_UBound() ; ; Local Tmp.t_StrAry = Last t_StrAry ; ; Return Tmp\i_Pos ; ; End Function ; ; ;---------------------------------------------------------------------- ; ; Function fn_ToDim() ; ; Local tmp.t_StrAry = Last t_StrAry ; Local li_Count = tmp\i_Pos + 1 ; Local li_tPos = 0 ; ; Dim gs_StrAr$(li_Count) ; ; For s.t_StrAry = Each t_StrAry ; ; gs_StrAr(li_tPos) = s\s_Val ; li_tPos = li_tPos + 1 ; ; Next ; ; End Function ; ; ;---------------------------------------------------------------------- ; ; Function fs_GetEl$(li_Elemt) ; ; Local tmp.t_StrAry = Last t_StrAry ; Local li_LastEl = tmp\i_Pos ; ; If li_Elemt <= li_LastEl Then ; ; For s.t_StrAry = Each t_StrAry ; ; If s\i_Pos = li_Elemt Then ; ; Return s\s_Val ; ; EndIf ; ; Next ; ; Return "" ; ; Else ; ; Return "" ; ; EndIf ; ; End Function ; ; ;---------;---------;---------;---------;---------;---------;---------;---------; ;******************************************************************************** ;---------;---------;---------;---------;---------;---------;---------;---------; ;---- TEST ONE ----; Cls Locate 0, 0 Input("Press Enter to execute TEST ONE...") Print Print "Test One" Print fn_Split("11;12;13;14;15;16;17;18;19;20;" , ";" , True ) fn_ToDim() Print "Element #9 After Array Conversion:" + gs_StrAr(9) Print Print Input("TEST ONE COMPLETE") ;---------;---------;---------;---------;---------;---------;---------;---------; ;---- TEST TWO ----; Cls Locate 0, 0 Input("Press Enter to execute TEST TWO...") Print Print "Test Two" Print fn_Split("100;200;3000000;40;cool beans!",";",False) For x.t_StrAry = Each t_StrAry Print RSet(x\i_Pos,4) + " :" + x\s_Val Next Print Print "UBound is :" + fi_UBound() Print "Element #2 from Stack :" + fs_GetEl(2) Print fn_ToDim() Print "Element #2 from Array after Conversion :" + gs_StrAr(2) Print Print Input("TEST TWO COMPLETE [Enter to EXIT]") ;---------;---------;---------;---------;---------;---------;---------;---------; End |
Comments
None.
Code Archives Forum