[scilab-Users] variables from TCL in Scilab
François Vogel
fvogelnew1 at free.fr
Fri Mar 26 21:26:13 CET 2010
marcin.wozniczka Gazeta.pl said on 26/03/2010 20:00:
> Example of this function in TCL is below:
Please stop trying formatting your code when posting. Italics is
really awful to read (my opinion) and does not ease error detection
(just a fact).
> /for {set i 1} {$i <= ($::npkt)} {incr i} {/
> / pack [entry .pol.n.nr$i -width 7 -justify right
> -textvariable nr$i -validate key -vcmd {expr {[string is double %P] &&
> ![string match ""0*"" %P] && [string len %P] <=7}}]/
> /}/
Why [string match ""0*"" %P] ?
This triggers an error in Tcl. Use [string match "0*" %P]
> /function []=calc()/
> /n=evstr(TCL_GetVar("npkt"));/
> /for i=1:n/
> / b ="nr''+string(i) //name of variables in TCL/
> / nr_pkt(i)=evstr(TCL_GetVar("b"));/
> /end/
> /endfunction/
Read carefully your line:
> / b ="nr''+string(i) //name of variables in TCL/
This cannot work. Italics does not let you see the problem.
What works is:
b ="nr"+string(i) //name of variables in TCL/
> After executed program inScilab and used this finctionI have information:
> / !--error 999 /
> /TCL_GetVar: Could not read Tcl Variable./
> /at line 14 of function liczpol called by : /
> /liczpol()/
> /while executing a callback/
> /
> /
> Could anyone know what is wrong with this function?
Yes.
nr_pkt(i)=evstr(TCL_GetVar("b"));
tries to retrieve variable named "b" from Tcl.
You rather want:
nr_pkt(i)=evstr(TCL_GetVar(evstr("b")));
Also your function cal should return a result, otherwise nr_pkt is
lost upon endfunction.
Try:
function nr_pkt=calc()
instead of
function []=calc()
> And I have question about second function which should return calculated
> variables to TCL. Is this function is write correctly?
> /function []=result()/
> /n=evstr(TCL_GetVar("nrxp"));/
> /for i=1:n/
> / x/
> ='xp'+string(i) //name of variables in TCL
> //
> /
> /
> TCL_SetVar("x",r(i)) //r(i) are results
> /
> /
> /end/
> /endfunction/
Same issue. You probably want:
TCL_SetVar(evstr("x"),r(i))
and not:
TCL_SetVar("x",r(i))
Francois
More information about the users
mailing list