显示所有打开的表的列表框我正在尝试构建一个列表框,其中列出了所有打开的数据表,并使用新打开/新关闭的表自动更新。 我从下面的脚本开始,但由于某种原因 onClose 函数不起作用。
感谢您的帮助:)
names default to here(1);
f1 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
f2 = function ({Temp_list},
T_list = Temp_list << get name();
lb << remove all;
lb << append (T_list)
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , onclose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
T_list = get data table list ();
lb = listbox(T_list);
)
);
高级统计建模自动化和脚本编写消费者和市场研究数据存取数据混合和清理实验设计大规模定制回复:显示所有打开的表的列表框在对订阅数据表列表进行了更多测试之后,如果可能的话,我会避免它。 它似乎根本不起作用,事件没有触发,关于如何使用它的文档相当糟糕等等。 我在 Windows 10 上使用 JMP16.1.0 Pro。
我有一个应用程序,我希望有这样的东西,但我想我只会添加刷新数据表列表或类似的东西。
回复:显示所有打开的表的列表框谢谢@jthi ! 这样可行!
如果您不介意,您能否也展示一下如何设置“OnRename”子句?
回复:显示所有打开的表的列表框您应该能够向 lb 添加新值,并且仅删除带有索引的封闭值(使用 Contains() 获取索引),还向函数添加了局部变量。
Names Default To Here(1);
f1 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << append (tableList)
);
f2 = function ({Temp_list}, {tableList},
tableList = Temp_list << get name();
lb << Remove Item(Contains(lb << get items, tableList));
);
asub = Subscribe to data table list( , onopen(f1));
Subscribe to data table list(asub , OnClose(f2));
nw = new window("Trial",show menu(0),
vlistbox(
lb = listbox(get data table list ());
)
);回复:显示所有打开的表的列表框谢谢@tx尼尔森!! 这正是我遇到的错误。 我想与此同时我必须找到解决方法。
回复:显示所有打开的表的列表框使用下面的 JSL,这是我发现的。
Names Default To Here( 1 );
f2 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("Close");
);
f1 = Function( {Temp_list},
T_list = Get Data Table List();
lb << remove all;
lb << append( T_list );
show("add");
);
asub = Subscribe to Data Table List( , onopen( f1 ) );
Subscribe to Data Table List(asub , onclose( f2 ) );
nw = New Window( "Trial",
Show Menu( 0 ),
V List Box(
T_list = Get Data Table List();
lb = List Box( T_list );
)
);
- 创建的列表框将添加新的数据表,不会出现错误。
- 每次加法都会执行一次 f1 函数
- 如果关闭数据表,它不会从列表框中删除。
- 如果关闭第二个数据表,则先前关闭的数据表将从列表框中删除。
- 如果关闭列表框并第二次运行 JSL,并关闭数据表,则 f2 函数将运行两次。将运行第一次运行 JSL 中的 f2 函数,然后运行 f2 函数的第二个实例。这可以通过更改 Show() 语句来显示。如果 Show 语句更改为
Show( "Close" );
到Show( "Close 2" );
关闭数据表时,将显示 Show() 语句的两个版本,
- JSL 的后续执行添加了 f2 函数的附加副本,每个副本在每个数据表关闭时执行。
- Clear Globals 和 Clear Symbols 不会消除 f2 函数的早期版本。
这显然是一个 JMP 错误,需要发送给 JMP 支持人员。
我已将错误提交给他们。
回复:显示所有打开表的列表框我用一些新发现来探讨这个话题,也许会帮助到某些人。我尝试做与@Djtjhin类似的事情,遇到了这里描述的所有相同问题,这些问题大多通过这里的讨论得到解决。
我可以补充的是@txnelson描述的奇怪行为的解释。问题是,如果您订阅时没有明确说明订阅名称,如下所示:
asub = Subscribe to data table list( , OnOpen( Show("opening...") ) )每次运行脚本时都会创建一个采用新通用名称(“_DTListSubscriber123”)的新订阅,并在最后增加计数器。
诀窍是明确命名订阅者,以便每次运行脚本时覆盖同一个订阅者,例如:
asub = Subscribe to data table list( "MyDTLSub1", OnOpen( Show("opening...") ) )或者在最后取消订阅,例如在< <>
Unsubscribe to data table list( asub, "ALL" )
在其他新闻中, @Djtjhin ,重命名的工作非常简单,似乎事件是在重命名后触发的,因此 Get Data Table List() 会获取新名称。但是在使它工作之前,由于缺乏文档,我出于另一个原因而绞尽脑汁。与 OnOpen 和 OnClose 相比,OnRename 函数需要 2 个参数(新名称和旧名称/表),否则您将收到错误。虽然在这个特定的列表框示例中您实际上并不需要它们,但如果您需要,您还必须记住它们是不同的变量类型,一个是表,另一个是字符串(见下文)。
Names Default To Here(1);
f = Function ( { new_name_as_table, old_name_as_string },
print(asub||" renaming: "|| old_name_as_string || " to " || (new_name_as_table << get name) );
lb << set items( Get Data table List() );
);
asub = Subscribe to data table list( "MySub", OnRename( f ) );
nw = new window("Trial",show menu(0),
<< On Close(Unsubscribe to data table list( asub, "ALL")),
vlistbox(
lb = listbox(get data table list ());
)
);
dt = Open( "$SAMPLE_DATA/Tiretread.jmp" );
dt << set name( (dt<<GET name=""></GET>Otherwise I agree with general sentiment that the subscriber it's very hard to work with, you have to be really careful to tie up all the loose ends. Better documentation would be much appreciated.