Descripción
Mientras se espera Agregar fragmentos al editor de secuencias de comandos deseo que se complete, rápidamente escribí un complemento para poder tener al menos algún tipo de fragmentos mientras escribía secuencias de comandos en el Editor de secuencias de comandos. El complemento se armó bastante rápido y todavía tiene errores y problemas (especialmente al enfocar diferentes elementos en la interfaz de usuario). Allí Puede haber cambios en este complemento que romperán la funcionalidad de los fragmentos actuales y/o sus ubicaciones.
¿Qué es un Fragmento? Snippet es un término de programación para una pequeña región de código fuente reutilizable, código de máquina o texto ( wikipedia, Snippet_(programación) ). Los fragmentos le permiten insertar rápidamente bloques de código reutilizables en su código. Esto le ahorrará tiempo y reducirá los errores que podría tener si tuviera que escribir manualmente el fragmento.
Instalación
El complemento se ha creado con Administrador de complementos , requiere como mínimo JMP16 y es compatible con Windows (podría funcionar en OSX, pero no puedo probarlo y el host compatible se ha configurado como Win en el administrador de complementos).
Descargue el complemento desde esta página e instálelo como lo haría normalmente con los complementos JMP (doble clic). El complemento usará (de forma predeterminada) la combinación de teclas de método abreviado Ctrl+Mayús+Espacio . Cuando el complemento se ejecute por primera vez, crear carpeta para usuarios $ DOCUMENTOS llamado jmp_script_editor_snippets qué usuario puede usar para almacenar fragmentos personalizados (la ruta completa es algo así como C:\Users\ \Documentos\jmp_script_editor_snippets\). Los archivos de fragmentos son básicamente archivos .jsl que se encuentran en la carpeta de fragmentos de los complementos o en la carpeta de fragmentos de documentos del usuario.
Uso:
Escribir #snippet en su editor de secuencias de comandos. #snippet se usa como un valor de búsqueda y, si incluye términos de búsqueda opcionales, se usarán para completar previamente la barra de búsqueda. Después de tener #snippet en su código, presione Ctrl+Shift+Space para abrir la ventana Snippet del editor de secuencias de comandos JMP, busque el fragmento correcto y presione OK (a veces también puede simplemente presionar Enter/usar Tabulador para acceder a Enter). La línea #snippet se reemplazará con el fragmento que seleccionó. A continuación se muestra la imagen de la ventana de fragmento

Ventana de fragmentos
Si el usuario ejecuta el complemento y no se encuentra un #fragmento en el cuadro de secuencia de comandos, no sucederá nada. Si no desea insertar un fragmento, presione Esc. Si por accidente inserta un fragmento, puede intentar presionar Ctrl+Z para deshacer el cambio.
Fragmentos preinstalados
Los nombres de estos fragmentos se mantienen cortos a propósito, por lo que el usuario puede escribir fácilmente el nombre completo como después de #fragmento. El uso de fragmentos de código de esta manera permite al usuario presionar Intro inmediatamente para usar el fragmento de código deseado.
nuevo_bg
Ver más...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nuevo_bg_gb
Ver más...
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)))
);
si
Ver más...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
función
Ver más...
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(.);
);
nuevo
Ver más...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
noroeste
Ver más...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
sql
Ver más...
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);
tratar
Ver más...
Try(
Show(a);
, // Catch
show(exception_msg);
);
también agregué community_template.jsl almacenado en mi carpeta de fragmentos de $DOCUMENTS, que utilizo para almacenar mis soluciones de secuencias de comandos de JMP Community
Ver más...
/*"""
author: jthi
date: YYYY-MM-DD
url: https://community.jmp.com/t5/Discussions/
keywords/tags: []
"""*/
Names Default To Here(1);
Ejemplo
En este ejemplo simple, crearé un nuevo script. El script tendrá una función que realizará una consulta SQL y luego devolverá la tabla de resultados.
Primero, iniciaré un nuevo archivo de script .jsl. voy a empezar escribiendo
#snippet new
a continuación, ejecutaré el complemento para reemplazar ese fragmento. Debido a que preescribí el nombre completo del fragmento en la línea #snippet, se preseleccionará para mí.

y puedo simplemente presionar enter inmediatamente después de abrir el complemento para usar ese fragmento.
A continuación, agregaré una nueva función con el fragmento func.
#snippet func
y luego dentro agregaré un fragmento de sql
#snippet sql
Mi código actual se ve así:
Ver más...
/*"""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(.);
);
Lo limpiaré agregando intenciones dentro de la función y completaré las cadenas de documentación y, finalmente, mi secuencia de comandos se verá así:
Ver más...
/*"""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);
);
A continuación se muestra un video breve del uso del complemento basado en el ejemplo anterior
Posible trabajo futuro
- Agregue el manejo de espacios en blanco / pestañas antes del fragmento para que el código insertado tenga la sangría correcta
- Agregue el botón de ayuda y el botón para abrir la carpeta de fragmentos de los usuarios en el menú del complemento
- También requiere la creación de una página de "ayuda". La página de ayuda se puede hacer desde .md convertido a .html o usando esta página de la comunidad.
- Intento de solucionar problemas de enfoque
- Agregar opción de configuración
- fragmentos deshabilitados, snippet_str, cuadro de lista nlines
- Posibilidad de agregar fragmentos al final de la ventana del script sin el requisito de #fragmento
- ¿Otro atajo para "Anexar fragmento"?
- Posiblemente piense en una sintaxis más complicada, lo que permitiría completar previamente algunos valores en fragmentos
- #snippet !param1 !param2 (o algo similar)
- ¿Tal vez incluso permitir la evaluación de valores de variables en el script? ¿Requeriría esto una sintaxis diferente o ya está arrastre de características ?
- Posibilidad de incrustar una lista de fragmentos junto al editor de scripts
- Agregue más fragmentos preescritos
- Agregar posibilidad de agregar descripciones a fragmentos