Dispatchに添字検索を使用する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />こんにちは、レポートが生成された後、レポートに情報を送信するのに問題があります。 レポートには、インデックスiのforループで作成された複数の分布が含まれています。各配布はそれ自身のアウトラインボックスの中に含まれているので、私は各アウトラインボックスの中に他のものをたくさん追加し、関連する資料を一緒にグループ化することができます。 これらの各ディストリビューションへの参照を保存します(distObjと呼びます)。そして、distObj [1] <<と指定することでそれらを変更できます。私たちは、レポート内に配置されているラジオボックスを使用しています。アウトラインボックスごとに(つまり、配布ごとに)3つのラジオボックスを使用しています。 異なるラジオボタンをクリックすると、i番目のパラメータの軸を3つの異なる方法のうちの1つでスケールすることができます。 スクリプトが完了した後、変数iは、forの各反復の場合のように各ボックスにマップされなくなりました。これは、最終値まで増分されたためです。 どのボタンのセットがクリックされたのか(本質的には 'i'だったもの)を把握し、対応するディストリビューションにのみ限界スケーリング情報を送る必要があります。 添え字をハードコーディングしても機能することを確認しましたが、実際には機能しません。
私は実際にレポートに格納されるように番号iで番号編集ボックスを書くなどのいくつかのことを試みましたが、私はまだその特定の変数を取得しようとすると問題に出くわします。。
スクリプトガイドに何か手助けができると思うものがありますが、その使い方がわかりません。 JMP 10のスクリプトガイド、ディスプレイツリーの章、下付き文字の335ページ。 彼らは、ディスプレイボックスdbに対して、JSLは?を使用してコードdb ["text"]またはdb ["text?"]を使用することによって "text"を持つオブジェクトを見つけることができると示唆している。ワイルドカードとして。 私がこれが私を助けることができると思う理由は、i番目のパラメータのための添え字に頼る代わりに、私はちょうどdistObjに基づいて一致を見つけるだろうということです。 ラジオボタンが1つのノードを探し出してアウトラインボックスに移動する(または同じノードに留まる)コマンドを送信し、適切なdb参照を取得してそこからコマンドを送信するようにしたいと思っています。 私はこれを機能させようとしました、しかし、私がこれで間違った木を吠えているかどうか疑問に思わなければなりません。
これが私のスクリプトの関連部分です。 ラジオボックスセクションでは、"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 << Get(数値); show(stored_i); // < - numbox is just
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 << Get(数値);
distObj [stored_i] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(newMin [stored_i])、Max(newMax [stored_i])、Inc(2)、
小目盛り(1)、回転ラベル(「水平」)}
;);
)
RB3 = radioBox( "スケール方法3"、stored_i = numBox << Get(数値);
distObj [stored_i] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(newLSL [stored_i])、Max(newUSL [stored_i])、Inc(2)、
小目盛り(1)、回転ラベル(「水平」)}
;);
)
numBox = Number edit box(i)、// < - numBoxは添え字が付いていないので動作しません
// stored_i = numBox << Get(数値)
// numParam = numParamVal << Get(数値);
)
RB1 <<グループ(rb2 )<<グループ(rb3) )
Hリストボックス(
distObj =分布(
Y(評価リスト(newYparamName )))
)
改ページボックス()。
)
)
;
;
再:ディスパッチのための添字検索を使用するこのスレッドについての最後のフォローアップ:変数が古くなっているために古いバージョンのレポートでラジオボックスをクリックするとエラーが発生するという上記の問題は、スクリプトが追加としてインストールされても問題ないことがわかります。-に。 .jslファイルには「デフォルトの名前はhere(1)」が含まれているので、.jslファイルを直接実行して失敗した理由はわかりません。 しかし、いずれにせよ、私は後世のためにこのスレッドを更新したいと考えました。
誰かが一般的なエラー処理のための答えを持っているならば、それは評価されるでしょう。私はいくつかの奇妙なユーザー入力を考慮に入れなかった場合に備えて、一般的なエラーの包括的なエラーである何かを探しています。スクリプトを適切に終了してください。
ありがとう。
再:ディスパッチのための添字検索を使用するこのスクリプトに潜在的な問題があることに気付きましたが、それを複数回実行して前のレポートウィンドウを開いたままにした場合に限られます。 レポートの前のインスタンスのラジオボックスは、最新のレポートウィンドウインスタンスにメッセージを送信します。これが起こる理由は私には理にかなっていますが、生成されたレポートが20プロットまで繰り返され、2番目が3プロットまで繰り返されると、最初のウィンドウのラジオボタンの最初の3セットは最新のウィンドウにコマンドを送ります。4〜20のラジオボタンはエラーになります(私の場合はdistObj [4] ... distObj [20]は定義されていません。 その長いEval Insert()文字列にdistObjが参照しているものをコーディングすることは可能ですか、それともJSLに尋ねるには多すぎますか?
また、エラー処理キャッチオールはありますか?エラーが表示されないようにするために、Eval Insert()文字列にコードを記述できると思いますが、他に未処理のエラーが発生している可能性があるかどうかわかりません。例えば、エクセルVBAでは、"on error goto errorHandler"のようなものを使い、最後にちょっと "errorHandler:"ルーチンを使って上品に終了するとうまくいきます。
ありがとう。
再:ディスパッチのための添字検索を使用するMSさん、ありがとうございます。
私は数日間あちこちでコードをあちこち遊んできました、そして私はデリミタのためにより良い感じを得ています。 私はあなたの更新されたコードが好きで、そしてDispatch()が面倒であることに同意します。 私は新しいコードに変換しました。
ダブルクリックダイアログには表示されませんが、軸を右クリックしたときに表示されるオプションがあるため、「軸を元に戻す」を使用することは可能かもしれません。私はそれがブール値の設定というよりはむしろ機能であると思うだろう。 大したことではありません。スクリプトから機能を削除しました。 この機能のような理由は、JMPが私よりもずっときれいに軸を拡大縮小できるからです。 私はいくつかの数学的方法を試してみましたが、一貫して機能するものは何も見つかりませんでした。 (私はUSL、LSL、min()、max()、inc()を設定するためのスペック幅の計算をたくさん試しました)。
JSLを単語にコピーアンドペーストし、次に単語の外にFF(Win XP)をコピーして貼り付けるクイックテスト。 よさそうだ、ありがとう。
hlb_1 << 追加する (
評価 (
解析する (
評価挿入 (
"\ [^" rb1 ["|| char(i)||"] "^ =ラジオボックス("データのスケール+制限 "、)
report(distObj [^ i ^])[AxisBox(1)] << Min(^ minMinLSL_scale ^)<<最大値(^ maxMaxUSL_scale ^)<< Inc(^ inc1_scale ^);
if(nitems(^ groupList ^)> = 1&groupList [1]!= 0の場合、(k = 1、k <= nitems(^ groupList ^)、k ++、
レポート(oneObj [^ i ^])[AxisBox(1)] << Min(^ minMinLSL_scale ^)<<最大値(^ maxMaxUSL_scale ^)<< Inc(^ inc1_scale ^);
))
)
] \ "
)
)
)
) ;
再:ディスパッチのための添字検索を使用するQ&A
スクリプト内のiが区切り文字 '^'を持つのにdistObjがしないのはなぜですか?
distObjの周りの区切り文字では動作しませんでした。おそらくオブジェクトを指す変数が必要だからです(例えばdistObj [1])。十分に評価すれば、リストItemを平文で得ることになるでしょう。すなわちDistribution []は、文字列が解析されたときにJMPには意味がありません。
軸を元に戻すために上記のコードのセクション(ラジオボックスの1つ)を変更する方法はありますか?
流通プラットフォーム向けではないようです。機能しません。軸をダブルクリックして軸設定ダイアログを呼び出すと、[軸を元に戻す]チェックボックスは表示されません。
また、コードを貼り付けるためのあなたの方法は何ですか?
JSLエディタからブラウザにコピーして貼り付けるだけです。新しいフォーラムでは、ほとんどのフォーマットは保持されていますが、インデントは部分的に失われています。私が正しく覚えているなら、古いフォーラムで私は最初にMS Wordに、そして次にブラウザに貼り付けなければなりませんでした。私はJMP 10 for Macを使います。Windowsでは、動作が異なる可能性があります。
これらすべてをどこで学びましたか?
自己勉強、多くの試行錯誤、そしてフォーラムに参加している人々を助けることは私に多くのことを実際に教えてくれました。
ところで、私はめったにDispatch()メソッドを使用しません。構文は複雑で、主に自動生成されたスクリプトにあります。もっと簡単な方法は、メッセージを目的のディスプレイボックスに直接送信することです(コマンド<< show tree structureは、特定のデータベースのアドレス指定方法を見つけるのに便利です。ここでは例えばdistObj [1] << show tree structureを試してください)。
これを上記のスクリプトと比較してください(抜粋)。
hlb_1 << 追加する (
評価 (
解析する (
評価挿入 (
"\ [rb1 [^ i ^] = radioBox("スケール方法3 "、report(distObj [^ i ^])[AxisBox(1)] << Min(^ newMin ^)<<最大(^ newMax) ^))] \ "
)
)
)
) ;
再:ディスパッチのための添字検索を使用する軸を元に戻すために上記のコードのセクション(ラジオボックスの1つ)を変更する方法はありますか?軸を元に戻すコマンドがあることを私は知っていますが、それを動作させることができないようです、以下は2つの試みです。
また、コードを貼り付けるためのあなたの方法は何ですか?jslファイルをアップロードしますか?あなたのフォーマットを複製することはできませんでした。
hlb_1 << append((
評価(
解析(
評価挿入(
"\ [^" rb4 ["|| char(i)||"] "^ = radioBox(" Revert Axis "、
distObj [^ i ^] << SendToReport(
ディスパッチ(
{}、
"1"、
軸ボックス(1)
軸を元に戻す
;);
)]」
)
/ *
評価挿入(
"\ [^" rb4 ["|| char(i)||"] "^ = radioBox(" Revert Axis "、
distObj [^ i ^] [axis box(1)] << axisを元に戻す。
)]」
)* /
)
)
;
再:ディスパッチのための添字検索を使用するこんにちは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 = {"年齢"、"身長"、"体重"};
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(評価リスト(newYparamName) )))
)
改ページボックス()
)
)
;
//(j = 1、j <= 3、j ++、の場合
hlb_1 << append((
評価(
解析(
評価挿入(
"\ [^" rb1 ["|| char(i)||"] "^ = radioBox("スケール方法1 "、
distObj [^ i ^] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(^ newMin ^)、最大(^ newMax) ^)}
;);
)]」
)
)
)
;
hlb_1 << append((
評価(
解析(
評価挿入(
"\ [^" rb2 ["|| char(i)||"] "^ = radioBox("スケール方法2 "、
distObj [^ i ^] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(^ newLSL ^)、最大(^ newUSL) ^)}
;);
)]」
)
)
)
;
hlb_1 << append((
評価(
解析(
評価挿入(
"\ [
^ "rb3 [" || char(i)|| "]" ^ = radioBox( "スケール方法3"、
distObj [^ i ^] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(^ newLSL2 ^)、最大(^ newUSL2) ^)}
;);
)]」
)
)
)
;
//);
RB1 <<グループ(rb2 )<<グループ(rb3) ;
;
再:ディスパッチのための添字検索を使用するループ内でレポートを段階的に作成する場合は、の値を「固定」することが重要です。私ディスプレイボックスとそのアクションスクリプト これを行う1つの方法は、文字列を使用してから各反復で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 [ 私 ] =
分布 ( Y ( 評価リスト ( newYparamName [ 私 ] ) ) ) 、
) 、
改ページボックス ()
)
)
) ;
にとって ( j = 1 、 j <= 3 、 j ++、
hlb_1 << 追加する (
評価 ( 解析する ( 評価挿入 (
"\ [^" rb "|| char(j)||" ["|| char(i)||"] "^ = radioBox("スケール方法 "|| char(^ j ^)、
distObj [^ i ^] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(^ newMin^)、最大(^ newMax)^)}
;);
)]」
)))
)
) ;
RB1 [ 私 ] << グループ ( RB2 [ 私 ] ) << グループ ( RB3 [ 私 ] ) ;
) ;
再:ディスパッチのための添字検索を使用するこれは上記のコードのバージョンで、bigクラスをサンプルファイルとして使用しています。 ここでも、stored_iは更新されておらず、トリックはラジオボックスのどのSETがコマンドを送信しているのかを突き止めています。どんな提案にも感謝しています。
ログを消去();
名前のデフォルトはhere(1)です。
グローバルをクリア();
dtData = Open( "$ SAMPLE_DATA / Big Class.jmp");
// dtData = data table( "Big Class.jmp");
// show(dtData);
newMin = {12、15、64};
newMax = {17、70、172};
newLSL = {10、40、50};
newUSL = {20、80、200}。
newYparamName = {"年齢"、"身長"、"体重"};
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 << Get(数値); show(stored_i); // < - numbox is just
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 << Get(数値);
distObj [stored_i] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(newMin [stored_i])、Max(newMax [stored_i])、Inc(2)、
小目盛り(1)、回転ラベル(「水平」)}
;);
)
RB3 = radioBox( "スケール方法3"、stored_i = numBox << Get(数値);
distObj [stored_i] << SendToReport(
ディスパッチ(
{}、
"1"、
ScaleBox、
{Min(newLSL [stored_i])、Max(newUSL [stored_i])、Inc(2)、
小目盛り(1)、回転ラベル(「水平」)}
;);
)
numBox = Number edit box(i)、// < - numBoxは添え字が付いていないので動作しません
// stored_i = numBox << Get(数値)
// numParam = numParamVal << Get(数値);
)
RB1 <<グループ(rb2 )<<グループ(rb3) )
Hリストボックス(
distObj =分布(
Y(評価リスト(newYparamName )))
)
改ページボックス()。
)
)
;
;