1. Home
  2. Computing & Technology
  3. Delphi Programming

Delphi Split / Tokenizer functions

By , About.com Guide

~~~~~~~~~~~~~~~~~~~~~~~~~
unit SplitFns;
interface
uses Classes;

function GetNextToken
   (Const S: string;
   Separator: char;
   var StartPos: integer): String;

{Returns the next token (substring)
from string S, starting at index
StartPos and ending 1 character
before the next occurrence of
Separator (or at the end of S,
whichever comes first).}
{StartPos returns the starting
position for the next token, 1
more than the position in S of
the end of this token}

procedure Split
   (const S: String;
   Separator: Char;
   MyStringList: TStringList) ;

{Splits a string containing designated
separators into tokens and adds
them to MyStringList NOTE: MyStringList
must be Created before being passed to this
procedure and Freed after use}

function AddToken
   (const aToken, S: String;
   Separator: Char;
   StringLimit: integer): String;

{Used to join 2 strings with a
separator character between them and
can be used in a Join function}
{The StringLimit parameter prevents
the length of the Result String
from exceeding a preset maximum}

implementation
Uses Sysutils;

function GetNextToken
   (Const S: string;
   Separator: char;
   var StartPos: integer): String;
var Index: integer;
begin
   Result := '';

{Step over repeated separators}
   While (S[StartPos] = Separator)
   and (StartPos <= length(S))do
    StartPos := StartPos + 1;

   if StartPos > length(S) then Exit;

{Set Index to StartPos}
   Index := StartPos;

{Find the next Separator}
   While (S[Index] <> Separator)
   and (Index <= length(S))do
    Index := Index + 1;

{Copy the token to the Result}
   Result := Copy(S, StartPos, Index - StartPos) ;

{SetStartPos to next Character after the Separator}
   StartPos := Index + 1;
end;

procedure Split
   (const S: String;
   Separator: Char;
   MyStringList: TStringList) ;
var Start: integer;
begin
   Start := 1;
   While Start <= Length(S) do
     MyStringList.Add
       (GetNextToken(S, Separator, Start)) ;
end;

function AddToken (const aToken, S: String;
                    Separator: Char;
                    StringLimit: integer): String;
begin
   if Length(aToken) + Length(S) < StringLimit then
     begin
       {Add a separator unless the
        Result string is empty}
       if S = '' then
         Result := ''
       else Result := S + Separator;

       {Add the token}
       Result := Result + aToken;
     end
   else
   {if the StringLimit would be
   exceeded, raise an exception}
     Raise Exception.Create('Cannot add token') ;
end;
end. { SplitFns}
~~~~~~~~~~~~~~~~~~~~~~~~~

Delphi tips navigator:
» How to translate a virtual-key to ASCII code
« How to get the filename of the process that is currently executing

Explore Delphi Programming
About.com Special Features

Holiday Central

What to eat, where to go, fun things to do and how to save money on the perfect gifts. More >

Family Tech Center

Stay connected and entertained with reviews on tips on the latest HDTVs, cellphones and more. More >

  1. Home
  2. Computing & Technology
  3. Delphi Programming
  4. Coding Delphi Applications
  5. Delphi Tips and Tricks
  6. 2002 Delphi Tips
  7. Delphi Split / Tokenizer functions

©2009 About.com, a part of The New York Times Company.

All rights reserved.