Funcao - string tokenizer

Top  Previous  Next

Question/Problem/Abstract:

 

The following procedure acts similar to strtok in C++. Call it once with your string (S), and then everytime you call it from there on out, you can break your string apart with tokens! Included is a function StrMid() and an overload for StrMid that simulate the Mid() function in Visual Basic. 

Answer:

 

 

//Declare private string for the unit 

implementation 

var 

 

TokS: string 

 

 

//Function To Get Characters From The String function StrMid(const sData: string; nStart: integer; nLength: integer): string; overload; 

begin 

Result := copy(sData, nStart, nLength); 

end

 

//Function To Get Characters From The String function StrMid(const sData: string; nStart: integer): string; overload; 

begin 

 

Result := copy(sData, nStart, Length(sData) - (nStart - 1)); 

end

 

//String Tokenizer function 

function StrTok(S: string; Tok: string = ''): string; 

var 

 

i, 

LenTok: integer; 

 

begin 

 

if not(S = '') then begin //New String 

 

TokS := S; 

result := ''

Exit

 

end

 

if Tok = '' then begin //If No Token 

 

result := TokS; 

Exit

 

end

 

LenTok := Length(Tok); 

for i := 0 to Length(TokS) - LenTok do begin 

 

if StrMid(TokS, i, LenTok) = Tok then begin //If Token Found 

 

result := StrMid(TokS, 1, i - LenTok); 

TokS := StrMid(TokS, i + LenTok + 1); 

Exit

 

end

 

end

 

//If Program Reaches Here, Return The Rest Of The String 

result := TokS; 

TokS := ''

 

end

 

 

Therefore, for example, if you defined a string: 

var 

 

S: string 

 

 

and set S to 'Hello World' 

 

S := 'Hello World'

 

 

and then call StrTok() like so: 

 

StrTok(S); 

 

The procedure will store the string, from now on, calling StrTok() with no S value and a token (such as a space ' '), the program will return everything in the string up to the token. 

 

EX: 

var 

 

firstWord, 

secondWord: string 

 

 

begin 

 

 

StrTok(S); 

firstWord := StrTok(''' '); 

secondWord := StrTok(''' '); 

 

end

 

//Doing this will break apart the string S at the token (' ') into the first word and the second word. 

 

 

Good luck!