フォルダ内のスクリプトにリンクされたボタンの動的リストこんにちは、JMP クルーの皆さん!
参照先のフォルダにあるスクリプトにリンクするボタンを備えた動的なウィンドウを作成する方法について、何らかのガイダンスをいただければと思います。フォルダに 2 つのスクリプトがある場合は、2 つのボタン ボックスを備えたウィンドウが作成されます。50 個のスクリプトがある場合は、50 個のボタン ボックスが作成されます。理想的には、ボタン ボックスを何列に配置するかをウィンドウに動的に指示する方法があるかもしれません。
ご協力いただければ幸いです。
スティーブ
自動化とスクリプトRe: フォルダ内のスクリプトにリンクされたボタンの動的リストこれは、JMP のサンプルとしてインストールされたスクリプトを使用したサンプルです。JMPPRO がない場合は、ディレクトリ参照を JMPPRO から JMP に変更する必要があります。また、バージョン番号 18 を、使用しているバージョン番号に変更する必要があります。
Names Default To Here( 1 );
dir = "C:\Program Files\JMP\JMPPRO\18\Samples\Scripts";
files = Files In Directory( dir );
For( i = N Items( files ), i >= 1, i--,
If( Word( -1, files[i], "." ) != "jsl",
Remove From( files, i, 1 )
)
);
theExpr = "";
For Each( {scr}, files,
theExpr = theExpr || ",ButtonBox(\!"" || Word( -2, scr, "./\" ) || "\!", include(\!""
|| dir || "\" || scr || "\!") )"
);
Eval(
Parse(
"nw = New Window( \!"Scripts\!",
Outline Box( \!"Select Script to Run\!",
Lineup Box( N Col( 4 )"
|| theExpr || " )
)
);"
)
);

私は Eval(Parse()) 方法論は使いたくないのですが、より読みやすい構文バージョンを検討するには遅すぎることがわかりました。この方法は役に立ちます。私のコードを改善するために他のコミュニティ メンバーを探してください。
Re: フォルダ内のスクリプトにリンクされたボタンの動的リスト@txnelson最もクリーンなコードではないと思われるかもしれませんが、動作は素晴らしいです! ご協力と迅速な対応に感謝します!!
スティーブ
Re: フォルダ内のスクリプトにリンクされたボタンの動的リスト
Re: フォルダ内のスクリプトにリンクされたボタンの動的リストJim のコードの少し異なるバージョン (Filter Each で .jsl ファイルのリストを取得し、Eval(EvalExpr()) でパス付きのボタンを追加します)
Names Default To Here(1);
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(4));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
lub
);
);
何をしているかに応じて、各ボタンが呼び出す関数/式を用意することも検討してください。ただし、これを堅牢な方法で行うには、少し余分な作業が必要になるため、これらのよりシンプルなソリューションを作成する方法を知っておくことは常に良い考えです。
Re: フォルダ内のスクリプトにリンクされたボタンの動的リスト@jthiと@txnelsonこれについてもう一度あなたの意見を聞かせてもらえませんか:
ラインアップ ボックスの値を持つ数値編集ボックスを追加し、次に数値編集ボックスの値を適用してウィンドウ内のスクリプト ボタンの方向を変更するボタン ボックスを追加したい場合、どのように見えるでしょうか。
こんな感じ

Re: フォルダ内のスクリプトにリンクされたボタンの動的リストこれは、どのようにそれを行うかのアイデアを与えるかもしれません
Names Default To Here(1);
init_cols = 4;
dir = "$SAMPLE_SCRIPTS/";
dir = Convert File Path(dir, windows);
files = Files In Directory(dir);
jslfiles = Filter Each({filename}, files, Word(-1, filename, ".") == "jsl");
// Not sure how you would like to determine column count, but with Lineup box it is fairly easy
lub = Lineup Box(N Col(init_cols));
For Each({filename}, jslfiles,
Eval(EvalExpr(
lub << Append(Button Box(filename,
nw = New Window(Expr(filename),
Script Box(Load Text File(Expr(dir || filename)), "JSL", 600, 600)
);
));
));
);
nw = New Window("Scripts in " || dir,
Outline Box("Click to Open a Script",
V List Box(
Lineup Box(N Col(2),
Button Box("Press to update Col count", << Set Function(function({this},
lub << N Col((this << sib) << get)
))),
Number Edit Box(init_cols)
),
lub
)
);
);
数値編集ボックスはコミット(<<関数の設定())/変更(<<数値の変更の設定())でもトリガーできるので、必ずしもボタンは必要ありません。