使用下標搜索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 ))),
)
分頁框();
)
)
);
);