Brian Dunning's FileMaker Custom Functions

DeleteVariableText ( Value ; StringStart ; StringEnd ; Pos ; Start ; End ) )

Substitute out blocks of text, defined by a start/end string of characters - whose inner contents are of variable width

  Average rating: 4.3 (36 votes) Log in to vote

Daniel Wood   Daniel Wood - Show more from this author
Digital Fusion Ltd
http://www.teamdf.com

Share on Facebook Share on Twitter

  Sample input:
RectangleArea ( This is (ID12)substituting out (ID9282)all instances of (ID)variable length bracketed stuff ; "(" ; ")" ; 1 ; "" ; "" )
  Sample output:
This is substituting out all instances of variable length bracketed stuff

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

This function enables you to substitute out blocks of text from a field where only the start and end characters of those blocks are known. For example, you might wish to substitute out all pieces of text which are enclosed in brackets, but whose inner contents of those brackets are unknown.

The function recursively by traversing the field, storing positions of the start & end characters when found - and when both a start and end are found, the block is removed, and traversal continues on the new piece of text.

 

Comments

Neuronnerd   Neuronnerd, Evans, Georgia
Aug 21, 2010
There appears to be a typo: "DeleteText" should be "DeleteVariableText"
 
Daniel Wood   Daniel Wood, Digital Fusion Ltd
Aug 21, 2010
Fixed, thanks.
 
Thomas Seidler   Thomas Seidler, London
Sep 2, 2012
error in code:
StartPosition = If ( Middle ( Value ; Pos ; 3 ) = StringStart and IsEmpty ( Start ) ; Pos ; Start ) ;

should be 1 not 3...

Thanks for function though.
 
Katy Butterworth   Katy Butterworth, New Zealand
Jul 20, 2014
Just wanted to say thanks! I think it is wonderful that you would share this and it has saved me some real headaches. Worked a treat!
 
Daniel Wood   Daniel Wood, Digital Fusion Ltd
Jul 20, 2014
No problem :) Hope all is well!
 
Martin   Martin
Jul 14, 2017
Sorry but there is missing the information what the Vars are for

Value = (Text?)
StringStart = ?
StringEnd = ?
Pos = ?
Start = ?
End = ?


Also the Example does not wor
 
Daniel Wood   Daniel Wood, Digital Fusion Ltd
Jul 14, 2017
hi Martin,

Value - the text string you want to perform the function on
StringStart - This is the start string identifying the start of the block(s) of text to remove.
StringEnd - This is the end string identifying the end of the block(s) of text to remove.

Pos - Always set to 1 on first running the function.
Start/End - you can leave blank, these are parameters used in the recursion.

Unfortunately I have lost my password so cannot edit the function, but if you look up a few comments to a post by Thomas Seidler, you'll find the bug in the code that you can fix for the function to work.

cheers
Daniel
 
Jeff Wilson   Jeff Wilson, The Jackson-Crockett Company
May 26, 2022
This function presumes the length of the Start variable is 1 and the End variable is 3. I modified it to accept any length Start or End:

Case (
Pos > Length ( Value ) ; Value ;

Let ([

ChangeMade = If ( not IsEmpty ( Start ) and not IsEmpty ( end ) ; 1 ; 0 ) ;
Value = If ( ChangeMade = 1 ; Substitute ( Value ; Middle ( Value ; Start ; End - Start + Length(StringEnd) ) ; "" ) ; Value ) ;
Pos = If ( ChangeMade = 1 ; Start ; Pos ) ;
Start = If ( ChangeMade = 1 ; "" ; Start ) ;
End = If ( ChangeMade = 1 ; "" ; End ) ;

// So we have now done our substitute @ the start, now work out new start/end values for next round.
StartPosition = If ( Middle ( Value ; Pos ; Length (StringStart) ) = StringStart and IsEmpty ( Start ) ; Pos ; Start ) ;
EndPosition = If ( Middle ( Value ; Pos ; Length ( StringEnd ) ) = StringEnd and not IsEmpty ( Start ) ; Pos ; End )

];

//Run the recursion again
DeleteVariableText ( Value ; StringStart ; StringEnd ; Pos + 1 ; StartPosition ; EndPosition )

)
)
 

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.

Support this website.

This library has been a free commmunity resource for FileMaker users and developers for 20 years. It receives no funding and has no advertisements. If it has helped you out, I'd really appreciate it if you could contribute whatever you think it's worth: