Descrizione
Nell'attesa Aggiungi frammenti a Script Editor desidero essere completato, ho scritto rapidamente un componente aggiuntivo in modo da poter avere almeno una sorta di frammenti durante lo scripting in Script Editor. Il componente aggiuntivo è stato messo insieme abbastanza velocemente e presenta ancora bug e problemi (in particolare con la messa a fuoco di diversi elementi nell'interfaccia utente). Là potrebbero esserci modifiche a questo componente aggiuntivo che interromperanno la funzionalità degli snippet correnti e/o le loro posizioni.
Che cos'è uno snippet? Snippet è un termine di programmazione per una piccola regione di codice sorgente riutilizzabile, codice macchina o testo ( wikipedia, Snippet_(programmazione) ). Gli snippet ti consentono di inserire rapidamente blocchi di codice riutilizzabili nel tuo codice. Ciò ti farà risparmiare tempo e ridurrà gli errori che potresti avere se dovessi digitare manualmente lo snippet.
Installazione
Il componente aggiuntivo è stato creato con Gestore componenti aggiuntivi , richiede almeno JMP16 e supporta Windows (potrebbe funzionare su OSX, ma non posso verificarlo e l'host supportato è stato impostato come Win nel gestore dei componenti aggiuntivi).
Scarica il componente aggiuntivo da questa pagina e installalo come faresti normalmente con i componenti aggiuntivi di JMP (doppio clic). Il componente aggiuntivo utilizzerà (per impostazione predefinita) la combinazione di tasti di scelta rapida Ctrl+Maiusc+Spazio . Quando il componente aggiuntivo viene eseguito per la prima volta, lo farà creare una cartella per gli utenti $DOCUMENTS chiamato jmp_script_editor_snippets quale utente può utilizzare per archiviare frammenti personalizzati (il percorso completo è qualcosa come C:\Utenti\ \Documenti\jmp_script_editor_snippets\). I file snippet sono fondamentalmente solo file .jsl che si trovano nella cartella snippet dei componenti aggiuntivi o nella cartella snippet dei documenti dell'utente.
Utilizzo:
Scrivere #snippet nel tuo editor di script. #snippet viene utilizzato come valore di ricerca e se includi termini di ricerca facoltativi, questi verranno utilizzati per precompilare la barra di ricerca. Dopo aver inserito #snippet nel codice, premere Ctrl+Maiusc+Spazio per avviare la finestra Snippet di JMP Script Editor, cercare lo snippet corretto e premere OK (a volte è anche possibile premere semplicemente Invio/utilizzare Tab per accedere a Invio). La riga #snippet verrà sostituita con lo snippet selezionato. Di seguito è riportata l'immagine della finestra dello snippet

Finestra del frammento
Se l'utente esegue il componente aggiuntivo e non viene trovato alcun #snippet dalla casella dello script, non accadrà nulla. Se non vuoi inserire lo snippet, premi Esc. Se inserisci accidentalmente uno snippet, puoi provare a premere Ctrl+Z per annullare la modifica.
Frammenti preinstallati
I nomi di questi frammenti sono volutamente brevi, quindi l'utente può facilmente scrivere il nome intero come dopo #frammento. L'utilizzo degli snippet in questo modo consente all'utente di premere immediatamente Invio per utilizzare lo snippet desiderato.
nuovo_bg
Visualizza altro...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
new_bg_gb
Visualizza altro...
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)))
);
Se
Visualizza altro...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
funz
Visualizza altro...
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(.);
);
nuovo
Visualizza altro...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
nw
Visualizza altro...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
sql
Visualizza altro...
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);
Tentativo
Visualizza altro...
Try(
Show(a);
, // Catch
show(exception_msg);
);
ho anche aggiunto community_template.jsl memorizzato nella mia cartella di snippet $DOCUMENTS, che utilizzo per archiviare le mie soluzioni di scripting da JMP Community
Visualizza altro...
/*"""
author: jthi
date: YYYY-MM-DD
url: https://community.jmp.com/t5/Discussions/
keywords/tags: []
"""*/
Names Default To Here(1);
Esempio
In questo semplice esempio creerò un nuovo script. Lo script avrà una funzione che eseguirà una query SQL e quindi restituirà la tabella dei risultati.
Per prima cosa avvierò un nuovo file di script .jsl. Inizierò scrivendo
#snippet new
successivamente eseguirò il componente aggiuntivo per sostituire quello snippet. Poiché ho prescritto l'intero nome dello snippet nella riga #snippet, verrà preselezionato per me

e posso semplicemente premere Invio subito dopo aver aperto il componente aggiuntivo per utilizzare quello snippet.
Successivamente aggiungerò una nuova funzione con func snippet
#snippet func
e poi al suo interno aggiungerò lo snippet sql
#snippet sql
Il mio codice attuale è simile a questo:
Visualizza altro...
/*"""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 ripulirò aggiungendo l'intenzione all'interno della funzione e compilerò le stringhe della documentazione e infine il mio script sarà simile a questo:
Visualizza altro...
/*"""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);
);
Di seguito è riportato un breve video dell'utilizzo del componente aggiuntivo basato sull'esempio riportato di seguito
Possibile lavoro futuro
- Aggiungi la gestione degli spazi bianchi/tabulazioni prima dello snippet in modo che il codice inserito abbia il rientro corretto
- Aggiungi il pulsante della guida e il pulsante per aprire la cartella degli snippet degli utenti nel menu del componente aggiuntivo
- Richiede anche la creazione della pagina "help". La pagina della guida può essere creata da .md convertito in .html o utilizzando questa pagina della community.
- Tentativo di risolvere i problemi di messa a fuoco
- Aggiungi opzione impostazioni
- frammenti disabilitati, snippet_str, casella di riepilogo nlinee
- Possibilità di aggiungere frammenti alla fine della finestra dello script senza il requisito di #snippet
- Un'altra scorciatoia per "Aggiungi frammento"?
- Forse pensa a una sintassi più complicata, che consentirebbe di precompilare alcuni valori nei frammenti
- #snippet !param1 !param2 (o qualcosa di simile)
- Forse anche consentire la valutazione dei valori dalle variabili nello script? Ciò richiederebbe una sintassi diversa o lo è già caratteristica creep ?
- Possibilità di incorporare l'elenco di snippet accanto all'editor di script
- Aggiungi altri snippet già scritti
- Aggiunta la possibilità di aggiungere descrizioni ai frammenti