CL 6.0: hcismat issue ‘bad vfariable name’

Homepage Clovertech Forums Read Only Archives Cloverleaf Cloverleaf CL 6.0: hcismat issue ‘bad vfariable name’

  • Creator
    Topic
  • #53707
    Jim Kosloskey
    Participant

    After converting old SMAT format to new – using hcismatconvert – trying to extract to a nl file get an error:

    –> hcismat -i converted.idx -nl -orsf converted.nl -sall

    hcismat: Invalid argument bad variable name “::SMAT::argArray(TARGET)”: upvar won’t create a scalar variable that looks like an array element

    Anyone else experienced this or have suggestions?

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

Viewing 22 reply threads
  • Author
    Replies
    • #78660
      Chris Williams
      Participant

      Jim,

      We’re not up on 6.0 yet, but I did get some sample SMAT files from the vendor so we can be prepared. The OFFSET and LENGTH values from the idx file will still give you the messages you want without the new stuff that is tacked onto the end of each message.

      Cheers.

    • #78661
      Jim Kosloskey
      Participant

      Chris,

      Thanks,

      Yes we have a Tcl proc originally written by Jim Cobane we can use. That has been tested and gives us what we want.

      We do want the Cloverleaf distributed command hcismat to function though. I think this is broken in 6.0. The thought is it is related to a new release of Tcl and the way something is written in the hcismat tool.

      We would like to confirm though that others on 6.0 are experiencing the same issue. It would be noce if someone else that has 6.0 could give hcismat a run. It appears the issue has nothing to do with the data but rather the handling of the arguments.

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

    • #78662
      Charlie Bursell
      Participant

      Jim:

      Any chance I can get a copy of the SMAT file.  I can’t duplicate the error

      This was written with 6.0 in mind and I have never had a problem with it

    • #78663
      Jim Kosloskey
      Participant

      Charlie,

      I will get a file to your email address tomorrow if that is OK.

      This is a 5.6 SMAT file which was run through the hcismatconvert utility to convert it to 6.0 format.

      Thanks for looking into this.

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

    • #78664
      Charlie Bursell
      Participant

      I think I found it Jim.  It seems that getopt acts differently in Tcl 8.5 and Tcl 8.4.  Try this one and let me know.

      I still need to work on making it work with old style SMAT files

      If on Unix just remove the .htc

    • #78665
      Jim Kosloskey
      Participant

      Charlie,

      Will do and will report back – probably tomorrow.

      Thanks again my friend.

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

    • #78666
      Keith McLeod
      Participant

      Was hoping to normalize my date/time range for a more accurate compare between smat files.  Looking for the correct syntax for hcismat.

      Using something like this:

      hcismat -i to_somewhere_adt.obsv.141109.1.idx -nl -sds 201411091200 -sde 201411091700 -oruf /hci/cis6.1/integrator/somewhereprod/data/61_to_somewhere_adt.nl

      Not having much luck with the date/time range.  Any suggestions?

      It does write out all the messages and not the specified range.  I have tried changing oruf to orsf which returns nothing.

    • #78667
      Charlie Bursell
      Participant

      Kieth:

      I rewrote hcismat as the old version depended on using Tk which does not work any more.  I tried to keep it the same as before only adding the -nl flag.

      I tested dates with a SMAT file of my own and it seems to work OK for me.  Could it be that you used the -oruf flag that says you want unselected records? If you want the selected records, use -orsf.

      I tested it using 5.8 since that is where I wrote it.  I seem to be having a problem with running using my Cloverleaf 6.0.  I get the error message:

      hcismat: Invalid argument bad variable name

      “::SMAT::argArray(TARGET)”: upvar won’t create a scalar variable that looks like an array element

      It looks like the optargs routine I use to parse arguments may have changed with Tcl  8.5

      Will someone that has both the hcismat script and 6.0+ give this  a try and see if you get the same error?  I just want to make sure I am not spoofing myself before I chase this too much.

    • #78668
      Keith McLeod
      Participant

      I am using the version downloaded from above jun 17 2013, I believe.  I am on CLoverlaf 6.1.  I was able to run it on 5.7 and 6.1 SMATS, just not for a selected date and time.

      I just ran against all my SMATS across sites using this command inside a script. Similar for 57.

      hcismat -i ${smatfile} -nl -orsf ${in}/${curDir}/data/61_${filebase}_${dt}.nl -sall

      The date still eludes me.  I have used both oruf and orsf.  I have even thrown in -sdn.  It looks like whether sdn is used or not it saves to the SELECTED array, before you use intersect3 for res.  I haven’t spent a lot of time on it yet…

      I just figured if I could take a range of time where I knew both SMAT files were relatively equal, I could compare messages more easily…

      You know I appreciate all the help you have provided.  I will be looking in the morning but need to keeep moving forward on my compares….deadlines loom.

    • #78669
      Charlie Bursell
      Participant

      Strange!  I am able to select a range of dates using mine/  I will download he one I uploaded before to see if differences

    • #78670
      Charlie Bursell
      Participant

      Kieth:

      Did some more check on the one I downloaded from here.  First I no longer get error under 6.0 – very strange.

      Next I found I had forgotten to change the time from SMAT from offset to YYYYMMDDHHMM before compare.  I have changed this one.  I will continue to test here.  I appreciate any further testing you do with this

      Most people just use it as a quick and dirty to convert SMAT to NL but it should be more than that

      Thanks

    • #78671
      Robert Kersemakers
      Participant

      Hi Charlie/Keith,

      I have been looking at hcismat as well, as we are getting 12 MB messages (=files) in SMAT that we can’t open in the GUI.

      I tried this last version, but it still won’t work. I had a look and put in some echo’s:

      Code:

      orbis_0210 /prod/cloverleaf/sites60/orbis/exec/processes/transport> hcismat -i prhc_hr_dvb_in -orsf test_rk01.txt -nl -sds 20141111
      start: ; end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:

      hcismat: 3 written to test_rk01.txt

      You have new mail in /var/spool/mail/hci
      orbis_0210 /prod/cloverleaf/sites60/orbis/exec/processes/transport> hcismat -i prhc_hr_dvb_in -orsf test_rk01.txt -nl -sds 20141111 -sde 20141111
      start: ; end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:

      hcismat: 0 written to test_rk01.txt

      orbis_0210 /prod/cloverleaf/sites60/orbis/exec/processes/transport> hcismat -i prhc_hr_dvb_in -orsf test_rk01.txt -nl -sds 20141111000000 -sde 20141111235900
      start: ; end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:

      hcismat: 0 written to test_rk01.txt

      The SMAT contains 3 messages, 1 message each day.

      So the first try should give me 1 message: the message of today. But because the startdate is only a date (YYYYMMDD), it will be always smaller than a complete timestamp (YYYYMMDDHHMMSS).

      In tries 2 and 3 the enddate is given and it should work, but the ‘clock format $time’ is missing the %S, so time is always smaller than startdate and no messages are returned. Adding %S will make it work if you

      I think the best thing to do is ‘clock scan’ all input-dates into seconds and compare those, but you will need to take into account that only dates can be input instead of complete timestamps. I haven’t got the time to do this myself right now; will keep you updated if I find some time.

      Zuyderland Medisch Centrum; Heerlen/Sittard; The Netherlands

    • #78672
      Charlie Bursell
      Participant

      Did you try the new one  I just posted?

    • #78673
      Robert Kersemakers
      Participant

      Hi Charlie,

      Yes, this was tested with the new one.

      Zuyderland Medisch Centrum; Heerlen/Sittard; The Netherlands

    • #78674
      Charlie Bursell
      Participant

      When you give a start and no end date the end date will default to something like the year 2045.  It expects a timestamp not a date.  If you wanted everyting since 20141111 just input 201411110000.  If you want only that date then input 201411110000 – 201411112359

      Won’t that work for you?

    • #78675
      Robert Kersemakers
      Participant

      You will need to change

      Code:

         # Select if match – convert time to YYYYMMDDHHMM
         if {[clock format $time -format %Y%m%d%H%M] >= $START && $time <= $END} {

      into

      Code:

         # Select if match – convert time to YYYYMMDDHHMMSS
         if {[clock format $time -format %Y%m%d%H%M%S] >= $START && $time <= $END} {

      so with %S in the time format.

      If you do this then yes, inputting a complete timestamp will work:

      Code:

      orbis_0210 /prod/cloverleaf/sites60/orbis/exec/processes/transport> hcismat -i prhc_hr_dvb_in -orsf test_rk01.txt -nl -sds 20141111000000 -sde 20141111235900
      start: ; end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:
      time: ; clock format time: ; start: ;end:

      hcismat: 1 written to test_rk01.txt

      However (and don’t shoot the messenger…) the ‘help’ mentions that it is possible to input a date, without a time.

      Zuyderland Medisch Centrum; Heerlen/Sittard; The Netherlands

    • #78676
      Keith McLeod
      Participant

      I made this change.  I think this works, but will run a few more tests.

      regsub — {(d{8})(.*)$} $START {1 2} s_start

      regsub — {(d{8})(.*)$} $END {1 2} s_end

                 if {$time >= [clock scan $s_start] && $time <= [clock scan $s_end]} {

      So far I got the correct results.

    • #78677
      Robert Kersemakers
      Participant

      Hi Keith,

      If you don’t specify either the start or end, then these will be defaulted to a ‘seconds’ value (0 resp. 2145852000). Then your regsubs will go wrong, right?

      And Charlie: I see now that you mentioned the start/end dates in the form ‘YYYMMMDDHHMM’, without the seconds. Used like this,  the last version will work. But this also deviates from what is mentioned in the ‘usage’ of this script.

      I may be nitpicking though…

      Zuyderland Medisch Centrum; Heerlen/Sittard; The Netherlands

    • #78678
      Charlie Bursell
      Participant

      I thought the usage statement listed it as a time stamp.  I will take a look and change as required

      Let me know of any needed enhancements and I will consider them

      Just trying to make an old command usable in today’s environment  ðŸ˜€

    • #78679
      Keith McLeod
      Participant

      I set START to default to 000000000000 so the criteria is met.  Not ssure how much effort to make old smat files from 5.7 work.  That would be helpful especial using the START and END Date/Times.  It looks like in some of the code lgets is used instead of gets in the while loop to accomodate the stanza structure of the .idx file.  I ran the command manual and it appeared to work, however only pulled ‘{‘ more often than not.  The code would exit where the one of the three keys is blank. This is in the selectDate proc.

      # If no OFFSET or LENGTH or TIMEIN bad file

        if {$off eq “” || $len eq “” || $time eq “”} {

         puts stderr “n$myName: Invalid or corruted SMAT file

      $argArray(SMATFILE).idx”

      puts stderr “Exit ……………n”

      exit -64

         }

    • #78680
      Charlie Bursell
      Participant

      I stand corrected.  I forgot the time was optional.  I guess I never did test the dste stuff enough – sorry bout that.

      While in there I found a couple of other “undocumented enhancements”  ðŸ˜€

      Plus it seems the clock command will not scan a date past 20371231. I did not know that.  I will query the Tcl gurus about that.

      Here is my latest.  Please feel free to put it through the wringer and make suggestions or comments, even snide comments.

      As always for UNIX simply remove the .htc suffix make it executable and owned by hci.  If on pre-6.0 you will have to replace the one in the $HCIROOT/bin directory with this one.   On 6.0+ you could just ut in the contrib directory

      I don’t have any pre-5.8 SMAT files to test with or I would see about making the script work with those.  I will look around and see if I can find some.   If you have any that do not contain PHI data send me some

    • #78681
      Charlie Bursell
      Participant

      I should have checked.  I was testing using 5.8

      The scan limitaton with the clock command only applies to pre-Tcl 8.5 – Cloverleaf 5.8 or less.  You can scan well into the next century with the new clock command

    • #78682
      Robert Kersemakers
      Participant

      Hi Charlie,

      Just tested with dates (full timestamps and only dates), mids, not, sending (un)selected, newline or len10. Everything works!

      Only thing I haven’t tested is resending the messages to a thread.

      Thanks!

      Zuyderland Medisch Centrum; Heerlen/Sittard; The Netherlands

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

Forum Statistics

Registered Users
5,117
Forums
28
Topics
9,292
Replies
34,435
Topic Tags
286
Empty Topic Tags
10