tcl错误“;应为浮点数,但得到“0”;

tcl错误“;应为浮点数,但得到“0”;,tcl,Tcl,我将tcl与OpenSees程序一起使用(参见问题)。OpenSees在TCL中提供的一个命令是block2D,其语法如下: block2d $nx $ny $e1 $n1 element elementArgs { 1 $x1 $y1 <$z1> 2 $x2 $y2 <$z2> 3 $x3 $y3 <$z3> 4 $x4 $y4 <$z4> } 其中block2D命令中使用的变量在开头设置。不幸的是,当我运行此脚本时,出现以下错误: WARNI

我将tcl与OpenSees程序一起使用(参见问题)。OpenSees在TCL中提供的一个命令是
block2D
,其语法如下:

block2d $nx $ny $e1 $n1 element elementArgs {
1 $x1 $y1 <$z1>
2 $x2 $y2 <$z2>
3 $x3 $y3 <$z3>
4 $x4 $y4 <$z4>
}
其中
block2D
命令中使用的变量在开头设置。不幸的是,当我运行此脚本时,出现以下错误:

WARNING block2D numX? numY? startNode? startEle? eleType? eleArgs?: invalid node coordinate for node: 1
expected floating-point number but got "$blockwidth"
我不明白为什么会这样。其他OpenSees命令允许传入变量。为什么这个会有什么不同


我已经在
blockwidth
变量上尝试了
expr
eval
命令的不同变体和嵌套。。。所有这些都没有用…

问题是您在该命令中请求了一个未替换的文本:

block2D $nx $ny 1 1 quad "1 PlaneStrain2D 1" {
    1 0.0 0.0
    2 $blockwidth 0.0
    3 4.0 2.0
    4 0.0 2.0
}
这就是在大括号中的意思。那就好了,除非你想要一个替代品。有几种明智的方法可以做到这一点:

使用双引号的单词 使用
subst
命令 使用
list
构建列表
就性能而言,第三个选项可能是最好的,但第二个选项的可读性可能更高(尽管速度最慢),特别是如果您不喜欢像第一个选项那样使用多行“字符串”。

问题是您要求在该命令中使用未替代的文本:

block2D $nx $ny 1 1 quad "1 PlaneStrain2D 1" {
    1 0.0 0.0
    2 $blockwidth 0.0
    3 4.0 2.0
    4 0.0 2.0
}
这就是在大括号中的意思。那就好了,除非你想要一个替代品。有几种明智的方法可以做到这一点:

使用双引号的单词 使用
subst
命令 使用
list
构建列表
就性能而言,第三个选项可能是最好的,但第二个选项可能更具可读性(尽管速度最慢),特别是如果您不喜欢像第一个选项那样使用多行“字符串”。

引号做到了这一点。谢谢,是引用的。谢谢
block2D $nx $ny 1 1 quad "1 PlaneStrain2D 1" "
    1 0.0 0.0
    2 $blockwidth 0.0
    3 4.0 2.0
    4 0.0 2.0
"
block2D $nx $ny 1 1 quad "1 PlaneStrain2D 1" [subst {
    1 0.0 0.0
    2 $blockwidth 0.0
    3 4.0 2.0
    4 0.0 2.0
}]
block2D $nx $ny 1 1 quad "1 PlaneStrain2D 1" [list \
    1 0.0 0.0 \
    2 $blockwidth 0.0 \
    3 4.0 2.0 \
    4 0.0 2.0 \
]