Help relacing a value

Homepage Clovertech Forums Read Only Archives Cloverleaf Tcl Library Help relacing a value

  • Creator
    Topic
  • #51350
    Mike Campbell
    Participant

    We are creating a new XLT for ORU messages.  The vendor is sending the OBX-5 data with a .br in the message.  We need to change all of those to the ~ {tilde}.  The attachment has a sample mesasge as well as the instream tcl proc.  

    The error we are getting is included as well.  Any ideas as to what we need to go to correct the issue and get the tilde in the record?

    Thanks.

    Mike Campbell

    Nebraska Methodist Health System

    mike.campbell@nmhs.org

Viewing 6 reply threads
  • Author
    Replies
    • #69828
      Chris Williams
      Participant

      Mike,

      You need to escape the backslashes in your regexp. You’re currently escaping the “.” and the “}”. Hence the missing brace error which manifests itself as EOF in list element. Sometimes it is easier to debug these things by placing the code in a file and sourcing it in hcitcl.

      Code:

      set result [regexp {.br} $xlateInVals match]


      should be

      Code:

      set result [regexp {\.br\} $xlateInVals match]


      Cheers.

    • #69829
      Mike Campbell
      Participant

      I have fixed the ‘escape’ character as request.  Now, the entire line is being eliminated, not just changing the .br to a tilde.  The log looks like:

      {History: Age: 28 years. LMP not sure. Conception: spontaneous..br____________________________________________________________________________.brDating:.brConception Date:       09/01/2009      EDC:    05/25/2010      GA by Conception:       13w0d.br____________________________________________________________________________.brFirst Trimester Scan:

      .brSingleton gestation..brFetal Anatomy:.brSkull / Brain: appears normal. Spine: appears normal. Heart: appears normal. Abdomen: appears normal. Stomach: not examined. Bladder: not examined. Hands: both visible. Feet: both visible. Cardiac abnormality. .br .brFetal heart activity: present. Fetal heart rate: 125 bpm. .brAmniotic fluid: normal. AFI

       60.0 cm. .brPlacenta: anterior-low lying. Placenta accreta. .br\.br____________________________________________________________________________.brReport Summary:.brImpression: Type something there. Yes. .br\.brRecommendations: Continue to monitor patient}

      W variable is: .br

      Y variable is: ~

      I added the echo of the W and Y variable just to see if those were set correctly.

      proc br_to_tilde     {} {

         upvar xlateId       xlateId  

          xlateInList   xlateInList    

          xlateInTypes  xlateInTypes  

          xlateInVals   xlateInVals    

          xlateOutList  xlateOutList  

          xlateOutTypes xlateOutTypes  

          xlateOutVals  xlateOutVals

       echo $xlateInVals

       set $xlateOutVals $xlateInVals

       set result [regexp {\.br\} $xlateInVals match]

       if {$result >=0} {

         set var $xlateInVals

         set x “\.br\”

         set w $x

         set y “~”

         set var [string map

        $var]    

           set xlateOutVals $var

           echo “W variable is:” $w

           echo “Y variable is:” $y

         }

        }

    • #69830

      Try it like this:

      Code:

      set var [string map -nocase {\.br\ ~} $var]

      When you’re dealing with backslashes and escapes, I’ve found string map to be much easier to use than regsub. In string map, most characters do not hold any special meaning with the notable exception of the backslash itself.

      -- Max Drown (Infor)

    • #69831
      Mike Campbell
      Participant

      I know we’ve got something really dumb here.  Tried all sorts of different things, but the reformatted message isn’t ever getting sent.  The log shows the tilde in the $var, but its not in the message.

      {Report Summary:.brImpression: New report summary for ViewPoint testing..brThis is line two.}

      var before is {Report Summary:.brImpression: New report summary for ViewPoint testing..brThis is line two.}

      X variable is: .br

      Y variable is: ~

      var after is {Report Summary:~Impression: New report summary for ViewPoint testing.~This is line two.}

      {Report Summary:~Impression: New report summary for ViewPoint testing.~This is line two.}

    • #69832

      Try this. Remember that xlateInVals and xlateOutVals are lists.

      proc br_to_tilde [code]proc br_to_tilde

      -- Max Drown (Infor)

    • #69833

      I fixed some errors in my code above. May need to refresh the page.

      -- Max Drown (Infor)

    • #69834
      Mike Campbell
      Participant

      There were a couple of things we changed that finally got it to work.  First off it didn’t work to ‘run’ the tcl code from the xlt.  Then Charlie B. suggested a tweak or two that solved it.  

      “The first thing to *ALWAYS* remember is that xlateInVals and xlateOutVals are lists and should be treated as such.

      Also no need to set xlateOutVals to xlateInVals as, at inbound, they are equal anyway.  Remember the default action is to copy input to output.

      Writing your proc  more succinctly  I would do something like:

      set var [string map

        [lindex $xlateInVals 0]]

        set xlateOutVals

        No need for an if statement.  If there are no .br we have done nothing.  Note however, we first remove the value in xlateInVals from a list context to string and assign xlateOutVals as a list of one element”

        Again..thanks all for the suggestions and help!

Viewing 6 reply threads
  • The forum ‘Tcl Library’ is closed to new topics and replies.

Forum Statistics

Registered Users
5,080
Forums
28
Topics
9,262
Replies
34,296
Topic Tags
278