Brian Dunning's FileMaker Custom Functions

ValuePosition ( valuelist ; searchvalue )

Get position number of the search value from the value list

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

Michael Bijnens   Michael Bijnens
freelance developer
/

Share on Facebook Share on Twitter

  Sample input:
ValuePosition (
a¶b¶c¶d¶e¶f" ;
"d"
)
  Sample output:
4

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

This CF gives you the position number of the search value from the given value list ( array separated by ¶ ).

 

Comments

Oliver   Oliver, Tegernsee
Jun 3, 2014
ValuePosition ( "a¶b¶c¶b¶a" ; "a" ) = 5; and ValuePosition ( "a¶b¶c¶b¶a" ; "b¶c" ) returns empty!?

But then it's not necessary to employ a recursive mechanism for finding the index of the first occurrence; simply use

ValueCount ( Left ( valuelist ; Position ( valuelist ; searchvalue ; 1 ; 1 ) ) )

btw. …

found = Case ( lastvalue = search ; True ; False )

is the same as

found = lastvalue = search

and

exist = Case ( PatternCount ( list ; search ) = False and not IsEmpty ( search ) ; False ; True )

is simply

exist = PatternCount ( list ; search )
 
Michael Bijnens   Michael Bijnens, Belgium
Jun 4, 2014
Dear Oliver,

As you can see my CF name = ValuePosition and not ValuePositionS.
So its not made for more multi value searches.

Try your simple example with numbers like ( 53 , 353, 121, 12 ).

I have tried it in many different ways but it is not waterproof so thats why I use a recursive function.
 
Oliver   Oliver, Tegernsee
Jun 4, 2014
Michael wrote:
Try your simple example with numbers like ( 53 , 353, 121, 12 )


Michael –

you're right, I forgot a little detail; change it to

ValueCount ( Left ( valuelist ; Position ( ¶ & valuelist & ¶ ; ¶ & searchvalue & ¶ ; 1 ; 1 ) ) )

and that'll give you exactly the same functionality without recursion.

Also, note that your CF returns the last position, not the first one.
 
Late to the party   Late to the party, Shanghai
Jan 8, 2016
// I like to use this:

/*
ValuePosition( _valuelist; _value )

Parameters:
_valuelist: a return-delimited string of values;
_value: a single-line string.

Returns:
an integer identifying the listed position of (the first occurrence of) _value within _valuelist,
or 0, whenever the _value is not listed.
*/


If(
// return zero when no match occurs:
IsEmpty( FilterValues( _valuelist; _value ) ); 0;

// FileMaker 15 should provide something like this function for us, but doesn't …
Let(
[
// first, bracket the arguments supplied with "¶"s:
_valuelist = "¶"&_valuelist&"¶";
_value = "¶"&_value&"¶";

// locate the "¶" character immediately preceding (the first occurrence of) _value:
_position = Position( _valuelist; _value; 1; 1 );

// extract all the return characters BEFORE this _position:
_returns = Filter( Left( _valuelist; _position ); "¶" );

// how many are there?
_valuePosition = Length( _returns )
];

_valuePosition
)
)
 
Michael Kupietz   Michael Kupietz, United States
Nov 18, 2017
valuePosition ( "AB¶BC¶CD","B" ) returns an out-of-memory error due to runaway recursion.
 

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.