我疯了还是怎么可能?- 需要帮助解决奇怪的行为在我的应用程序中问题我整天都在进行故障排除。我把它缩小到这个非常奇怪的行为。除非我遗漏了什么,否则不应该这样。
我打开了两张桌子:“棒球”和“篮球”。
我有这个脚本:
Clear Log();
//dt_current=Data Table("Basketball");
/*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/
dt_working=Data Table("Baseball");
Show("This is the dt_working table:");
Show(dt_working<<GET name=""></GET>显然,我正在尝试使用棒球表中的列创建一个列表框。
但这就是我的日志(以及应用程序的其余部分)向我展示的内容:
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"School", "CSN", "Durham Sun", "Durham Herald", "Washington Post", "USA Today", "Sports Magazine", "In Sport", "UPI", "AP", "Sports Illustrated"};出于某种原因,即使我将dt_working指定为Baseball并且表示使用表dt_working创建了Col List Box,它会使用我在顶部工具栏中选择的当前数据表中的列填充Col List Box。
另一个应用程序通常具有不同的代码但该特定部分完全相同的工作方式不同以及我打算如何工作。有人可以帮助我进一步排除故障吗?为什么owuld它填充Col List Box不形成我告诉它填充的表,但从当前表?
从长远来看,我正在尝试显示我在不同列表框中选择的表中的列。另一个应用程序中的类似功能工作正常。这里无论我点击什么表(并运行类似于我引用的代码),它总是显示从顶部选择的表中的列。
谢谢,
M.
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为 @MathStatChem 中写道:
lso,看一下脚本指南中的语法,看来语法不允许使用数据表引用,你必须使用以下语法:
y =列表框(<数据表(名称)>,...)
Col List Box()的参数中的Data Table()不是函数,它是一个命名参数,让Col List Box()知道该参数应该被解释为数据表。因此,它确实将数据表引用作为参数。这是一个例子:
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt2 = Open( "$SAMPLE_DATA\Solubility.jmp" );
New Window("Example", Col List Box( Data Table( dt ), all ) );
不需要<< Get Name消息。
我们将尝试自动检测第一个参数是否是数据表引用。
谢谢 @Justin_Chilton 为了解释。
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为
@ gzmorgan0 中写道:
是的,这是我建议使用ColListBox(数据表(dt_ref << getname),...)
它的工作原理!你今天救了我两次!
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为好吧,也许不是一个bug,我将不得不查找旧的电子邮件,但我在某处找到了ColListBox(dt,...)的引用并标记了JMP。
是的,这是我建议使用ColListBox(数据表(dt_ref << getname),...)
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为另外,看一下脚本指南中的语法,似乎语法不允许使用数据表引用,您必须使用以下语法:
y =列表框(<数据表(名称)>,...)
所以使用此代码
y=Col List Box( Data Table(dt_working<<GET name=""></GET>
给你想要的结果。 我不认为这是一个bug,它只是笨拙的语法。
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为啊,好吧,我明白了。 所以Col List Box使用当前数据表,而不是数据表引用。 快速修复,就是在colList语句之前插入脚本,这句话:
当前数据表(dt_working);
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为是的,我打开了另一个脚本,但它正在工作
意。我将尝试格鲁吉亚的解决方法,让你们知道它是否有效。我曾有一个
强烈的怀疑它是一个大的,我不清楚是什么触发
因为完全相同的代码在另一个应用程序中运行良好。回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为我使用示例数据中的Baseball.JMP表运行您的代码,但我没有看到您看到的行为。 这是我的日志输出。
"This is the dt_working table:";
dt_working << Get Name() = "Baseball";
"Columns names:";
colNamesList = {Player, Batting};
"This is what dt_working still is:";
dt_working << Get Name() = "Baseball";
"But this is what I got in Col List Box:";
colListX << Get Items = {"Player", "Batting"};你有另一个脚本打开你创建colListX引用的地方,也许是另一个表?
最好在脚本开头使用Names Default to Here(1)命令。 如果你不这样做,那么你所有的变量都是全局变量,两个不同的脚本可以互相遍历变量。
回复:我疯了还是怎么可能?- 需要帮助解决奇怪的行为我称之为一个错误。我去年被抓了。 但是,有一个解决方案。 问题是ColListBox没有评估或解析表引用dt_working。 我的建议是使用语法ColListBox(数据表(dt_working <<获取名称),.... 或者在创建colListX时使目标表成为当前数据表。
嗯,我的JSl正在包装。脚本附上。
open("$Sample_data/Basketball.jmp");<BR />open("$Sample_data/Baseball.jmp");<BR /><BR />Clear Log();<BR /> //dt_current=Data Table("Basketball");<BR /> /*Two tables opened: Baseball and Basketball. The table named "Basketball" is selected as current table*/<BR /> dt_working=Data Table("Baseball");<BR /> <BR /> Show("This is the dt_working table:");<BR /> Show(dt_working<<GET name=""></GET> colNamesList = dt_working << Get Column Names;<BR /> show("Columns names:");<BR /> show(colNamesList);<BR /> show(current data table()); //Baseball<BR /> <BR /> colListX = Col List Box (all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> //_______________________________________________________<BR /> <BR /> Write("\!N" ||Repeat("_",60)||"\!N");<BR /> <BR /> //make Basektball current <BR /> <BR /> current data table(Data Table("Basketball"));<BR /> <BR /> colListX = Col List Box (dt_working, all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (NameExpr(dt_working), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET><BR /> colListX = Col List Box (Data Table("Baseball"), all, width(250), maxSelected(1));<BR /> show(colListX<<GET items=""></GET> <BR /> <BR /> colListX = Col List Box (Data Table(dt_working<<GET name=""></GET> show(colListX<<GET items=""></GET><BR /><BR /> Eval( <BR /> Parse( EvalInsert("colListX = ColListBox( ^dt_working^, all, width(250), maxSelected(1));") )<BR /> );<BR /> wait(0);<BR /> show(colListX<<GET items=""></GET>