.jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか?私は JSL に関してはまったくの初心者で、まだ勉強中です。
グラフ ビルダーで確認する必要があるファイルが多数あり、それぞれに異なる列数があります。 唯一変わらないのは、列 1 をオーバーレイとして、列 2 を X 軸に、列 3 を Y 軸に、残りのすべての列を列スイッチャーにしたいことがわかっていることです。 これらの設定を使用して、現在開いているすべてのデータ テーブルのすべてのグラフ ビルダー ウィンドウを開くスクリプトがあればいいのですが、その方法がわかりません。 これが私が得た最も近いものです:
Graph Builder(
Size( 1900, 1200 ),
Variables(
X( :Column(2) ),
Y( :Column(3) ),
Overlay( :Column(1) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( :Column(3) ),
SendToReport(
Dispatch(
{},
"",
ScaleBox
)
)
);
助けが必要な 2 つのこと: (1) 何も言わずにデータ テーブル内のすべての列を自動的にロードするように列スイッチャーを設定する方法を理解すること、(2) 開いているすべての列を反復するループでこのスクリプトをラップすることデータテーブル。
前もって感謝します!
マスカスタマイゼーションRe: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですかここで助けてくれた人たちのおかげで、私自身のことはあまり加えていないような気がします。 これは基本的に私が最終的に得たものです:
目標は、テキスト ファイルでいっぱいのフォルダーを一度に 1 つずつ調べてロードし、いくつかの設定が事前に設定されたグラフ ビルダー ウィンドウを表示し、グラフ ビルダーを閉じると自動的に開くスクリプトを作成することでした。次の。
私が使用したアプローチは、グローバル変数を使用して管理することでした。「regFlist」は開いておきたいファイルのリストで、「stopReg」はオンにするとプロセスを中断するフラグです。
2 つのスクリプトがあります: (1) reg_Next.jsl -- regFlist をチェックし、空の場合は使用するフォルダーを要求します。それ以外の場合は、regFlist リストから次のファイルをロードします (regStop が設定されていない場合)。(2) reg_Stop.jsl -- 単純に regFlist を空にして、regStop 変数を設定します。プロセスを早期に停止するために使用されます。
私は .jsl に関してはまったくの初心者なので、フィードバックや建設的な批判を歓迎します。
reg_Next.jsl
//!<BR /><BR />// use global variables (since hey, what could go wrong? ;)</img> )
Names Default To Here( 0 );
// get path to self
selfPath = get default directory() || "/reg_Next.jsl";
// check to see if user has requested a stop
If( stopReg == 1 ,
stopReg = 0;
regFlist = {};
Stop();
);
// initialize list of files to review if there aren't any in the list
If( Is Empty( regFlist ) | N Items( regFlist ) < 1,
jmpDir = Pick Directory( "Select the jmp directory." );
regFlist = Files In Directory( jmpDir );
);
// open data table and remove it from the regFlist
dt = Open( jmpDir || "/" || regFlist[1] );
regFlist = Remove( regFlist, 1 );
// set up for column switcher
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
// open graph builder
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
// set up mechanism to re-run myself when graph builder is closed
If( N Items( regFlist ) == 0,
gb << on close( Close( dt, nosave ) ),
gb << on close(
Close( dt, nosave );
Open( selfPath, Run JSL( 1 ) );
)
);reg_Stop.jsl
//!
Names Default To Here( 0 );
regFlist = {};
stopReg = 1;Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか@BHarrisあなたのソリューションをこのディスカッションに追加して、ディスカッション コミュニティ全体が利用できるようにしていただければ幸いです。
Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか私はそれを考え出した。 JMP にターミナルがあればいいのにと思うことがあります...
他にも同じ解決策を探している人がいたら、返信してください。私が最終的にたどり着いた解決策を共有します。
Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか@txnelson -- これを機能させるために Scripting Index と Scripting Guide を 3 時間ほど費やしましたが、「on close()」関数で次のファイルを開く方法がわかりませんでした。 これは私がうまくいくはずだと思っていたのに、うまくいかないものです。
(注意してください、目標は、これらのファイルを一度に 1 つずつ実行し、グラフ ビルダー ウィンドウを表示してファイルを評価できるようにすることです。その後、グラフ ビルダー ウィンドウを閉じると、データ テーブルが閉じて次のファイルが開くはずです。そしてそれをプロットします。)
このスクリプトは「jmp_reg_4.jsl」という名前で、私のデスクトップ上にあります。
Names Default To Here( 0 ); // <-- trying to use globals so the file list will be maintained between invocations
/*
All of what you suggest is doable in JMP.
You can use "Files in Directory()" to get the file list, and then loop through them.
You can attach an "On Close()" function to the Graph Builder object, which will close the current data table, and then go get the next file from your list of files from the "Files in Directory()" list.
Examples and description are in the Scripting Index
Help==>Scripting Index
*/
If( Not( As Global( "flist" ) ),
jmpDir = Pick Directory( "Select the jmp directory." );
flist = Files In Directory( jmpDir );
);
dt = Open( jmpDir || "/" || flist[1] );
Remove( flist, 1 );
colList = dt << get column names( string );
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
Remove From( colList, 1, 2 );
gb = dt << Graph Builder(
size( 800, 600 ),
Variables( X( As Column( col2 ) ), Y( As Column( col3 ) ), Overlay( As Column( col1 ) ) ),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) )
);
cs = gb << Column Switcher( col3, colList );
gb << on close(
Close( dt, nosave );
run script( "/Users/bh/Desktop/jmp_reg_4.jsl" );
);調査するファイルのグローバル リストを作成していると思っていましたが、呼び出すたびに、"flist" (file-list) 変数にまだ要素がある場合は、次の要素を取得してロードし、プロットするだけです。 しかし、期待どおりに動作しません。グラフビルダーウィンドウを閉じると、データテーブルは正しく閉じられますが、それ以外は何もしません。
Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか私も方法を見つけることができませんが、Tab キーを数回押すと、フォーカスが列スイッチャーの列のリストに移動します。

Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか2 番目のリクエストを実行する方法がわかりません。Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですかありがとう!
私のリストの #2 はどうでしょうか? (#3は分かると思います...)Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですかあなたが提案したことはすべてJMPで実行可能です。
「Files in Directory()」を使用してファイルリストを取得し、それらをループすることができます。
「On Close()」関数をグラフ ビルダー オブジェクトにアタッチすると、現在のデータ テーブルが閉じられ、「Files in Directory()」リストのファイル リストから次のファイルを取得できます。
例と説明はスクリプト索引にあります。
ヘルプ==>スクリプトインデックス
Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですか印象的! 私は「Column Switcher( :Column(3), :Column(all) )」とそのバリエーションを使用しようとし続けました。
スクリプトに対するこれらの改善は可能でしょうか? (1) 代わりに txt ファイルが入ったフォルダーを用意し、それらをグラフ ビルダーで一度に 1 つずつ開くようにします。グラフ ビルダーを閉じると、対応するデータ テーブル ファイルが閉じて、次のファイルが自動的に開きます。(2) 自動的にフォーカスを列スイッチャーに移動すると、列スイッチャー ボックスをクリックする必要がなく、すぐに変数への矢印操作を開始できます。(3) グラフ ビルダー ウィンドウが開いたときに画面上でフル サイズにします。
JMP は急速に私のお気に入りのソフトウェアになりつつあります。Re: .jsl の列スイッチャーにすべての列を自動的に追加するにはどうすればよいですかスクリプトは非常に簡単です。
Names Default To Here( 1 );
// Loop across all data tables
For( i = 1, i <= N Table(), i++,
dt = Data Table( i );
// Find all of the column names
colList = dt << get column names( string );
// Get the first 3 columns for special processing
col1 = colList[1];
col2 = colList[2];
col3 = colList[3];
// Remove first 2 from column switcher columns from the overall list
Remove From( colList, 1, 2 );
// Run the Graph Builder
dt << Graph Builder(
Size( 570, 621 ),
Variables(
X( As Column( col2 ) ),
Y( As Column( col3 ) ),
Overlay( As Column( col1 ) )
),
Elements( Points( X, Y, Legend( 10 ) ), Line( X, Y, Legend( 11 ) ) ),
Column Switcher( col3, colList )
);
);