Conditional Functions: Difference between revisions

From wiki.jriver.com
Jump to navigation Jump to search
m (Readability. Punctuation.)
(Readability. Punctuation.)
Line 22: Line 22:


'''{{monospace|If(And(IsEqual([artist],Mark W,8),IsEqual([People],Vada),IsEqual([Places],France)),Photos of Vada in France Taken by Mark W,Other Photos)}}'''
'''{{monospace|If(And(IsEqual([artist],Mark W,8),IsEqual([People],Vada),IsEqual([Places],France)),Photos of Vada in France Taken by Mark W,Other Photos)}}'''
: If, and only if, artist contains "Mark W", people is only Vada, and places is only France, the result will be {{monospace|Photos of Vada in France Taken by Mark W}} for all other photos, the result will be {{monospace|Other Photos}}
: If, and only if, artist contains "Mark W", people is only Vada, and places is only France, the result will be {{monospace|Photos of Vada in France Taken by Mark W}}. For all other photos, the result will be {{monospace|Other Photos}}
}}
}}



Revision as of 00:49, 5 July 2020

The functions in this section test one or more arguments to produce either a true or false outcome, and execute specific actions depending upon that result.

The NOT operator ! (exclamation point) may be used in a conditional to invert the sense of the conditional test. Inverting the sense of a test can make reading expressions easier, or support better IfElse() sequences.

And(…)

Tests a given set of values and returns 1 if all of them are true.
Description And(value1, value2, valueN)

The And() function tests value1, value2 through to valueN, and returns 1 if all of them are true, otherwise, returns zero. Two or more arguments may be used, separated by commas. Each Value will typically be a Conditional Function or a Test and Comparison Function thus avoiding long nested sequences.

Examples And(IsEqual([artist],Mark W,8),IsEqual([People],Vada))
Returns 1 for all files that satisfy both IsEqual expressions, and zero for all other files.

[=And(IsEqual([artist],Mark W,8),IsEqual([People],Vada))]=1

Here, the first example has been formatted for use in the search bar. It will return all files (think photos) that show Vada on her own, taken by Mark W

If(And(IsEqual([artist],Mark W,8),IsEqual([People],Vada),IsEqual([Places],France)),Photos of Vada in France Taken by Mark W,Other Photos)

If, and only if, artist contains "Mark W", people is only Vada, and places is only France, the result will be Photos of Vada in France Taken by Mark W. For all other photos, the result will be Other Photos
(Back to top)   (Function index)

FirstNotEmpty(…)

Returns the first non-empty argument.
Description FirstNotEmpty(value1, value2, …)

The FirstNotEmpty() function acts as a conditional by returning the first argument from value1, value2, ... that is not empty. Two or more arguments may be used, and the first non-empty argument is returned. With two arguments, is is functionally equivalent to the sequence such as if(!isempty(value1), value1, value2). With more than two arguments, FirstNotEmpty() avoids long nested If() sequences that simply test for emptiness.

Examples firstnotempty([media sub type], Music Video)
Returns the value in media sub type if it is not empty, otherwise returns Music Video.

firstnotempty([series], [name], Tag your Videos!)

Returns the first non-empty value from the fields series or name, and if both are empty, returns the reminder to Tag your Videos!.
(Back to top)   (Function index)

If(…)

Conditional if-else evaluator.
Description If(test expression, true expression, false expression)

The If() function is used to evaluate a test expression, and will output the result of the true expression or false expression, depending upon the evaluation result. The test expression is expected to return a 0 (false value) or a non-zero (true value). Nesting is allowed. If the test expression is preceded by the NOT operator (!, an exclamation point), the sense of the test is inverted. Non-zero values are inverted to 0, and 0 is inverted to 1.

Examples if(isequal([artist], bob dylan, 1), Genius, Mediocre)
Outputs Genius when artist is (case insensitive) Bob Dylan and Mediocre otherwise.

if(isequal([artist], bob dylan, 1), Genius, if(isequal([album], Joshua Tree, 8), Great Album, Mediocre))

This nested If() expression expands on the previous example, by first evaluating if the artist is Bob Dylan, and outputs Genius if true. When the artist is not Bob Dylan, the album is then tested to see if it is Joshua Tree, and if so outputs Great Album, otherwise outputs Mediocre.

if(!isempty([comment]), regex([comment], /#^(\\S+\\s+\\S+\\s+\\S+)#/, 1), *No Comment)

Outputs the first three words of the comment field; otherwise, outputs *No Comment. By using the NOT operator, the sense of the conditional is inverted so that the more interesting case is moved ahead of the more mundane case.
(Back to top)   (Function index)

IfCase(…)

Functions as a switch or select case statement.
Description IfCase(primary, mode, secondary1, action1, secondary2, action2, secondary3, action3..... etc …)
  • Argument mode is optional (defaults to 0).

The IfCase() function performs an IsEqual() operation against one primary operand and several secondary operands, with an action for each secondary operand. IfCase() honors the same modes as IsEqual. IfCase() acts on the first match, and if no match occurs returns null. This saves a lot of typing of nested Compare() or IsEqual() statements when matching things against a possible list of values, and makes for much more readable expressions. When constructing the tests, always test from longest/largest to shortest/smallest.

Available mode values:

0Case-sensitive string compare for equality
1Case-insensitive string compare for equality
2Numeric compare for equality
3Numeric less than
4Numeric less than or equal to
5Numeric greater than
6Numeric greater than or equal to
7Substring search (case sensitive)
8Substring search (case insensitive)
9List search ANY (case sensitive)
10List search ANY (case insensitive)
11List search ALL (case sensitive)
12List search ALL (case insensitive)
13List search ANY (case sensitive) (Full String Match)
14List search ANY (case insensitive) (Full String Match)
15List search ALL (case sensitive) (Full String Match)
16List search ALL (case insensitive) (Full String Match)
Examples IfCase([bitrate], 2, 320, High, 256, Medium, 128, Standard, 64, Low)
Converts a numerical bitrate to a descriptive word.

IfCase(Length([Name]), 5, 50, Wow this is super long, 30, This is a very long track name, 20, This is not so long)

Takes various actions based on the length of a field, Name in this example.

IfCase([Oscar Awarded to], 8, Matt, Matt wins on his first acting job, meryl, The Oscar went to Meryl again, carrey, Unbelievable result)

Multiple actions based on the contents of one string, Oscar Awarded To in this example.
(Back to top)   (Function index)

IfElse(…)

Conditional if-elseif evaluator.
Description IfElse(test1, action1, test2, action2, test3, action3, …)

The IfElse() conditional provides a convenient mechanism for shortening and more clearly expressing nested conditionals into an alternating sequence of tests and actions. One or more test/action pairs may be specified.

For example, consider a nested sequence of If() tests such as the following pseudo-code:

if (test1)
action1
else if (test2)
action2
else if (test3)
action3

The IfElse() statement may be used to more cleanly express the flow of expression by removing the superfluous internal If() statements, converting the clumsy expression:

if(test1, action1, if(test2, action2, if(test3, action3)))

into the more elegant:

ifelse(test1, action1, test2, action2, test3, action3)

If any of the test expressions test1, etc. are preceded by the NOT operator (!, an exclamation point), the sense of that test is inverted. Non-zero values are inverted to 0, and 0 is inverted to 1.

Examples ifelse(isequal([media type], Audio), Le Tunes, isequal([media type], Video), Flix)
If media type is audio, outputs Le Tunes, else if media type is video, outputs Flix.

ifelse(isequal([artist], Bob Dylan), Genius, isequal([album], Joshua Tree, 8), Great Album, 1, Mediocre)

This example, implements the nested if statements from the If() section above, first testing if the artist is Bob Dylan, and if true, outputs Genius, otherwise evaluates the second test to determine if the album is Joshua Tree, and if true, outputs Great Album, otherwise, performs a final test, in this case a degenerate test of 1 (and 1 is always true), thus outputting the value Mediocre.
(Back to top)   (Function index)

Or(…)

Tests a given set of values and returns 1 if any of them are true.
Description Or(value1, value2, valueN)

The Or() function tests value1, value2 through to valueN, and returns 1 if any of them are true, otherwise, returns zero. Two or more arguments may be used, separated by commas. Each Value will typically be a Conditional Function or a Test and Comparison Function thus avoiding long nested sequences.

Examples Or(IsEqual([artist],Mark W,8),IsEqual([People],Vada))
Returns 1 for all files that satisfy either of the given IsEqual expressions, and zero for all other files.

[=Or(IsEqual([artist],Mark W,8),IsEqual([People],Vada))]=1

Here, the first example has been formatted for use in the search bar. It will return all files (think photos) that show Vada on her own, as well as all photos taken by Mark W

If(Or(IsEqual([artist],Mark W,8),IsEqual([People],Vada),IsEqual([Places],France)),Mish-Mash,Other Photos)

Here, all photos taken by Mark W, all photos of Just Vada, and all photos taken in France will return Mish-Mash. For any other photos, the result will be Other Photos
(Back to top)   (Function index)