Brian Dunning's FileMaker Custom Functions

Supertrim ( text )

Speedily (and with no recursion) remove leading and trailing white space (including spacing, tabs, returns and line feeds) from a text string.

  Average rating: 4.2 (50 votes) Log in to vote

Debi Fuchs   Debi Fuchs
Aptworks Consulting
http://www.aptworks.com

Share on Facebook Share on Twitter

  Sample input:
Supertrim(" John Smith¶")
  Sample output:
"John Smith"

  Function definition: (Copy & paste into FileMaker's Edit Custom Function window)

CUSTOM FUNCTION: Supertrim ( text )
© Written by Debi Fuchs of Aptworks Consulting, debi@aptworks.com (but please use freely!)

Speedily (and with no recursion) remove leading and trailing white space (including spacing, tabs returns, and line feeds) from a text string.

NOTE: Similar to TrimAll, except that it also removes tabs and returns and line feeds (in addition to spaces), and it does not touch any spacing WITHIN the string.

EXAMPLE:
Supertrim(" John Smith¶") // --> "John Smith"

LAST MODIFIED: 06-SEP-2016 on suggestion by Erik M: Fixed example
PRIOR MODIFICATION: 22-SEP-2014 by Erik S. of NYC: Added Line Feeds
PRIOR MODIFICATION: 20-AUG-2008 by Debi Fuchs of Aptworks Consulting

 

Comments

Gerold   Gerold, Süstedt / Germany
Sep 4, 2014
Hmm -- what happens if no leading whitespace exists?

As far as I get it there ain't no output at all in this case?!

Suggestion for the result:

Case
(
first_char ; Middle ( text ; first_char ; last_char - first_char + 1 ) ;
last_Char < Length ( text ) ; Left ( text ; last_char ) ;
text
)
 
Erik S.   Erik S., NYC
Sep 19, 2014
Added removing Line Feeds:

Let(
[
// Determine value of original string with ALL whitespace removed.
t2 = Substitute( text; [ " "; "" ]; [ " "; "" ]; [ " "; "" ]; [ "¶"; "" ]; [ char ( 10 ); "" ] );

// Determine position of first non-ws character in original string.
first_char = Position( text; Left( t2; 1 ); 0; 1 );

// Determine position of last non-ww character in original string.
last_char = Position( text; Right( t2; 1 ); Length( text ); -1 )
];

// If any non-whitespace characters exist return appropriate
// middle portion of original text.

Case( first_char; Middle( text; first_char; last_char - first_char + 1 ) )
)
 
Debi Fuchs   Debi Fuchs, Aptworks Consulting
Sep 22, 2014
Gerold,

You said: "Hmm -- what happens if no leading whitespace exists? As far as I get it there ain't no output at all in this case?!"

Thanks for the feedback. This is not my experience. Would you mind providing an example?

For me, the example:
supertrim("test ¶ ")
yields:
test

Best,
Debi
 
Debi Fuchs   Debi Fuchs, Aptworks Consulting
Sep 22, 2014
Thanks, Erik S.! I have modified the function, giving you credit for the mod!
 
Carl Starr   Carl Starr, Los Ranchos
Jan 28, 2015
Thanks for this function - It works great!

I use it as an auto-enter calculation in user data entry fields:

Supertrim ( Self )
 
Stephen P   Stephen P, Perth, Western Australia
Jul 20, 2015
Thanks for this fantastic function Debi.

One of my users copied and pasted text from and html email into a field which supertrims by auto-enter calculation.

It still had a lot of trailing spaces and would not trim. After investigating I found that non breaking spaces had been copied.

I added [ Char(160); "" ] to the t2.

Just in case that helps anyone else.
 
H   H, CHCH
Nov 17, 2015
Fantastic!
 
Eric M.   Eric M., San Jose, CA
Jan 24, 2016
It seems the result documented in the example comment is incorrect:

EXAMPLE:
Supertrim(" John Smith¶") // --> "John Smith¶"

Should be:

EXAMPLE:
Supertrim(" John Smith¶") // --> "John Smith"

Since it removes the last "¶".
 
GaryODS   GaryODS, Sacramento
Sep 5, 2016
I've never written a custom function, so please forgive any oversights in this comment.

If I drop the space removal from the Substitute function, and add the char(160) how is Supertrim faster or different from

Trimall(Substitute( text; [ " "; "" ]; [char(160); "" ]; [ " "; "" ]; [ "¶"; "" ]; [ char(10); "" ] )) ?
 
Debi   Debi, Boston
Sep 6, 2016
Gary, the Supertrim removes leading and trailing whitespace characters, touching nothing within the middle of the text, e.g. "ban" & Supertrim(" ¶anas¶sour cherries¶pe ¶") & "ears" = "bananas¶sour cherries¶pears".
 
paolo   paolo, milano
Sep 30, 2016
good deal, thanks !
 
Florence Haseltine   Florence Haseltine, Alexandria,VA
Jan 23, 2017
Great Custom Function. Especially when copy and pasting information from Web Sites.
 
Michael Rocharde   Michael Rocharde, Golden, CO
Nov 10, 2017
Absolutely invaluable.
 

Log in to post comments.

 

Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.

Under construction. Email me your wish list for improvements.