描述
在等待的時候將片段添加到腳本編輯器希望完成,我很快寫了一個插件,這樣我在腳本編輯器中編寫腳本時至少可以有一些片段。 加載項的組裝速度相當快,但仍然存在錯誤和問題(尤其是在 UI 中關注不同元素時)。 那裡可能是對此加載項的更改,這將破壞當前代碼段和/或其位置的功能。
什麼是片段? Snippet 是一個編程術語,指一小部分可重複使用的源代碼、機器代碼或文本 (維基百科,片段_(編程) ). 片段允許您將可重複使用的代碼塊快速插入到您的代碼中。 這將節省您的時間並減少您手動輸入代碼段時可能出現的錯誤。
安裝
加載項已構建加載項管理器,至少需要 JMP16 並且支持 Windows(可能在 OSX 上工作,但我無法測試它並且支持的主機已在加載項管理器中設置為 Win)。
從此頁面下載插件並按照通常安裝 JMP 插件的方式進行安裝(雙擊)。 加載項將(默認情況下)使用快捷鍵綁定Ctrl+Shift+空格. 當加載項第一次運行時,它將為用戶創建文件夾 $DOCUMENTS稱為jmp_script_editor_snippets哪個用戶可以用來存儲自定義片段(完整路徑類似於 C:\Users\ <用戶名> \文檔\jmp_script_editor_snippets\)。 片段文件基本上只是 .jsl 文件,可以從加載項的片段文件夾或用戶的文檔片段文件夾中找到。
用法:
寫#snippet <可選搜索詞>進入你的腳本編輯器。 #snippet 用作查找值,如果您包含可選的搜索詞,這些詞將用於預填充搜索欄。 在您的代碼中包含#snippet 後,按 Ctrl+Shift+Space 啟動 JMP 腳本編輯器代碼段窗口,搜索正確的代碼段並按 OK(有時您也可以只按 Enter / 使用 Tab 進入 Enter)。 #snippet 行將替換為您選擇的代碼段。 下面是片段窗口的圖像

片段窗口
如果用戶運行加載項並且沒有從腳本框中找到#snippet,則不會發生任何事情。 如果您不想插入片段,請按 Esc。 如果您不小心插入了片段,您可以嘗試按 Ctrl+Z 來撤消更改。
預裝片段
這些片段的名稱故意保持簡短,因此用戶可以輕鬆地將整個名稱寫為<可選搜索詞>在#snippet 之後。 以這種方式使用片段允許用戶立即按下回車鍵來使用想要的片段。
new_bg
查看更多...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
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)))
);
如果
查看更多...
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")
);
數據庫
查看更多...
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);
);
我還添加了community_template.jsl存儲到我的 $DOCUMENTS 片段文件夾中,我用它來存儲來自 JMP Community 的腳本解決方案
查看更多...
/*"""
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 行,所以它會為我預先選擇

我可以在打開加載項後立即按回車鍵來使用該代碼段。
接下來我將使用 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);
);
下面是基於示例 abow 的加載項用法的簡短視頻
未來可能的工作
- 在代碼段之前添加對空格/製表符的處理,以便插入的代碼具有正確的縮進
- 添加幫助按鈕和按鈕以將用戶片段文件夾打開到加載項的菜單
- 還需要創建“幫助”頁面。 幫助頁面可以從 .md 轉換為 .html 或使用此社區頁面製作。
- 嘗試解決對焦問題
- 添加設置選項
- 禁用的代碼片段、snippet_str、列錶框 nlines
- 無需 #snippet 的要求即可將片段附加到腳本窗口的末尾
- 可能會想到更複雜的語法,這將允許在片段中預填充一些值
- #snippet !param1 !param2 (或類似的東西)
- 甚至可能允許評估腳本中變量的值? 這需要不同的語法還是已經特徵蠕變?
- 可以在腳本編輯器旁邊嵌入片段列表
- 添加更多預先編寫的片段
- 添加向片段添加描述的可能性