October 28, 2020, 10:40:28 PM

Author Topic: [bmx] Tokenize, GetToken, Explode, Implode by skn3 [ 1+ years ago ]  (Read 1487 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Tokenize, GetToken, Explode, Implode
Author : skn3
Posted : 1+ years ago

Description : Some usefull token related functions for blitzmax

Code :
Code: BlitzMax
  1. 'cache results
  2. Global _lasttokenstring:String
  3. Global _lasttokenarray:String[]
  4.  
  5. Function _TokenizeNoReturn:Int(nstring:String Var,nsplit:Int=32)
  6.         'this function will take a string and return a token object contianing the tokens
  7.         'check to see if cached token data is still valid
  8.         If _lasttokenstring <> nstring
  9.                 'create new
  10.                 _lasttokenstring = nstring
  11.                 _lasttokenarray = New String[0]
  12.                
  13.                 Local temp_i:Int = 0
  14.                 Local temp_start:Int = 0
  15.                 Local temp_end:Int = 0
  16.                
  17.                 For temp_i = 0 Until nstring.length
  18.                         If nstring[temp_i] = nsplit Or temp_i = nstring.length - 1
  19.                                 'set end position
  20.                                 If temp_i = nstring.length - 1
  21.                                         temp_end = nstring.length
  22.                                 Else
  23.                                         temp_end = temp_i
  24.                                 End If
  25.                                
  26.                                 'resize the token array
  27.                                 _lasttokenarray = _lasttokenarray[.._lasttokenarray.length+1]
  28.                                
  29.                                 'fill token data
  30.                                 _lasttokenarray[_lasttokenarray.length-1] = nstring[temp_start..temp_end]
  31.                                
  32.                                 'update start position
  33.                                 temp_start = temp_i + 1
  34.                         End If
  35.                 Next
  36.         End If
  37. End Function
  38.  
  39. 'php style tokenizing functions
  40. Function Implode:String(ntokens:String[],nsplit:Int=32)
  41.         Local temp_token:String
  42.         Local temp_string:String
  43.        
  44.         For temp_token = EachIn ntokens
  45.                 If temp_string.length > 0 temp_string :+ Chr(nsplit)
  46.                 temp_string :+ temp_token
  47.         Next
  48.        
  49.         Return temp_string
  50. End Function
  51.  
  52. Function Explode:String[](nstring:String,nsplit:Int=32)
  53.         _TokenizeNoReturn(nstring,nsplit)
  54.         Return _lasttokenarray
  55. End Function
  56.  
  57. 'basic style tokenzing functions
  58. Function Tokenize:String[](nstring:String,nsplit:Int=32)
  59.         _TokenizeNoReturn(nstring,nsplit)
  60.         Return _lasttokenarray
  61. End Function
  62.  
  63. 'universal style tokenzing functions
  64. Function GetToken:String(nstring:String,ntoken:Int,nsplit:Int=32)
  65.         _TokenizeNoReturn(nstring,nsplit)
  66.         If ntoken > _lasttokenarray.length - 1
  67.                 Return ""
  68.         Else
  69.                 Return _lasttokenarray[ntoken]
  70.         End If
  71. End Function
  72.  
  73. Function Combine:String(ntokens:String[],nstart:Int,nend:Int=-1,nsplit:Int=32)
  74.         Local temp_start:Int = nstart
  75.         Local temp_end:Int = nend
  76.         Local temp_i:Int
  77.         Local temp_build:String
  78.        
  79.         'fix end for do all
  80.         If nend = -1 nend = ntokens.length-1
  81.        
  82.         'reverse start / end if needed
  83.         If temp_end < temp_start
  84.                 temp_end = nstart
  85.                 temp_start = nend
  86.         End If
  87.        
  88.         'make sure start is viable
  89.         If temp_start > ntokens.length - 1
  90.                 Return ""
  91.         Else
  92.                 'make sure end does not go past bounds
  93.                 If temp_end > ntokens.length-1 temp_end = ntokens.length - 1
  94.                
  95.                 'combine the specified tokens
  96.                 For temp_i = temp_start To temp_end
  97.                         If temp_build.length >0 temp_build :+ Chr(nsplit)
  98.                         temp_build :+ ntokens[temp_i]
  99.                 Next
  100.                
  101.                 'return
  102.                 Return temp_build
  103.         End If
  104. End Function


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal