Reusing variable from one segment to another

Homepage Clovertech Forums Read Only Archives Cloverleaf Cloverleaf Reusing variable from one segment to another

  • Creator
    Topic
  • #51090
    Mike Keys
    Participant

    I defined a variable (only part of the uproc is shown):

    } elseif [cequal [crange $segment 0 2] GT1] {  

           set  fieldList [split $segment $field_sep]

           set gt1_5 [lindex $fieldList 5]

           echo $gt1_5 (this returns a value)

           set segment [join $fieldList $field_sep]

           append outbuf ${segment}r  

    } else if [cequal [crange $segment 0 2] PID] {  

           echo $gt1_5 (this returns nothing)

    }

    The echo does not work in the PID segment area. I need to reuse the contents of $gt1_5 within the PID segment ‘elseif’ statement.  I can pull a variable defined within the MSH ‘if’ statement defined earlier and use it just fine in a ‘cequal’ condition.

Viewing 8 reply threads
  • Author
    Replies
    • #68758
      Tom Rioux
      Participant

      Is this part of some sort of iteration/looping? Can you post the full uproc?

      Tom

    • #68759
      Mike Keys
      Participant

      ######################################################################

      # Name:         ccsci_a_centricity.tcl  

      # Purpose:      

      #

      # UPoC type: Pre Xlate

      # Args:         tps keyedlist containing the following keys:

      #               MODE    run mode (“start”, “run” or “time”)

      #               MSGID   message handle

      #               ARGS    user-supplied arguments:

      #               #

      # Returns: tps disposition list:

      #          CONTINUE – Message was processed normally – continue into engine.

      #          ERROR – Message processing failed – put message into the error database.

      #

      # This proc creates the ADT message for Centricity.

      proc ccsci_a_centricity { args } {

             global HciConnName

             keylget args MODE mode        ;# Fetch mode

             keylget args CONTEXT context   ;# Fetch context

             #    if { ! [info exists HciConnName] } {

             #        set HciConnName “UNKNOWN_TD”

             #    }

             set dispList {}                             ;# Nothing to return

             switch -exact — $mode {

                     start {

                             # Perform special init functions

                             # N.B.: there may or may not be a MSGID key in args

                     }

                     run {

                             keylget args MSGID mh               ;# Fetch the MSGID

                             set msg [msgget $mh]                  ;# Get the Message Handle

                             set outbuf {}

                             # Now we need to determine our field and sub components

                             set field_sep [csubstr $msg 3 1]      ;# HL7 field separator

                             set sub_sep [csubstr $msg 4 1]        ;# HL7 subfield separator

                             set sub_sub_sep [csubstr $msg 7 1]    ;# HL7 sub-subfield separator

                             set rep_sep [csubstr $msg 5 1]        ;# HL7 repetition separator

                             set segmentList [split $msg r]            

                             set msgDisp “CONTINUE”

      set A04 “A04”

      set A08 “A08”

                             foreach segment $segmentList {

      #MSH        

      if [cequal [crange $segment 0 2] MSH] {  

      set fieldList [split $segment $field_sep]

      catch {set fieldList [lreplace $fieldList 2 2 “CCSCI”]}

      catch {set fieldList [lreplace $fieldList 7 7 “NO SECURITY”]}

      set msh_9 [lindex $fieldList 8]

      set msh_9_list [split $msh_9 $sub_sep]

      set msh_9_1 [lindex $msh_9_list 1]

      if [cequal “A28” $msh_9_1] {

                  catch {set msh_9_list [lreplace $msh_9_list 1 1 $A04]}

      } elseif [cequal “A31” $msh_9_1] {

      catch {set msh_9_list [lreplace $msh_9_list 1 1 $A08]}

      }

      set new_msh_9 [join $msh_9_list $sub_sep]

        catch {set fieldList [lreplace $fieldList 8 8 $new_msh_9]}

      set segment [join $fieldList $field_sep]

      append outbuf ${segment}r      

      #EVN        

      } elseif [cequal [crange $segment 0 2] EVN] {  

      set fieldList [split $segment $field_sep]

      if [cequal “A28” $msh_9_1] {

            catch {set fieldList [lreplace $fieldList 1 1 $A04]}

      } elseif [cequal “A31” $msh_9_1] {

            catch {set fieldList [lreplace $fieldList 1 1 $A08]}

      }

      catch {set fieldList [lreplace $fieldList 4 4 “”]}

      set segment [join $fieldList $field_sep]

      append outbuf ${segment}r      

      #GT1        

      } elseif [cequal [crange $segment 0 2] GT1] {  

      set fieldList [split $segment $field_sep]

      catch {set fieldList [lreplace $fieldList 11 11 “”]}

      set segment [join $fieldList $field_sep]

      append outbuf ${segment}r  

      #PID

                        } elseif [cequal [crange $segment 0 2] PID] {

      set fieldList [split $segment $field_sep]

      set pid_3 [lindex $fieldList 3]

      set pid_3_rep [split $pid_3 $rep_sep]

      set pid_3_rep2 [lindex $pid_3_rep 2]

      set pid_3_rep2_list [split $pid_3_rep2 $sub_sep]

      set pid_3_rep2_id [lindex $pid_3_rep2_list 0]

      set ssn_first [crange $pid_3_rep2_list 0 2]

      set ssn_middle [crange $pid_3_rep2_list 4 5]

      set ssn_last [crange $pid_3_rep2_list 7 10]

      set ssn $ssn_first$ssn_middle$ssn_last      

        catch {set fieldList [lreplace $fieldList 2 2 $ssn]}                  

        catch {set fieldList [lreplace $fieldList 3 3 $ssn]}

      set pid_10 [lindex $fieldList 10]

      set pid_10_list [split $pid_10 $sub_sep]

      set pid_10_race [lindex $pid_10_list 0]

      set new_pid_10 [tbllookup -side input Centricity_race.tbl $pid_10_race]

      if [cequal $new_pid_10 -1] {

            set new_pid_10 $pid_10

            }

                        catch {set fieldList [lreplace $fieldList 10 10 $new_pid_10]}

      set pid_11 [lindex $fieldList 11]

      if [cequal $pid_11 “”] {

      catch {set fieldList [lreplace $fieldList 11 11 $gt1_5]} I want to reuse the contents of GT1_5 in this field if it meets the conditions of the ‘if’ statement)

      }

      set pid_16 [lindex $fieldList 16]

      set pid_16_list [split $pid_16 $sub_sep]

      set pid_16_ms [lindex $pid_16_list 0]

      set new_pid_16 [tbllookup -side input Centricity_marital_status.tbl $pid_16_ms]

      if [cequal $new_pid_16 -1] {

            set new_pid_16 $pid_16

            }

                        catch {set fieldList [lreplace $fieldList 16 16 $new_pid_16]}

      set segment [join $fieldList $field_sep]

      append outbuf ${segment}r

      #PV1        

      } elseif [cequal [crange $segment 0 2] PV1] {  

      set fieldList [split $segment $field_sep]

      catch {set fieldList [lreplace $fieldList 3 3 “CCSCI”]}

      catch {set fieldList [lreplace $fieldList 7 7 “”]}

      set segment [join $fieldList $field_sep]

      append outbuf ${segment}r    

      #DG1 – Suppress        

      } elseif [cequal [crange $segment 0 2] DG1] {  

      #ROL – Suppress

      } elseif [cequal [crange $segment 0 0] R] {  

      #Z-segments – Suppress        

      } elseif [cequal [crange $segment 0 0] Z] {  

      #OTHER                                  

                             } else {

                                   append outbuf ${segment}r

                             }

                             }

                             regsub -all {“”} $outbuf {} outbuf

                             set outbuf [string trimright $outbuf “r”]

                             set outbuf “$outbufr”

                             msgset $mh $outbuf

                             lappend dispList “CONTINUE $mh”

                     }

                     time {

                             # Timer-based processing

                             # N.B.: there may or may not be a MSGID key in args

                     }

                     shutdown {

                             # Doing some clean-up work

                     }

                     default {

                             error “Unknown mode ‘$mode’ in ccsci_a_centricity”

                     }

             }

             return $dispList

      }

    • #68760
      Mike Keys
      Participant

      Sorry, GT1 should have this in it:

      set gt1_5 [lindex $fieldList 5]

      I’ve been testing and posted a version without it. Should clear up any obvious problems.

      This is weird. I can resuse any other variable defined earlier in the proc except this one. Special name?

    • #68761
      Jim Kosloskey
      Participant

      Mike,

      I usually put a set of delimiters around my echoes so that if I am echoing a null value I will know it.

      Maybe the value is null.

      I do something like this echo”>$var<"

      Then if I have null in $var I get >< and it becomes obvious.

      email: jim.kosloskey@jim-kosloskey.com 29+ years Cloverleaf, 59 years IT - old fart.

    • #68762
      Jim Kosloskey
      Participant

      Mike,

      I guess it is also possible you are not passing the if and thus the echo is not getting executed.

      email: jim.kosloskey@jim-kosloskey.com 29+ years Cloverleaf, 59 years IT - old fart.

    • #68763
      Mike Keys
      Participant

      I got word from another programmer that the GT1 segment occurs after the PID segment, thus the variable was not intialized at that point. He gave me some code that loops through the segments in this case so that you can initialize the variable within a segment if the segment occurs after the segment you are in:

      set gt1val “^GT1\|”

      set segList $segmentList

      set finx [lsearch -regexp $segList $gt1val ]

      if {![cequal $finx -1]} {

          set gt1 [lvarpop segList $finx]

          set gt1_5 [lindex [split $gt1 $field_sep] 5]

      }

    • #68764
      Jim Kosloskey
      Participant

      Actually I wonder why you are not doing this in an Xlate.

      email: jim.kosloskey@jim-kosloskey.com 29+ years Cloverleaf, 59 years IT - old fart.

    • #68765
      Tom Rioux
      Participant

      Also, you could clean the little piece of code that was given to you by doing this:

      set gt1seg [lsearch -regexp -inline $segmentlist ^GT1 ]

      set gt1_5 [lindex [split $gt1seg $field_sep] 5]

      The -inline will pull the entire GT1 segment instead of just it’s index.  The two “set” commands at the beginning aren’t even needed.

      Hope this helps…Tom

    • #68766
      Mike Keys
      Participant

      Pretty slick Tom. Works! I like less code… 😀

Viewing 8 reply threads
  • The forum ‘Cloverleaf’ is closed to new topics and replies.

Forum Statistics

Registered Users
5,127
Forums
28
Topics
9,300
Replies
34,445
Topic Tags
288
Empty Topic Tags
10