TRIM command?

Ken Ray kray at sonsothunder.com
Sat May 20 00:38:34 EDT 2006


On 5/19/06 4:15 PM, "Gary S." <garyshow at verizon.net> wrote:

> I don't claim to be a regular expression expert (just a long time
> list lurker), but I recently had the same need for a trim command and
> came up with this function:
> 
> function trimWS pText
>    -- Remove all leading and trailing whitespace characters.
>    -- I.E., space, tab, carriage return, line feed, form feed.
> 
>    return replaceText(pText,"(^\s+)|(\s+$)",empty)
> 
> end trimWS

Yes, this works for everything except hard spaces (i.e. nonbreaking spaces),
which are not seen as whitespace by the regex engine.  Admittedly this
should be extremely rare that you might find one of these, but if you do, it
can ruin your day. Here's a version that takes this into account
(unfortunately it is different per platform):

function trimWS pText
   -- Remove all leading and trailing whitespace characters.
   -- I.E., space, tab, carriage return, line feed, form feed, hard space
  if the platform is "MacOS" then
    return replaceText(pWhat,"(^(\s|\xca)+)|((\s|\xca)+$)",empty)
  else
    return replaceText(pWhat,"(^(\s|\xa0)+)|((\s|\xa0)+$)",empty)
  end if
end trimWS

For those of you interested, I've been keeping track of the various forms of
trimming, and have (with RevBench's help) shown that although the above uses
less code, it is not as efficient as a much more wordy function (the
function above comes in at 0.0257 ticks).

The following trim function is so far the fastest, most comprehensive
version (0.0004 ticks):

function trim what
  if the platform is "MacOS" then put numToChar(202) into tHardSpc
  else put numToChar(160) into tHardSpc
  put (space & tab & cr & linefeed & formfeed & tHardSpc) into tWhiteSpc
  repeat
    if char 1 of what is not in tWhiteSpc then exit repeat
    else delete char 1 of what
  end repeat
  repeat
    if char -1 of what is not in tWhiteSpc then exit repeat
    else delete char -1 of what
  end repeat
  return what
end trim

However the approach provided by Jacque Gay (and others) is the simplest and
is fastest (0.0002 ticks):

function trim what
  return (word 1 to -1 of what)
end trim

but doesn't handle hard spaces and is tripped up if there is a lone double
quote in a string:

  put quote & "   this is a test   " into tString
  put trim(tString)

will *not* trim the spaces from the end of the string.

Take your pick...

:-)
   

Ken Ray
Sons of Thunder Software
Web site: http://www.sonsothunder.com/
Email: kray at sonsothunder.com





More information about the Use-livecode mailing list