*createstringarray
Hello,
I have written a TCL script that selects certain elements in my mesh. I want to have these elements put into a string array, so I can use this array to update a certain NASTRAN card, in comments, so I can use them later on in a different routine. The problem now, however, is whenever I try to use *createstringarray it gives back a 0 in the left corner.
The string is in a variable that needs to be substituted into *createstring array:
set elements {213 5342 53 213 642};
set $str [subst {\$BSURF 1 $elements}];
(Note that the BSURF is commented via $, hence the backslash)
*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs'
This following procedure returns a zero. What am I doing wrong?
Thank you for your help and time!
Jeffrey
Answers
-
Hi Jeffrey,
please try the the following in line 2
set str [subst {\$BSURF 1 $elements}];
Only access to a variable needs a '$', not at creation time...
You can insert a check after this line:
tk_messageBox -message 'String : $str'
Here you need the '$'
Regards,
Mario
0 -
Hello Mario,
The '$' was a typo from my side. It appears that the $elements variable that is created in HyperMesh causes an error, while using a user created variable with set numbers seem to work perfectly:
set elements {213 5342 53 213 642};
set str [subst {\$BSURF 1 $elements}];
*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs'Works. The following does not:
$elems is a list created in HyperMesh by means of a TCL script. This is just an ordinary but lengthy list.
set str [subst {\$BSURF 1 $elems}];
*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs'Maybe the error window output gives more insight of what the problem is?
0
while executing
'*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs''
('uplevel' body line 1)
invoked from within
'uplevel #0 {*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs'}'
invoked from within
'interp eval $::tkcon::OPT(exec) $args'
(procedure '::tkcon::EvalSlave' line 2)
invoked from within
'EvalAttached $cmd'Thanks for your help and time.
Jeffrey
0 -
Hi,
sry, can't detect any error. For me it works for elements or elems.
Please check whats inside of $elems
set elems {213 5342 53 213 642};
tk_messageBox -message 'Elementlist : $elems'
set str [subst {\$BSURF 1 $elems}];
tk_messageBox -message 'String : $str'
*createstringarray 3 '\$beginbsurfs' $str '\$endbsurfs'
Normaly TCL strings are not limited, but maybe *createstringarray has a limit in string lenght. Please check it too.
Regards,
Mario
0 -
Hello Mario,
I think the string length is limited. I've created a workaround, grouping ranges of values together. The string created is far smaller than the original string and it does create the string via this method.
Nonetheless, I've checked the items inside $elems and the information is just numbers, element ID numbers.
How and where could I check the maximum length of *createstringarray?
Thank you,
Jeffrey
0 -
Hi Jeffrey,
i don't know a answer, so it is better to contact the Altair hotline.
Regards,
Mario
0