Hello friends.
Below you will find the properties and "new" handler for my string
tokenizer. This object takes a string, and a collection of delimiters, and
splits the string into an internally maintained linear list of tokens, based
on the specified delimiting characters.
I'm looking for ANY ways to optimize this "new" handler, without having to
resort to TextCruncher or any other Xtra.
I'm sure the handler is understandable, so I don't need to go into great
detail to explain it. Basically, any number of delimiting characters can be
sent in, so the search needs to take all delimiters into account. Obviously,
it needs to find the nearest occurance of any one of the supplied
delimiters, and then needs to add to the linear list the chunk of text
between the current search point and the found delimiter. I'm currently
hacking the front off of the supplied text with each find, so that I can use
the offset function to locate the next nearest occurance of a delimiter.
I just want to know if there's a better way to do this.
Thanks!
---------------------------------------------------------------------------
-- [DOM-Lingo] Tokenizer
---------------------------------------------------------------------------
-- Copyright �2002 Christopher Watson
-- All Rights Reserved Worldwide.
---------------------------------------------------------------------------
---------------------------------------------------------------------------
-- PROPERTIES
---------------------------------------------------------------------------
property mlTokens -- [DOM-Lingo] Internal private token list
property miCurrToken -- [DOM-Lingo] Token offset
---------------------------------------------------------------------------
-- CONSTANTS
---------------------------------------------------------------------------
property LINEFEED -- [DOM-Lingo] ASCII 0x0A (decimal 10)
---------------------------------------------------------------------------
-- METHODS
---------------------------------------------------------------------------
---------------------------------------------------------------------------
-- [DOM-Lingo] new
---------------------------------------------------------------------------
on new me, psData, psDelims
mlTokens = []
miCurrToken = 0
LINEFEED = numToChar(10)
if psData.length = 0 then return me
repeat while TRUE
liNearestOffset = psData.length
lbDelimFound = FALSE
repeat with i = 1 to psDelims.length
liOffset = offset(psDelims.char[i], psData)
lbDelimFound = (lbDelimFound or (liOffset > 0))
if (liOffset > 0) and (liOffset < liNearestOffset) then
liNearestOffset = liOffset
if lbDelimFound and liNearestOffset = 1 then exit repeat
end repeat
if lbDelimFound then
mlTokens.add(psData.char[1..liNearestOffset - 1])
delete char 1 to (liNearestOffset - 1) of psData
else
if psData.length > 0 then mlTokens.add(psData)
exit repeat
end if
end repeat
return me
end
Christopher Watson
Sr. Software Engingeer
Director/Shockwave Development
Lightspan, Inc.
Tel: 858.824.8457
Fax: 858.824.8008
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/lingo-l.cgi To post messages to the list, email
[EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED]). Lingo-L is for
learning and helping with programming Lingo. Thanks!]