説明
待っている間スニペットをスクリプトエディタに追加する完成させたいので、スクリプト エディターでスクリプトを作成するときに少なくともある種のスニペットを作成できるように、すぐにアドインを作成しました。 アドインはかなり早く組み立てられましたが、まだバグや問題が残っています (特に UI 内のさまざまな要素に焦点を当てる場合)。 そこにはこのアドインへの変更により、現在のスニペットやその場所の機能が損なわれる可能性があります。
スニペットとは何ですか? スニペットは、再利用可能なソース コード、マシン コード、またはテキストの小さな領域を表すプログラミング用語です (ウィキペディア、スニペット_(プログラミング) )。 スニペットを使用すると、再利用可能なコード ブロックをコードにすばやく挿入できます。 これにより時間を節約し、スニペットを手動で入力した場合に発生する可能性のある間違いを減らすことができます。
インストール
アドインは以下で構築されていますアドインマネージャー、少なくとも JMP16 が必要で、Windows をサポートしています (OSX でも動作する可能性がありますが、テストできず、サポートされているホストはアドイン マネージャーで Win に設定されています)。
このページからアドインをダウンロードし、通常の JMP アドインのインストールと同じように (ダブルクリックして) インストールします。 アドインは (デフォルトで) ショートカット キーバインドを使用します。 Ctrl+Shift+スペース。 アドインを初めて実行すると、ユーザーにフォルダーを作成 $DOCUMENTS呼ばれたjmp_script_editor_snippetsユーザーがカスタム スニペットを保存するために使用できる (フルパスは C:\Users\ のようなものです) <ユーザー名> \Documents\jmp_script_editor_snippets\)。 スニペット ファイルは基本的に、アドインのスニペット フォルダーまたはユーザーのドキュメント スニペット フォルダーから見つかる単なる .jsl ファイルです。
使用法:
書く#snippet <オプションの検索語> (オプションで、ユーザーは #snippet 全体を書き込む代わりに #sni または #snip を使用できます)。 #snippet は検索値として使用され、オプションの検索語を含めると、検索バーに事前に入力するために使用されます。 コードに #snippet を追加した後、Ctrl+Shift+Space を押して JMP Script Editor スニペット ウィンドウを起動し、正しいスニペットを検索して OK を押します (単に Enter を押すか、Tab を使用して Enter に移動することもできます)。 #snippet 行は、選択したスニペットに置き換えられます。 以下はスニペットウィンドウの画像です

スニペットウィンドウ
ユーザーがアドインを実行し、スクリプト ボックスに #snippet が見つからない場合は、何も起こりません。 スニペットを挿入したくない場合は、Esc キーを押します。 誤ってスニペットを挿入してしまった場合は、Ctrl+Z を押して変更を元に戻すことができます。
ユーザーはこのコミュニティ ページにアクセスしてヘルプを入手したり、アドイン メニューからスニペット フォルダーを開くことができます

