这是一个错误还是我遗漏了什么?我有一个表(这里简化并称为“TestBug.jsl”),用于生成一些随机数,然后根据表变量进行计算,我们将其称为“模拟器表”,因为每次我重新计算它时,这将是一次我想重复多次的模拟。
然后我有以下脚本来使用不同的输入自动运行相同的模拟多次,并将结果表连接到“结果”表中。
要进行测试,只需使用 TestBug.jsl 作为当前数据表运行脚本,
Names Default To Here(1);
VarList={1,2,3,4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Current Data Table();
MyNS:FinalT=MyNS:Simulator<
<SUBSET></SUBSET>
<P>基本上,脚本根据输入列表和“结果表”中连接的结果数字(不包含公式,只包含数字)迭代并更改模拟器表中的表变量</P> <BR /> <P>因此,脚本最初所做的是创建一个与我的“模拟器”具有相同列的空结果表,然后迭代地更改“模拟器”中的表变量并将其连接到“结果”表</P> <BR /> <P>然而由于某种原因,每次我更改“模拟器”变量的值时,都会在“结果”表中的第二次迭代中创建一个新列,该列具有与变量相同的名称,并以奇怪的模式用值填充它(见图)</P> <BR /> <P>基本上,它将前一次迭代中变量的值添加到新连接行的活动列中,并将最后一次迭代的值添加到所有其他行中……</P> <P>这只是在几次迭代中令人烦恼,但在许多次迭代中会使整个过程变得非常缓慢/崩溃。</P> <P>如果我跳过“连接”或“设置表变量”,则不会添加列。</P> <P>我不明白我做错了什么。</P>
<LINGO-LABS id="lingo-labs-906674" slang="en-US" mode="CREATE">
<LINGO-LABEL>自动化和脚本</LINGO-LABEL>
</LINGO-LABS>
回复:这是一个错误还是我遗漏了什么?这些是通过表变量添加到那里的。例如,您可以在创建子集表后将其从子集中删除,然后在每次连接后将其从子集中删除。
查看更多...
Names Default To Here(1);
VarList = {1, 2, 3, 4};
New Namespace(
"MyNS"
);
MyNS:Simulator = Datatable("TestBug");
MyNS:FinalT = MyNS:Simulator << subset(
Output Table("final table"),
Copy formula(0),
All rows,
Selected columns only(0)
);
MyNS:FinalT << Select All Rows;
MyNS:FinalT << Delete Rows;
Try(MyNS:FinalT << Delete Table Variable("myvar"));
advancementWin = New Window("Progress", TBsizes = Text Box(), );
For(is = 1, is <= Length(VarList), is++,
myVarVal = VarList[is];
TBsizes << set text(
"Simulating:" || Char(myVarVal) || "(" || Char(is) || "/" || Char(Length(VarList)) ||
")"
);
MyNS:Simulator << Suppress Formula Eval(1); //i need this as in the final version i make more changes and i want to avoid recalc of the random each change
MyNS:Simulator << set table variable("myvar", myVarVal);
MyNS:Simulator << Suppress Formula Eval(0);
MyNS:Simulator << Rerun Formulas();
MyNS:FinalT << Concatenate(MyNS:Simulator, Append to first table);
Try(MyNS:FinalT << Delete Table Variable("myvar"));
);
advancementWin << Closewindow();
回复:这是一个错误还是我遗漏了什么?谢谢。这解决了我的问题。
如果我理解正确的话
如果将两个具有不同变量值的表连接起来,则会添加一个新列来“跟踪其在原始表中的值”
我明白为什么有人想这样做,但这是一种令人困惑的奇怪行为
你的技巧解决了这个问题,但为了完整起见,我不得不移动
Try(MyNS:FinalT << Delete Table Variable("myvar"));
连接之前