Brian Dunning's FileMaker Custom Functions

FilterPartialValues ( values ; string )

Exclude values that contain string.

  Average rating: 4.0 (21 votes) Log in to vote

Richard Dyce   Richard Dyce
Dyce & Sons LTD.
http://dyce.com

Share on Facebook Share on Twitter

  Sample input:
FilterPartialValues ( "Item List¶item_scripting¶User List¶user_scripting¶Prefs" ; "_scripting" )
  Sample output:
item_scripting
user_scripting

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

This is simply convenience function, used to search for 'scripting' layouts.
Updated to avoid adding a trailing return

 

Comments

Agnès   Agnès, France
Apr 26, 2016
Hi,

You can also have the same result without recursion ;)

Let ([

L = "Item List¶Item_scripting¶User List¶user_scripting¶Prefs" ;
Keep = "_scripting" ;

R = "#" & Substitute ( L ; [ ¶ ; "¶#" ] ; [ Keep ; Keep & ¶ & Keep ] ) ;
Fb = Substitute ( R ; [ ¶ ; "#¶"] ; [ Keep & "#" ; Keep ] ) & "#"

];
Substitute ( FilterValues ( R ; Fb ) & "[end]" ; [ "#¶" ; "" ] ; [ "¶[end]" ; "" ] ; [ "#" ; "" ] ; [ Keep & "¶" & Keep ; Keep ] )
)

this way is case sensitive ( add upper for no )
 
Richard   Richard, Zuchwil
Apr 26, 2016
Agnès, you're clearly on a roll ;-) Thanks, R
 
Richard   Richard, Zuchwil
Apr 26, 2016
Agnès, where exactly are you adding Upper for case-insensitive? Or is that an exercise for the student? ;-)
 
Richard   Richard, Zuchwil
Apr 26, 2016
Agnès, ahem, sorry, but I'm not sure that the non-recursive works for all the same cases:

Assuming your version is implemented (and I haven't screwed up the implementation):

// FilterPartialValues_NR ( values ; string )

// FilterPartialValues_NR ( values ; string )

Let (
[
R = "#" & Substitute ( values ; [ ¶ ; "¶#" ] ; [ string ; string & ¶ & string ] ) ;
Fb = Substitute (
R ;
[ ¶ ; "#¶"] ;
[ string & "#" ; string ]
) & "#"
];

Substitute (
FilterValues ( R ; Fb ) & "[end]" ;
[ "#¶" ; "" ] ;
[ "¶[end]" ; "" ] ;
[ "#" ; "" ] ;
[ string & "¶" & string ; string ]
)
)


Then,

FilterPartial_NR ( "Item List¶item_scripting¶User List¶user_scripting¶Prefs" ; "script" )

returns:

"item_script¶user_script"

Whereas, the original version:

FilterPartialValues ( "Item List¶item_scripting¶User List¶user_scripting¶Prefs" ; "script" )

returns:

"item_scripting¶user_scripting"

:-(
 
Agnès   Agnès, France
Apr 26, 2016
Oh sorry, I'ts an old calc, and I removed that line, I do not know why she was there...
D = FilterValues ( R ; Substitute ( R ; "#" ; "" ) ) without checking calc !

donc :

Let ([

L = "Item List¶Item_scripting¶User List¶user_scripting¶Prefs" ;
Keep = "_scr" ;

R = "#" & Substitute ( L ; [ ¶ ; "¶#" ] ; [ Keep ; Keep & ¶ & Keep ] ) ;
Fb = Substitute ( R ; [ ¶ ; "#¶"] ; [ Keep & "#" ; Keep ] ) & "#" ;
D = FilterValues ( R ; Substitute ( R ; "#" ; "" ) )
];
Substitute ( FilterValues ( R ; Fb & ¶ & D ) & "[NoValue]" ; [ "#¶" ; "" ] ; [ "¶[NoValue]" ; "" ] ; [ "#" ; "" ] ; [ Keep & "¶" & Keep ; Keep ] /* ; [ "[NoValue]" ; "" ] */ )

it's ok
 
Agnès   Agnès, France
Apr 26, 2016
For Case no sensitive :

Let ([

L = "Item List¶Item_scripting¶User List¶user_scripting¶Prefs" ;
Keep = Upper ( "_Scr" ) ;

R = "#" & Substitute ( Upper ( L ) ; [ ¶ ; "¶#" ] ; [ Keep ; Keep & ¶ & Keep ] ) ;
Fb = Substitute ( R ; [ ¶ ; "#¶"] ; [ Keep & "#" ; Keep ] ) & "#" ;
D = FilterValues ( R ; Substitute ( R ; "#" ; "" ) ) ;
Result = Substitute ( FilterValues ( R ; Fb & ¶ & D ) ; [ "#¶" ; "" ] ; [ "#" ; "" ] ; [ Keep & "¶" & Keep ; Keep ] )

];
Substitute ( FilterValues ( L ; Result ) & "[NoValue]" ; [ "¶[NoValue]" ; "" ] )
)

but the calc is less pretty ;)
 
Eric   Eric, SJSU
Apr 29, 2016
CF Description says "Exclude values that contain string."
Would a description such as "Search only values containing string" not be more appropriate ?
 

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.