プリインストールされたスニペット
これらのスニペットの名前は意図的に短くされているため、ユーザーは名前全体を次のように簡単に書くことができます。 <オプションの検索語> #スニペットの後。 この方法でスニペットを使用すると、ユーザーはすぐに Enter キーを押して目的のスニペットを使用できるようになります。
新しい背景
もっと見る...
new_bg_gb
もっと見る...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:weight), Y(:height), Overlay(:sex)),
Elements(Points(X, Y, Legend(9)), Line Of Fit(X, Y, Legend(11)))
);
名前のデフォルトはここ(1)です。 dt = open("$SAMPLE_DATA/Big Class.jmp"); gb = dt << グラフ ビルダー( 変数(X(:体重), Y(:身長), オーバーレイ(:性別)), 要素(ポイント(X, Y, 凡例(9)), フィット線(X, Y) 、凡例(11))) );
もし
もっと見る...
If(condition1,
//code1
, //else
//code2
);
If(条件1, //コード1 , //else //コード2 );
エリフ
もっと見る...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
If(条件1, //コード1 , //条件2, //コード2 , //else //コード3 );
機能
もっと見る...
function1 = function({param1, param2, param3 = .}, {Default Local},
/*"""function1 which returns missing.
More description regarding the function
Args:
param1 (displaybox):
param2 (char):
param3 (num):
Returns:
num: missing
Raises:
exception_msg
"""*/
return(.);
);
function1 = function({param1, param2, param3 = .}, {Default Local}, /*"""function1 は欠落値を返します。 関数に関する詳細な説明 Args: param1 (displaybox): param2 (char): param3 (num): Returns: num: missing Raises:Exception_msg """*/ return(.); );
新しい
もっと見る...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
/*"""このスクリプトの 1 文の説明 作成者: 作成日: 作成 JMP バージョン: 説明: Todo: * * """*/ Names Default To Here(1);
新しい
もっと見る...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
nw = New Window("name", V List Box(align("Center"), ) , << Set Window Icon("JMP") );
モーダル
もっと見る...
nw = New Window("Modal Window", << modal, << return result,
H List Box(
Panel Box("Options",
lb = List Box({})
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
, << Set Window Icon("Warning")
);
If(nw["Button"] != 1,
Throw("Cancelled");
);
nw = 新しいウィンドウ("モーダル ウィンドウ", << モーダル, << return result, H リスト ボックス( パネル ボックス("オプション", lb = リスト ボックス({}) ), パネル ボックス("アクション", ラインアップ ボックス( N Col(1), Button Box("OK"), Button Box("Cancel") ) ) , << Set Window Icon("Warning") ); If(nw["ボタン"] != 1, Throw("キャンセル"); );
SQL
もっと見る...
dsn_string = "";
sql_template = "\[
select 1
from dual
]\";
dbc = Create Database Connection(dsn_string);
sql = Eval Insert(sql_template, "¤"); // use ¤ to avoid issues with regex when using ^
dt = Execute SQL(dbc, sql, "NewTable");
Close Database Connection(dbc);
dsn_string = ""; sql_template = "\[デュアルから 1 つを選択]\"; dbc = データベース接続の作成(dsn_string); sql = Eval Insert(sql_template, "¤"); // ^ を使用するときに正規表現の問題を回避するには、¤ を使用します。 dt = Execute SQL(dbc, sql, "NewTable");データベース接続(dbc)を閉じます。
試す
もっと見る...
Try(
Show(a);
, // Catch
show(exception_msg);
);
Try( Show(a); , // show(例外_msg); ); をキャッチします。
私も追加しましたコミュニティ_テンプレート.jsl $DOCUMENTS スニペット フォルダーに保存されます。これは、JMP コミュニティからのスクリプト ソリューションを保存するために使用します。
もっと見る...
/*"""
author: jthi
date: YYYY-MM-DD
url: https://community.jmp.com/t5/Discussions/
keywords/tags: []
"""*/
Names Default To Here(1);
例
この簡単な例では、新しいスクリプトを作成します。 このスクリプトには、SQL クエリを実行して結果テーブルを返す関数が 1 つあります。
まず、新しい .jsl スクリプト ファイルを開始します。 書くことから始めます
#snippet new
次に、アドインを実行してそのスニペットを置き換えます。 #snippet 行にスニペット名全体を事前に書き込んでいるので、それが事前に選択されます。

アドインを開いた直後に Enter キーを押すだけで、そのスニペットを使用できます。
次に、 func スニペットを使用して新しい関数を追加します。
#snippet func
そしてその中にSQLスニペットを追加します
#snippet sql
私の現在のコードは次のようになります。
もっと見る...
/*"""This Add-In provides Snippet functionality to JMP Script Editor.
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
function1 = function({param1, param2, param3 = .}, {Default Local},
/*"""function1 which returns missing.
More description regarding the function
Args:
param1 (displaybox):
param2 (char):
param3 (num):
Returns:
num: missing
Raises:
exception_msg
"""*/
sql_template = "\[
select 1
from dual
]\";
dbc = Create Database Connection(dsnstring);
sql = Eval Insert(sql_template, "¤"); // use ¤ to avoid issues with regex when using ^
dt = Execute SQL(dbc, sql, "NewTable");
Close Database Connection(dbc);
return(.);
);
/*"""このアドインは、JMP Script Editor にスニペット機能を提供します。 作成者: 作成日: 作成 JMP バージョン: 説明: Todo: * * """*/ Names Default To Here(1); function1 = function({param1, param2, param3 = .}, {Default Local}, /*" ""関数 1 が欠落していることを返します。 関数に関する詳細説明 引数: param1 (displaybox): param2 (char): param3 (num): 戻り値: num: missing 発生:Exception_msg """*/ sql_template = "\[ select 1 from Dual ]\"; dbc = Create Database Connection(dsnstring); sql = Eval Insert(sql_template, "¤"); // ^ を使用するときに正規表現の問題を回避するには、¤ を使用します dt = Execute SQL(dbc, sql, "NewTable"); Close Database Connection(dbc) ); 戻る(。); );
関数内にインデントを追加してクリーンアップし、ドキュメント文字列を入力すると、最終的にスクリプトは次のようになります。
もっと見る...
/*"""Example on the usage of JMP Script Editor Snippets
Author: jthi
Creation Date: 2022-12-19
Creation JMP Version: JMP Pro 16
"""*/
Names Default To Here(1);
get_data = function({duration = 1}, {Default Local},
/*"""Function to query data from sql
Args:
duration (num): days to query
Returns:
datatable: queried data table
"""*/
dsn_string = "DSN=dBASE Files;DBQ=C:/Program Files/SAS/JMPPRO/16/Samples/Import Data/;"
sql_template = "\[
select *
from tables
where
data > sysdate - ¤duration¤
]\";
dbc = Create Database Connection(dsn_string);
sql = Eval Insert(sql_template, "¤");
dt = Execute SQL(dbc, sql, "Query Result");
Close Database Connection(dbc);
return(dt);
);
/*"""JMP Script Editor スニペットの使用例 作成者: jthi 作成日: 2022-12-19 作成 JMP バージョン: JMP Pro 16 """*/ Names Default To Here(1); get_data = function({duration = 1}, {Default Local}, /*"""SQL からデータをクエリする関数 引数: 期間 (数値): クエリまでの日数 戻り値: datatable: クエリされたデータ テーブル """*/ dsn_string = "DSN=dBASE Files;DBQ=C:/Program Files/SAS/JMPPRO/16/Samples/Import Data/;" sql_template = "\[ select * from tables where data > sysdate - ¤duration¤ ]\"; dbc =データベース接続の作成(dsn_string); sql = Eval Insert(sql_template, "¤"); dt = SQL の実行(dbc, sql, "クエリ結果"); データベース接続を閉じる(dbc); return(dt); );
以下は、上記の例に基づいたアドインの使用法を示す短いビデオです。
将来の仕事の可能性
- 適切な .md ファイルを作成する
- 挿入されたコードが正しいインデントになるように、スニペットの前に空白/タブの処理を追加します。
- ヘルプ ボタンとユーザー スニペット フォルダーを開くボタンをアドインのメニューに追加します
- 「ヘルプ」ページの作成も必要です。 ヘルプ ページは、.md を .html に変換して作成することも、このコミュニティ ページを使用して作成することもできます。
- フォーカスの問題を解決しようとする
- 設定オプションを追加
- 無効なスニペット、snippet_str、リスト ボックスの nlines
- #snippet を必要とせずにスクリプト ウィンドウの最後にスニペットを追加する可能性
- おそらく、スニペットにいくつかの値を事前に入力できるようにする、より複雑な構文を考えてください。
- #snippet !param1 !param2 (または類似のもの)
- もしかしたら、スクリプト内の変数の値の評価を許可することもできるでしょうか? これには別の構文が必要ですか、それともすでにそうなっていますかフィーチャークリープ?
- スクリプトエディタの隣にスニペットリストを埋め込む可能性
- 事前に作成されたスニペットをさらに追加する
- スニペットに説明を追加する機能を追加
変更ログ
バージョン 2.0 (2022 年 12 月 20 日)
- 新しいスニペット: modal と if を追加しました。 新しい elif が古い if スニペットに置き換わりました
- 値のリストを使用するようにスニペット チェックを変更しました。 #sni と #snip を追加のキーワードとして追加しました (現在のリスト #sni、#snip、#snippet)
- 新しい構成可能な変数を追加しました
- 約 80 文字のコードに合わせてスクリプト プレビューを幅広にしました
- アドインメニューに「ヘルプ」ボタンを追加しました
- アドイン メニューにスニペット フォルダーを開くボタンを追加しました
- スニペット使用時のインデントのサポートを追加しました
バージョン 2.0.1 (2022 年 12 月 22 日)
- スニペットから空の行が削除される問題を修正しようとしました
@ほぎ
JSL を使用して、スクリプト ボックス内のユーザーのカーソル位置に直接アクセスできるかどうかはわかりません。 PowerShell と Windows DLL を使用して回避策を実行することもできますが、このアドインについては、キーワードを使用するだけで十分に機能しているため、(おそらく) 回避策は実行しません。
@jthi 、このアドインに感謝します。 これはとても役に立ちます。
を開くボタンを追加できます。 C:\ユーザー\ <ユーザー名> \Documents\jmp_script_editor_snippets\ フォルダー。
@jthi書きました:- #snippet を必要とせずにスクリプト ウィンドウの最後にスニペットを追加する可能性
...それとも現在のカーソル位置でしょうか?
を置くことができます#スニペットアドインはコード内の他の場所でそれを見つけません。
でも、それだけでいいのです#スニペットそしてない
#これは私のスニペットが行くべき場所です

おそらく: # を許可しますスニペット(スペースを含めて) 同様に、ユーザーの「エラー」に対して機能をより堅牢にします。