使用下标搜索Dispatch<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />嗨,我在生成报告后向报告发送一些信息时遇到了一些麻烦。 该报告包含多个分布,这些分布在索引为i的for循环中创建。每个分布都包含在自己的大纲框中,这样我就可以在每个大纲框中添加许多其他内容,并将相关材料组合在一起。 我存储了对这些发行版中的每一个的引用(称为distObj ),我可以通过将它们称为distObj来改变它们[1] << ... 等等,但这里有一个问题:我正在使用位于报告中的无线电盒,每个大纲框中有一组3个无线电盒(即每个分发)。 单击不同的单选按钮将仅以3种不同方式中的1种缩放第i个参数的轴。 在脚本完成之后,变量i不再映射到每个框,因为它已经增加到其最终值。 我需要弄清楚点击了哪一组按钮(基本上是'我'),并将限制缩放信息仅发送到相应的发行版。 我已经验证了它是否有效,如果我硬编码下标但是真的不起作用。
我已经尝试过一些东西,比如写一个带有数字i的数字编辑框,这样我实际上就会存储在报告中。但是我仍然遇到试图获取特定变量的问题(它也需要下载) 。
我认为脚本指南中有些东西可以帮助我,但我不知道如何使用它。 JMP 10脚本指南的第335页,显示树章节,下标。 他们建议对于一个显示框db,JSL可以使用代码db [“text”]或db [“text?”]使用?找到带有“text”的对象。作为通配符。 我认为这可以帮助我的原因是,我只是找到一个基于distObj的匹配,而不是依赖于i'th参数的下标。 我希望得到它,所以单选按钮发送命令,找到并向上走一个节点到大纲框(或保持在可能的同一节点),获取正确的数据库引用并从那里发送命令。 我试图让这个工作,但我不得不怀疑我是否正在用这个咆哮错误的树。
这是我脚本的相关部分。 在单选框部分中,“stored_i”变量也可以只是“i”。 这是一项没有真正奏效的测试。
有任何想法吗?
custRpt =新窗口(titleString,
AnaNotesBox =大纲框(“分析笔记”,
文本框(textString1),
)
);
distObj = {};
rb1 = {};
rb2 = {};
rb3 = {};
paramBoxList = {};
对于(i = 1,i <= AdjNumParam,i ++,
custRpt << append(
ParamBoxList =大纲框(newYparamName ,
V列表框(
hlistbox(
RB1 = radioBox(“缩放方法1”,show(“test1”); stored_i = numBox <<获取(数值); show(stored_i); // < - numbox只是
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newMin [stored_i],newLSL [stored_i]),Max(newMax [stored_i],newUSL [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
RB2 = radioBox(“缩放方法2”,stored_i = numBox <<获取(数值);
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newMin [stored_i]),Max(newMax [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
RB3 = radioBox(“缩放方法3”,stored_i = numBox <<获取(数值);
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newLSL [stored_i]),Max(newUSL [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
numBox =数字编辑框(i),// < - numBox未下标,所以这不起作用
// stored_i = numBox <<获取(数值)
// numParam = numParamVal <<获取(数值);
)
RB1 <<组(rb2 )<<组(rb3 )
H列表框(
distObj =分布(
Y(评估列表(newYparamName ))),
)
分页框();
)
)
);
);
Re:使用下标搜索Dispatch关于这个帖子的最后一个跟进:我上面提到的问题,在旧版本的报告上单击单选框会抛出错误,因为变量是陈旧的,当脚本作为添加安装时结果不是问题-在。 我在.jsl中有“名称默认为here(1)”,所以不确定为什么它直接运行.jsl失败了。 但无论如何,我想我会为后代更新这个帖子。
如果有人有一般错误处理的答案,那将不胜感激。我正在寻找一个通用的错误捕获所有东西,以防我没有考虑到一些奇怪的用户输入。我希望脚本能够优雅地退出。
谢谢。
Re:使用下标搜索Dispatch我注意到这个脚本中存在一个潜在的问题,但只有在多次运行它并打开以前的报告窗口时才会出现问题。 来自上一个报告实例的单选框将向最新的报告窗口实例发送消息。这对我来说是有意义的,但是如果报告生成迭代到20个图,第二个迭代到3个图,那么第一个窗口上的前3组单选按钮将命令发送到最新窗口,并设置4到20个单选按钮会导致错误(在我的情况下,distObj [4] ... distObj [20]未定义)。 是否可以编写distObj引用的那个长Eval Insert()字符串,或者这对JSL要求太多了?
此外,是否有错误处理catchall?我想我可以在Eval Insert()字符串中编写代码以防止错误显示,但我不知道其他未处理的错误可能潜伏在哪里。例如,在excel VBA中,使用诸如“on error goto errorHandler”之类的东西,然后在结尾处使用一些“errorHandler:”例程来优雅地退出将很好地完成这一操作。
谢谢。
Re:使用下标搜索Dispatch感谢MS的所有回复。
我已经在这里和那里玩了几天代码,我对分隔符有了更好的感觉。 我更喜欢你更新的代码,我同意Dispatch()是混乱的。 我已转换为新代码。
我认为可以使用“revert axis”,因为即使它在双击对话框中不可用,当你右键单击轴时也有一个选项。我认为它更像是一个函数,而不是一个布尔设置。 没有大碍。我刚从脚本中删除了该功能。 像这个功能的原因是因为JMP可以比我更清洁地扩展轴。 我已经尝试了几种数学方法,但没有找到任何可持续工作的东西。 (我已经尝试了许多USL,LSL,spec宽度的计算来设置min(),max(),inc())。
快速测试将JSL复制/粘贴到word中,然后将单词转换为FF(Win XP)。 看起来不错,谢谢。
hlb_1 << 附加 (
EVAL (
解析 (
评估插入 (
“\ [^”rb1 [“|| char(i)||”]“^ = radioBox(”缩放到数据+限制“,
报告(distObj [^ i ^])[AxisBox(1)] << Min(^ minMinLSL_scale ^)<< Max(^ maxMaxUSL_scale ^)<< Inc(^ inc1_scale ^);
if(nitems(^ groupList ^)> = 1&groupList [1]!= 0,for(k = 1,k <= nitems(^ groupList ^),k ++,
报告(oneObj [^ I ^])[AxisBox(1)] << Min(^ minMinLSL_scale ^)<< Max(^ maxMaxUSL_scale ^)<< Inc(^ inc1_scale ^);
))
)
] \”
)
)
)
) ;
Re:使用下标搜索DispatchQ&A
为什么脚本中的i得到分隔符'^'但是distObj没有?
它不适用于distObj周围的分隔符。可能是因为需要指向对象的变量(例如distObj [1])。完全评估后,我们将以明文形式获取列表项,即在解析字符串时对JMP没有任何意义的Distribution []。
有没有办法修改上面代码的一部分(其中一个单选框)来恢复轴?
它似乎不适用于分发平台。它不起作用,如果您在轴上双击以调用轴设置对话框,您将看到没有Revert Axis复选框。
另外,你粘贴代码的方法是什么?
我只是将JSL编辑器复制并粘贴到浏览器中。在新论坛中,大部分格式都被保留,但缩进部分丢失。在旧的论坛中,我必须首先粘贴到MS Word中,然后进入浏览器,如果我没记错的话。我使用JMP 10 for Mac。在Windows上,它可能会有所不同。
你是从哪里学到这一切的?
自我研究,大量的试验和错误,以及在论坛上帮助人们实际上教会了我很多。
顺便说一句,我很少使用Dispatch()方法。语法很复杂,主要在自动生成的脚本中找到。更简单的是将消息直接发送到感兴趣的显示框(命令<< show tree structure对于找出如何寻址特定数据库很有用;这里尝试例如distObj [1] << show tree structure)。
将其与上面的脚本进行比较(仅限摘录):
hlb_1 << 附加 (
EVAL (
解析 (
评估插入 (
“\ [rb1 [^ i ^] = radioBox(”缩放方法3“,报告(distObj [^ i ^])[AxisBox(1)] << Min(^ newMin ^)<< Max(^ newMax ^))] \“
)
)
)
) ;
Re:使用下标搜索Dispatch有没有办法修改上面代码的一部分(其中一个单选框)来恢复轴?我知道有一个恢复轴命令,但似乎无法让它工作,下面是两次尝试。
另外,你粘贴代码的方法是什么?你上传了一个jsl文件吗?我无法复制您的格式。
hlb_1 <<追加(
的eval(
解析(
Eval Insert(
“\ [^”rb4 [“|| char(i)||”]“^ = radioBox(”Revert Axis“,
distObj [^ i ^] << SendToReport(
调度(
{},
“1”,
轴箱(1),
恢复轴
));
)] \”
)
/ *
Eval Insert(
“\ [^”rb4 [“|| char(i)||”]“^ = radioBox(”Revert Axis“,
distObj [^ i ^] [轴箱(1)] <<恢复轴;
)] \”
)* /
)
)
);
Re:使用下标搜索Dispatch你好MS,
首先,非常感谢你的帮助。numbox试图访问任何被点击的rbx实例。它没用。
我不得不稍微更改你的脚本因为我的j-loop中的列表实际上有不同的名字所以我需要输入整个东西(见下文)。 通过这些编辑,一切都运行良好(到目前为止)。我们将看到JMP如何处理各种限制的大小调整。
我有一些问题。 为什么脚本中的i得到分隔符'^'但是distObj没有?我花了一些时间来弄清楚那些特殊角色在做什么,但我仍然对这一点感到困惑。
你是从哪里学到这一切的?通过SAS自学或正式的JMP培训?
dtData = Open(“$ SAMPLE_DATA / Big Class.jmp”);
dtData:age <<建模类型(连续);
newMin = {12,50,64};
newMax = {17,70,172};
newLSL = {10,40,50};
newUSL = {20,80,200};
newLSL2 = {5,20,0};
newUSL2 = {25,100,300};
newYparamName = {“age”,“height”,“weight”};
adjNumParam = 3;
{distObj,paramBoxList,rb1,rb2,rb3} = {{},{},{},{},{}};
custRpt =新窗口(“标题”,
AnaNotesBox =大纲框(“分析笔记”,
文本框(“信息......”),
)
);
对于(i = 1,i <= AdjNumParam,i ++,
custRpt << append(
ParamBoxList =大纲框(newYparamName ,
vlb = V列表框(
hlb_1 = H列表框(),
hlb_2 = H列表框(
distObj =
分布(Y(Eval List(newYparamName ))),
)
分页框()
)
)
);
//对于(j = 1,j <= 3,j ++,
hlb_1 <<追加(
的eval(
解析(
Eval Insert(
“\ [^”rb1 [“|| char(i)||”]“^ = radioBox(”缩放方法1“,
distObj [^ i ^] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(^ newMin ^),Max(^ newMax ^)}
));
)] \”
)
)
)
);
hlb_1 <<追加(
的eval(
解析(
Eval Insert(
“\ [^”rb2 [“|| char(i)||”]“^ = radioBox(”比例法2“,
distObj [^ i ^] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(^ newLSL ^),Max(^ newUSL ^)}
));
)] \”
)
)
)
);
hlb_1 <<追加(
的eval(
解析(
Eval Insert(
“\ [
^“rb3 [”|| char(i)||“]”^ = radioBox(“缩放方法3”,
distObj [^ i ^] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(^ newLSL2 ^),Max(^ newUSL2 ^)}
));
)] \”
)
)
)
);
//);
RB1 <<组(rb2 )<<组(rb3 );
);
Re:使用下标搜索Dispatch在循环中逐步构建报表时,重要的是“硬连接”值一世在displayboxes及其动作脚本中。一种方法是使用字符串,然后在每次迭代中使用Parse(Evalinsert(“code”))来更新和评估代码。虽然不是很漂亮,但代码串通常可以更容易地控制正在发生的事情。
下面是尝试让您的示例代码更好地工作。我跳过了numBox的东西,因为我无法弄清楚它为什么存在。
dtData = 打开 ( “$ SAMPLE_DATA / Big Class.jmp” ) ; dtData : 年龄 << 建模类型 ( 连续 ) ;
newMin = { 12 , 15 , 64 } ;
newMax = { 17 , 70 , 172 } ;
newLSL = { 10 , 40 , 50 } ;
newUSL = { 20 , 80 , 200 } ;
newYparamName = { “年龄” , “高度” , “重量” } ; adjNumParam = 3 ;
{ distObj , paramBoxList , RB1 , RB2 , RB3 } = {{} , {} , {} , {} , {}} ;
custRpt = 新窗户 ( “标题” ,
AnaNotesBox = 大纲框 ( “分析笔记” ,
文本框 ( “信息...” ) ,
)
) ;
对于 ( 一世 = 1 ,一世 <= AdjNumParam ,一世 ++,
custRpt << 附加 (
ParamBoxList [ 一世 ] = 大纲框 ( newYparamName [ 一世 ] ,
VLB = V列表框 (
hlb_1 = H列表框 () ,
hlb_2 = H列表框 (
distObj [ 一世 ] =
分配 ( ÿ ( 评估列表 ( newYparamName [ 一世 ] ) ) ) ,
) ,
分页框 ()
)
)
) ;
对于 ( Ĵ = 1 , Ĵ <= 3 , Ĵ ++,
hlb_1 << 附加 (
EVAL ( 解析 ( 评估插入 (
“\ [^”rb“|| char(j)||”[“|| char(i)||”]“^ = radioBox(”Scale method“|| char(^ j ^),
distObj [^ i ^] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(^ newMin^),Max(^ newMax^)}
));
)] \”
)))
)
) ;
RB1 [ 一世 ] << 组 ( RB2 [ 一世 ] ) << 组 ( RB3 [ 一世 ] ) ;
) ;
Re:使用下标搜索Dispatch这是上面代码的一个版本,它将按原样运行,使用大类作为示例文件。 同样,stored_i没有得到更新,并且诀窍是弄清楚哪些无线电盒的SET正在发送命令。对任何建议我都很感激。
清除日志();
名称默认为here(1);
clear globals();
dtData = Open(“$ SAMPLE_DATA / Big Class.jmp”);
// dtData =数据表(“Big Class.jmp”);
//节目(dtData);
newMin = {12,15,64};
newMax = {17,70,172};
newLSL = {10,40,50};
newUSL = {20,80,200};
newYparamName = {“age”,“height”,“weight”};
adjNumParam = 3;
custRpt =新窗口(“标题”,
AnaNotesBox =大纲框(“分析笔记”,
文本框(“信息......”),
)
);
distObj = {};
rb1 = {};
rb2 = {};
rb3 = {};
paramBoxList = {};
对于(i = 1,i <= AdjNumParam,i ++,
custRpt << append(
ParamBoxList =大纲框(newYparamName ,
V列表框(
hlistbox(
RB1 = radioBox(“缩放方法1”,show(“test1”); stored_i = numBox <<获取(数值); show(stored_i); // < - numbox只是
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newMin [stored_i],newLSL [stored_i]),Max(newMax [stored_i],newUSL [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
RB2 = radioBox(“缩放方法2”,stored_i = numBox <<获取(数值);
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newMin [stored_i]),Max(newMax [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
RB3 = radioBox(“缩放方法3”,stored_i = numBox <<获取(数值);
distObj [stored_i] << SendToReport(
调度(
{},
“1”,
ScaleBox,
{Min(newLSL [stored_i]),Max(newUSL [stored_i]),Inc(2),
小蜱(1),旋转标签(“水平”)}
));
)
numBox =数字编辑框(i),// < - numBox未下标,所以这不起作用
// stored_i = numBox <<获取(数值)
// numParam = numParamVal <<获取(数值);
)
RB1 <<组(rb2 )<<组(rb3 )
H列表框(
distObj =分布(
Y(评估列表(newYparamName ))),
)
分页框();
)
)
);
);