描述
在等待的时候将片段添加到脚本编辑器希望完成,我很快写了一个插件,这样我在脚本编辑器中编写脚本时至少可以有一些片段。 加载项的组装速度相当快,但仍然存在错误和问题(尤其是在 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 脚本编辑器代码段窗口,搜索正确的代码段并按确定(有时您也可以只按 Enter 键/使用 Tab 键进入)。 #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 (或类似的东西)
- 甚至可能允许评估脚本中变量的值? 这需要不同的语法还是已经特征蠕变?
- 可以在脚本编辑器旁边嵌入片段列表
- 添加更多预先编写的片段
- 添加向片段添加描述的可能性