XLT IF Statement

Clovertech Forums Cloverleaf XLT IF Statement

  • Creator
    Topic
  • #116114
    Stewart
    Participant

      I need the if statement to test on multiple items.  What are the correct characters to use to group the || statement together?  In most cases this is accomplished with parentheses ( if((a==x || a == z) &&  b==z) {} )

      IF

      (0).MSH(0).#4(0) eq =AHBEC  ||  0(0).MSH(0).#4(0)  eq =IHSUM &&  2(0).1(0).1(0).0(0).OBX(0).#3(0).[0] =THEID

       

    Viewing 7 reply threads
    • Author
      Replies
      • #116115
        Keith McLeod
        Participant

          You may want to consider a table value to a variable and then test the variable.

          ABC –> SEND

          DEF –> SEND

          Default –> KILL

          Use something like @msh4_test

          If @msh4_test eq =SEND

          Do something….

        • #116116
          Paul Bishop
          Participant

            Parenthesis are correct.  For a translate, it would be:

            if {($a eq =x || $a eq =y) && $b eq =z} {do something}

            In a TCL script, it would be:

            if {($a eq “x” || $a eq “y”) && $b eq “z”} {do something}

            Paul Bishop
            Carle Foundation Hospital
            Urbana, IL

          • #116117
            Anonymous

              lots of ways to accomplish this, but to use the xlt IF statement, try this:

              ( 0(0).MSH(0).#4(0) eq =AHBEC || 0(0).MSH(0).#4(0) eq =IHSUM ) && ( 2(0).1(0).1(0).0(0).OBX(0).#3(0).[0] =THEID )

              (The second set of parens is optional.)

            • #116118
              Stewart
              Participant

                I couldn’t get any of these to work correctly.  I broke it down into 2 separate if statements.

              • #116127
                Anonymous

                  fyi, I think you were missing the leading “0” in your original post:

                  0(0).MSH(0).#4(0)

                • #116131
                  Vince Angulo
                  Participant

                    I’m pretty sure I always end up nesting the AND clause under the OR condition.

                    In Welch’s Tcl manual there are two full pages on grouping.  Normally, programming 101 says AND precedes OR, but precedence is over-ridden by parens () — however I’ve found that’s not always the case in Tcl (or how it’s implemented in Cloverleaf).

                    Glad you got it working even if it wasn’t as elegant as you would’ve liked.

                  • #116133
                    Charlie Bursell
                    Participant

                      “however I’ve found that’s not always the case in Tcl (or how it’s implemented in Cloverleaf).”

                      Can you be more specific?  Tcl as implemented in Cloverleaf uses the same precedence rules as Tcl anywhere.  Also, to the best of my knowledge Tcl uses the same precedence rules as most languages.  I cannot think of one that is different.

                      https://www.tutorialspoint.com/tcl-tk/tcl_operators_precedence.htm

                      Operator precedence determines the grouping of terms in an expression. This affects how an expression is evaluated. Certain operators have higher precedence than others; for example, the multiplication operator has higher precedence than the addition operator.

                      <b>For example</b> : x = 7 + 3 * 2; here, x is assigned 13, not 20 because operator * has higher precedence than +, so it first gets multiplied with 3 * 2 and then adds into 7.

                      Here, operators with the highest precedence appear at the top of the table, those with the lowest appear at the bottom. Within an expression, higher precedence operators will be evaluated first.

                      Category Operator Associativity
                      Unary + – Right to left
                      Multiplicative * / % Left to right
                      Additive + – Left to right
                      Shift << >> Left to right
                      Relational < <= > >= Left to right
                      Equality == != Left to right
                      Bitwise AND & Left to right
                      Bitwise XOR ^ Left to right
                      Bitwise OR | Left to right
                      Logical AND && Left to right
                      Logical OR || Left to right
                      Ternary ?: Right to left

                      Example

                      Try the following example to understand the operator precedence available in Tcl language −

                      <pre class=”prettyprint notranslate prettyprinted”>#!/usr/bin/tclsh

                      set a 20
                      set b 10
                      set c 15
                      set d 5

                      set e [expr [expr $a + $b] * $c / $d ] ;# ( 30 * 15 ) / 5
                      puts
                      “Value of (a + b) * c / d is : $e\n”

                      set e [expr [expr [expr $a + $b] * $c] / $d] ;# (30 * 15 ) / 5]
                      puts
                      “Value of ((a + b) * c) / d is : $e\n”

                      set e [expr [expr $a + $b] * [expr $c / $d] ] ;# (30) * (15/5)
                      puts
                      “Value of (a + b) * (c / d) is : $e\n”

                      set e [expr $a + [expr $b * $c ] / $d ] ;# 20 + (150/5)
                      puts
                      “Value of a + (b * c) / d is : $e\n”</pre>
                      When you compile and execute the above program, it produces the following result −
                      <pre class=”result notranslate”>Value of (a + b) * c / d is : 90

                      Value of ((a + b) * c) / d is : 90

                      Value of (a + b) * (c / d) is : 90

                      Value of a + (b * c) / d is : 50</pre>

                    • #116137
                      Vince Angulo
                      Participant

                        Thanks Charlie – I have to agree with everything in your post as it applies to arithmetic operators.  My challenge had been, like Stewart’s original post, with logical operators in an IF statement.  I’ve gotten in the habit of separating the ANDs and ORs into separate IFs, that I don’t have a recent example.  Of course, could’ve been my inexperience with the translate tool as well…

                    Viewing 7 reply threads
                    • You must be logged in to reply to this topic.