描述
在等待的同時將程式碼片段新增至腳本編輯器為了完成這個任務,我很快就編寫了一個插件,這樣我在腳本編輯器中編寫腳本時至少可以擁有某種片段。 加載項的組裝速度相當快,但它仍然存在錯誤和問題(尤其是在 UI 中關注不同元素時)。 那裡對此加載項的變更可能會破壞當前程式碼片段和/或其位置的功能。
什麼是片段? 程式碼片段是一個程式設計術語,指一小部分可重複使用的原始程式碼、機器碼或文字(維基百科,片段_(程式設計) )。 片段可讓您快速將可重複使用的程式碼區塊插入程式碼中。 如果您手動輸入程式碼片段,這將節省您的時間並減少可能出現的錯誤。
安裝
插件已內建外掛程式管理器,至少需要 JMP16 並且支援 Windows(可能在 OSX 上工作,但我無法測試它,並且支援的主機已在加載項管理器中設定為 Win)。
從此頁面下載外掛程式並按照通常安裝 JMP 外掛程式的方式進行安裝(雙擊)。 此加載項將(預設)使用快捷鍵綁定Ctrl+Shift+空白鍵。 當加載項第一次運行時,它將為使用者 $DOCUMENTS 建立資料夾被稱為jmp_script_editor_snippets哪個使用者可以用來儲存自訂片段(完整路徑類似於 C:\Users\ <使用者名稱> \Documents\jmp_script_editor_snippets\)。 程式碼片段檔案基本上只是 .jsl 文件,可以從加載項的程式碼片段資料夾或使用者的文件程式碼片段資料夾中找到。
用法:
寫#snippet <可選搜尋字詞> (使用者可以選擇使用#sni 或#snip,而不是寫入整個#snippet)到腳本編輯器。 #snippet 用作查找值,如果您包含可選搜尋字詞,這些字詞將用於預先填入搜尋列。 在程式碼中包含 #snippet 後,按 Ctrl+Shift+Space 啟動 JMP 腳本編輯器程式碼段窗口,搜尋正確的程式碼片段並按確定(有時您也可以只按 Enter/使用 Tab 進入 Enter)。 #snippet 行將替換為您選擇的程式碼片段。 下面是片段視窗的圖片

片段視窗
如果使用者執行加載項並且在腳本框中沒有找到 #snippet,則不會發生任何情況。 如果您不想插入程式碼片段,請按 Esc。 如果您不小心插入了程式碼片段,您可以嘗試按 Ctrl+Z 來撤銷變更。
使用者可以訪問此社群頁面以獲取協助,並從加載項選單中開啟程式碼片段資料夾

預先安裝的片段
這些片段的名稱故意保持簡短,因此使用者可以輕鬆地將整個名稱寫為<可選搜尋詞> #snippet 之後。 以這種方式使用片段允許使用者立即按 Enter 鍵來使用所需的片段。
新背景
看更多...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
新_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)))
);
如果
看更多...
If(condition1,
//code1
, //else
//code2
);
埃利夫
看更多...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
功能
看更多...
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(.);
);
新的
看更多...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
西北
看更多...
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");
);
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);
嘗試
看更多...
Try(
Show(a);
, // Catch
show(exception_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 查詢,然後傳回結果表。
首先,我將啟動一個新的 .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(.);
);
我將通過在函數內添加縮進並填寫文檔字串來清理它,最後我的腳本將如下所示:
看更多...
/*"""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);
);
以下是基於範例的加載項使用的簡短視頻
未來可能的工作
- 編寫正確的.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 日)
@hogi
我不確定是否可以直接使用 JSL 存取用戶在腳本框中的遊標位置。 我可以使用 powershell 和 windows dll 進行變通,但我不會(很可能)為此加載項執行這些操作,因為它對於我使用關鍵字來說工作得足夠好。
@jthi ,非常感謝這個插件。 這會有很大幫助。
您可以新增一個按鈕來打開C:\使用者\ <使用者名稱> \Documents\jmp_script_editor_snippets\ 資料夾。
@jthi寫道:- 可以將片段附加到腳本視窗的末尾,而不需要#snippet
...或在目前遊標位置?
你可以放置一個#片段就在那裡,加載項在程式碼中的其他地方找不到它。
但好在這只是#片段和不是
#這是我的程式碼片段應該去的地方

也許:允許#片段(帶空格)以及使功能更強大,以防止使用者「錯誤」。