JMPバージョンでのJSLの使用 15.2.0。 JSLコードは、スクリプト名='管理図'で添付のテーブルに埋め込まれています。
可変数のフェーズグループ化と「where」条件のカスタムグラフィックスクリプトを介して仕様制限(LSL、Target、USL)を追加しようとすると、ネストされたループでの動作に苦労しています。私のネストされたループは現在、各チャート/フェーズ/ where条件がそれぞれの制限を受け取る代わりに、作成されたすべての管理図に適用される最後のチャートの仕様制限をもたらします。
正しい方向に微調整してくれてありがとう!
トッド
トッド、JMP / JSLは、より一般的なプログラミング言語と比較すると少し奇妙です。特に、すべてのスコープ制御を自分で行う必要があります。
私はあなたが何を扱っているかを説明する例をここに持っています-以下のスクリプトは"赤"それから"青"グラフィックスクリプトの三角形ですが、代わりに2つの青い三角形のみが作成されます。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle??? ****/
color = "Red";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [75, 120, 120] );
);
/**** Make a blue triangle??? ****/
color = "Blue";
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( color );
Polygon( [60, 72, 57], [85, 130, 130] );
);
これは、JSLがスコープを処理する方法が原因で発生します。 <<グラフィックスクリプトを追加()関数の場合、未評価のステートメントのセットとして追加されます(実際には未評価です)のり()働き)。 内に存在するすべての変数<<グラフィックスクリプトを追加()スクリプトが評価されます実行中のみスクリプトの。グラフィックスクリプトが実行されているとき(覚えておいてください、それはに添付されていますフレームボックスこれはウィンドウの表示ツリーに埋め込まれています)各変数を解決する必要があります。スコープ解決ルールは、それが調査することを指示しますローカルスコープ(存在する場合)、ここスコープ(存在する場合)、次にグローバルスコープ-これらのスコープのいずれにも見つからない場合は、空()価値。
したがって、スクリプトはに追加されますフレームボックスメインスクリプト内ですが、後でのみ実行されます。この後の時点で、色変数は"青" 、したがって、両方の三角形は青です。
これを解決する方法は、関心のある変数を解決することです。追加するときグラフィックスクリプトを実行するときではなく、グラフィックスクリプトを実行します。これを行うには、 Eval(Eval Expr())ここに示すように、方法論。
Names Default To Here( 1 );
Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = Bivariate( Y( :weight ), X( :height ), FitLine );
rbiv = biv << report;
framebox = rbiv[frame box( 1 )];
/**** Make a red triangle!!! ****/
color = "Red";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [75, 120, 120] );
);
) );
/**** Make a blue triangle!!! ****/
color = "Blue";
Eval( Eval Expr(
framebox << Add Graphics Script(
Transparency( 0.5 );
Fill Color( Expr( color ) );
Polygon( [60, 72, 57], [85, 130, 130] );
);
) );
内のすべての変数にこのメソッドを使用する必要があります<<グラフィックスクリプトを追加()それらがその時の値を保持するために機能する<<グラフィックスクリプトを追加()と呼ばれていました。