Description
En attendant Ajouter des extraits à l'éditeur de script souhaite être complété, j'ai rapidement écrit un complément afin que je puisse avoir au moins une sorte d'extraits lors de la création de scripts dans Script Editor. Le complément a été mis en place assez rapidement et il a encore des bogues et des problèmes (en particulier avec la concentration de différents éléments dans l'interface utilisateur). Là Il peut s'agir de modifications apportées à ce complément qui interrompront la fonctionnalité des extraits de code actuels et/ou de leurs emplacements.
Qu'est-ce qu'un extrait ? Snippet est un terme de programmation désignant une petite région de code source réutilisable, de code machine ou de texte ( wikipedia, Snippet_(programmation) ). Les extraits vous permettent d'insérer rapidement des blocs de code réutilisables dans votre code. Cela vous fera gagner du temps et réduira les erreurs que vous pourriez avoir si vous deviez taper manuellement l'extrait de code.
Installation
Le complément a été construit avec Gestionnaire de compléments , nécessite au minimum JMP16 et prend en charge Windows (peut fonctionner sous OSX, mais je ne peux pas tester cela et l'hôte pris en charge a été défini sur Win dans le gestionnaire de compléments).
Téléchargez le complément à partir de cette page et installez-le comme vous le feriez normalement avec les compléments JMP (double-cliquez). Le complément utilisera (par défaut) le raccourci clavier Ctrl+Maj+Espace . Lorsque le complément s'exécute pour la première fois, il créer un dossier pour les utilisateurs $DOCUMENTS appelé jmp_script_editor_snippets quel utilisateur peut utiliser pour stocker des extraits personnalisés (le chemin complet est quelque chose comme C:\Users\ \Documents\jmp_script_editor_snippets\). Les fichiers d'extrait de code sont essentiellement des fichiers .jsl qui se trouvent dans le dossier d'extrait de code des compléments ou dans le dossier d'extrait de document de l'utilisateur.
Usage:
Écrire #snippet dans votre éditeur de script. #snippet est utilisé comme valeur de recherche et si vous incluez des termes de recherche facultatifs, ceux-ci seront utilisés pour pré-remplir la barre de recherche. Une fois que vous avez #snippet dans votre code, appuyez sur Ctrl + Maj + Espace pour lancer la fenêtre d'extrait de JMP Script Editor, recherchez l'extrait correct et appuyez sur OK (vous pouvez parfois aussi simplement appuyer sur Entrée / utiliser Tab pour accéder à Entrée). La ligne #snippet sera remplacée par l'extrait que vous avez sélectionné. Ci-dessous l'image de la fenêtre d'extrait

Fenêtre d'extrait
Si l'utilisateur exécute le complément et qu'aucun #extrait de code n'est trouvé dans la zone de script, rien ne se passera. Si vous ne souhaitez pas insérer d'extrait de code, appuyez sur Échap. Si vous insérez accidentellement un extrait de code, vous pouvez essayer d'appuyer sur Ctrl+Z pour annuler la modification.
Extraits de code préinstallés
Les noms de ces extraits sont volontairement courts, afin que l'utilisateur puisse facilement écrire le nom entier comme après #extrait. L'utilisation d'extraits de cette manière permet à l'utilisateur d'appuyer immédiatement sur Entrée pour utiliser l'extrait souhaité.
nouveau_bg
Voir plus...
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
nouveau_bg_fr
Voir plus...
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
Voir plus...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
fonction
Voir plus...
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(.);
);
Nouveau
Voir plus...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
nouveau
Voir plus...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
sql
Voir plus...
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);
essayer
Voir plus...
Try(
Show(a);
, // Catch
show(exception_msg);
);
j'ai aussi ajouté community_template.jsl stocké dans mon dossier d'extraits de code $DOCUMENTS, que j'utilise pour stocker mes solutions de script de la communauté JMP
Voir plus...
/*"""
author: jthi
date: YYYY-MM-DD
url: https://community.jmp.com/t5/Discussions/
keywords/tags: []
"""*/
Names Default To Here(1);
Exemple
Dans cet exemple simple, je vais créer un nouveau script. Le script aura une fonction qui effectuera une requête SQL puis renverra le tableau de résultats.
Je vais d'abord commencer un nouveau fichier de script .jsl. je vais commencer par écrire
#snippet new
Ensuite, je vais exécuter le complément pour remplacer cet extrait. Parce que j'ai pré-écrit le nom complet de l'extrait de code sur la ligne #snippet, il sera présélectionné pour moi

et je peux simplement appuyer sur Entrée immédiatement après avoir ouvert le complément pour utiliser cet extrait.
Ensuite, je vais ajouter une nouvelle fonction avec un extrait func
#snippet func
puis à l'intérieur, j'ajouterai un extrait sql
#snippet sql
Mon code actuel ressemble à ceci :
Voir plus...
/*"""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(.);
);
Je vais le nettoyer en ajoutant une intention à l'intérieur de la fonction et en remplissant les chaînes de documentation et enfin mon script ressemblera à ceci :
Voir plus...
/*"""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);
);
Vous trouverez ci-dessous une courte vidéo de l'utilisation du complément basée sur l'exemple ci-dessous
Travaux futurs possibles
- Ajoutez la gestion des espaces blancs / tabulations avant l'extrait de code afin que le code inséré ait une indentation correcte
- Ajouter un bouton d'aide et un bouton pour ouvrir le dossier d'extraits d'utilisateurs dans le menu du complément
- Nécessite également la création d'une page "aide". La page d'aide peut être faite à partir de .md converti en .html ou en utilisant cette page communautaire.
- Tenter de résoudre les problèmes de mise au point
- Ajouter une option de paramètres
- extraits de code désactivés, snippet_str, zone de liste nlines
- Possibilité d'ajouter des extraits à la fin de la fenêtre de script sans l'exigence de #snippet
- Autre raccourci pour "Append Snippet" ?
- Pensez éventuellement à une syntaxe plus compliquée, qui permettrait de pré-remplir certaines valeurs dans les extraits
- #snippet !param1 !param2 (ou quelque chose de similaire)
- Peut-être même autoriser l'évaluation des valeurs des variables dans le script ? Cela nécessiterait-il une syntaxe différente ou est-ce déjà fluage de fonctionnalité ?
- Possibilité d'intégrer une liste d'extraits à côté de l'éditeur de script
- Ajouter d'autres extraits pré-écrits
- Ajout de la possibilité d'ajouter des descriptions aux extraits