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 - Show more from this author
Digital Fusion Ltd http://www.teamdf.com |
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, Evans, Georgia Aug 21, 2010 |
||
There appears to be a typo: "DeleteText" should be "DeleteVariableText" | ||
Daniel Wood, Digital Fusion Ltd Aug 21, 2010 |
||
Fixed, thanks. | ||
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, 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, Digital Fusion Ltd Jul 20, 2014 |
||
No problem :) Hope all is well! | ||
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, 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, 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 ) ) ) |
||
Note: these functions are not guaranteed or supported by BrianDunning.com. Please contact the individual developer with any questions or problems.