Code archives/Algorithms/Tokenize, GetToken, Explode, Implode

This code has been declared by its author to be Public Domain code.

Download source code

Tokenize, GetToken, Explode, Implode by skn32007
Some usefull token related functions for blitzmax
'cache results
Global _lasttokenstring:String
Global _lasttokenarray:String[]

Function _TokenizeNoReturn:Int(nstring:String Var,nsplit:Int=32)
	'this function will take a string and return a token object contianing the tokens
	'check to see if cached token data is still valid
	If _lasttokenstring <> nstring
		'create new
		_lasttokenstring = nstring
		_lasttokenarray = New String[0]
		
		Local temp_i:Int = 0
		Local temp_start:Int = 0
		Local temp_end:Int = 0
		
		For temp_i = 0 Until nstring.length
			If nstring[temp_i] = nsplit Or temp_i = nstring.length - 1
				'set end position
				If temp_i = nstring.length - 1
					temp_end = nstring.length
				Else
					temp_end = temp_i
				End If
				
				'resize the token array
				_lasttokenarray = _lasttokenarray[.._lasttokenarray.length+1]
				
				'fill token data
				_lasttokenarray[_lasttokenarray.length-1] = nstring[temp_start..temp_end]
				
				'update start position
				temp_start = temp_i + 1
			End If
		Next
	End If
End Function

'php style tokenizing functions
Function Implode:String(ntokens:String[],nsplit:Int=32)
	Local temp_token:String
	Local temp_string:String
	
	For temp_token = EachIn ntokens
		If temp_string.length > 0 temp_string :+ Chr(nsplit)
		temp_string :+ temp_token
	Next
	
	Return temp_string
End Function

Function Explode:String[](nstring:String,nsplit:Int=32)
	_TokenizeNoReturn(nstring,nsplit)
	Return _lasttokenarray
End Function

'basic style tokenzing functions
Function Tokenize:String[](nstring:String,nsplit:Int=32)
	_TokenizeNoReturn(nstring,nsplit)
	Return _lasttokenarray
End Function

'universal style tokenzing functions
Function GetToken:String(nstring:String,ntoken:Int,nsplit:Int=32)
	_TokenizeNoReturn(nstring,nsplit)
	If ntoken > _lasttokenarray.length - 1
		Return ""
	Else
		Return _lasttokenarray[ntoken]
	End If
End Function

Function Combine:String(ntokens:String[],nstart:Int,nend:Int=-1,nsplit:Int=32)
	Local temp_start:Int = nstart
	Local temp_end:Int = nend
	Local temp_i:Int
	Local temp_build:String
	
	'fix end for do all
	If nend = -1 nend = ntokens.length-1
	
	'reverse start / end if needed
	If temp_end < temp_start
		temp_end = nstart
		temp_start = nend
	End If
	
	'make sure start is viable
	If temp_start > ntokens.length - 1
		Return ""
	Else
		'make sure end does not go past bounds
		If temp_end > ntokens.length-1 temp_end = ntokens.length - 1
		
		'combine the specified tokens
		For temp_i = temp_start To temp_end
			If temp_build.length >0 temp_build :+ Chr(nsplit)
			temp_build :+ ntokens[temp_i]
		Next
		
		'return
		Return temp_build
	End If
End Function

Comments

None.

Code Archives Forum