Description
En attendant Ajouter des extraits à l'éditeur de script souhaitez être terminé, j'ai rapidement écrit un complément afin de pouvoir avoir au moins une sorte d'extraits lors de l'écriture de scripts dans Script Editor. Le complément a été mis en place assez rapidement et il présente toujours des bugs et des problèmes (en particulier lors de la focalisation de différents éléments dans l'interface utilisateur). Là Il peut y avoir des modifications apportées à ce complément qui interrompront la fonctionnalité des extraits de code actuels et/ou leurs emplacements.
Qu’est-ce qu’un extrait ? Snippet est un terme de programmation désignant une petite région de code source, de code machine ou de texte réutilisable ( wikipédia, Snippet_(programmation) ). Les extraits de code 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 commettre si vous deviez saisir 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 installeriez normalement les compléments JMP (double-clic). Le complément utilisera (par défaut) le raccourci clavier Ctrl+Maj+Espace . Lors de la première exécution du complément, il sera 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 ressemble à C:\Users\ \Documents\jmp_script_editor_snippets\). Les fichiers d'extraits de code sont essentiellement des fichiers .jsl qui se trouvent dans le dossier d'extraits de code des compléments ou dans le dossier d'extraits de documents de l'utilisateur.
Usage:
Écrire #snippet (l'utilisateur peut éventuellement utiliser #sni ou #snip au lieu d'écrire l'intégralité du #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. Après avoir #snippet dans votre code, appuyez sur Ctrl+Shift+Espace pour lancer la fenêtre Snippet 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 #snippet n’est trouvé dans la zone de script, rien ne se passera. Si vous ne souhaitez pas insérer d'extrait, appuyez sur Échap. Si vous insérez accidentellement un extrait de code, vous pouvez essayer d'appuyer sur Ctrl+Z pour annuler la modification.
L'utilisateur peut accéder à cette page de communauté pour obtenir de l'aide et ouvrir le dossier d'extraits de code à partir du menu du complément.

Extraits préinstallés
Les noms de ces extraits sont volontairement courts, afin que l'utilisateur puisse facilement écrire le nom complet ainsi après #extrait. Utiliser des extraits de cette manière permet à l’utilisateur d’appuyer immédiatement sur Entrée pour utiliser l’extrait souhaité.
nouveau_bg
Voir plus...
new_bg_gb
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)))
);
Noms par défaut ici (1); dt = open("$SAMPLE_DATA/Big Class.jmp"); gb = dt << Générateur de graphiques (Variables (X (: poids), Y (: hauteur), Superposition (: sexe)), Éléments (Points (X, Y, Légende (9)), Ligne d'ajustement (X, Y , Légende(11))) );
si
Voir plus...
If(condition1,
//code1
, //else
//code2
);
Si(condition1, //code1 , //sinon //code2 );
Elif
Voir plus...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
Si(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(.);
);
function1 = function({param1, param2, param3 = .}, {Default Local}, /*"""function1 qui renvoie manquant. Plus de description concernant la fonction Args : param1 (displaybox) : param2 (char) : param3 (num) : Renvoie : num : manquant Augmente : 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);
/*"""Description en une phrase pour ce script Auteur : Date de création : Création Version JMP : Description : À faire : * * """*/ Noms Par défaut To Here(1);
maintenant
Voir plus...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
nw = Nouvelle fenêtre("nom", V List Box(align("Center"), ) , << Définir l'icône de la fenêtre("JMP") );
modal
Voir plus...
nw = New Window("Modal Window", << modal, << return result,
H List Box(
Panel Box("Options",
lb = List Box({})
),
Panel Box("Actions",
Lineup Box(N Col(1),
Button Box("OK"),
Button Box("Cancel")
)
)
)
, << Set Window Icon("Warning")
);
If(nw["Button"] != 1,
Throw("Cancelled");
);
nw = Nouvelle fenêtre("Fenêtre modale", << modal, << résultat de retour, H List Box( Panel Box("Options", lb = List Box({}) ), Panel Box("Actions", Lineup Box( N Col(1), Boîte de boutons("OK"), Boîte de boutons("Annuler") ) ) ) , << Définir l'icône de la fenêtre ("Avertissement") ); If(nw["Button"] != 1, Throw("Annulé"); );
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);
dsn_string = ""; sql_template = "\[ sélectionner 1 parmi dual ]\"; dbc = Créer une connexion à la base de données (dsn_string); sql = Eval Insert(sql_template, "¤"); // utilisez ¤ pour éviter les problèmes avec les expressions régulières lors de l'utilisation de ^ dt = Execute SQL(dbc, sql, "NewTable"); Fermer la connexion à la base de données (dbc);
essayer
Voir plus...
Try(
Show(a);
, // Catch
show(exception_msg);
);
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 la table des résultats.
Je vais d’abord démarrer un nouveau fichier de script .jsl. je vais commencer par écrire
#snippet new
Ensuite, j'exécuterai le complément pour remplacer cet extrait. Parce que j'ai pré-écrit le nom complet de l'extrait 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, j'ajouterai une nouvelle fonction avec un extrait de code
#snippet func
et puis à l'intérieur, j'ajouterai un extrait de code 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(.);
);
/*"""Ce complément fournit une fonctionnalité d'extrait de code à JMP Script Editor. Auteur : Date de création : Création Version JMP : Description : À faire : * * """*/ Noms par défaut ici (1); function1 = function({param1, param2, param3 = .}, {Local par défaut}, /*" ""fonction1 qui renvoie manquant. Plus de description concernant la fonction Args : param1 (displaybox) : param2 (char) : param3 (num) : Renvoie : num : manquant Augmente : exception_msg """*/ sql_template = "\[ select 1 from dual ]\"; dbc = Créer une connexion à la base de données (dsnstring); sql = Eval Insert (sql_template, "¤"); // utilisez ¤ pour éviter les problèmes avec les expressions régulières lors de l'utilisation de ^ dt = Exécuter SQL (dbc, sql, "NewTable"); Fermer la connexion à la base de données (dbc ); retour(.); );
Je vais le nettoyer en ajoutant une indentation à l'intérieur de la fonction et remplir 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);
);
/*"""Exemple d'utilisation des extraits de code de JMP Script Editor Auteur : jthi Date de création : 2022-12-19 Version de création JMP : JMP Pro 16 """*/ Noms par défaut ici (1); get_data = function({duration = 1}, {Default Local}, /*"""Fonction pour interroger les données de SQL Args : durée (num) : jours à interroger Renvoie : datatable : table de données interrogée """*/ dsn_string = "DSN=dBASE Files;DBQ=C:/Program Files/SAS/JMPPRO/16/Samples/Import Data/;" sql_template = "\[ sélectionnez * dans les tables où data > sysdate - ¤duration¤ ]\"; dbc = Créer une connexion à la base de données (dsn_string); sql = Eval Insert (sql_template, "¤"); dt = Exécuter SQL (dbc, sql, "Query Result"); Fermer la connexion à la base de données (dbc); return (dt); );
Vous trouverez ci-dessous une courte vidéo de l'utilisation du complément, basée sur l'exemple ci-dessus.
Travaux futurs possibles
- Écrivez le fichier .md approprié
- Ajouter la gestion des espaces blancs/tabulations avant l'extrait afin que le code inséré ait une indentation correcte
- Ajouter un bouton d'aide et un bouton pour ouvrir le dossier d'extraits de code des utilisateurs au menu du complément
- Nécessite également la création d'une page "aide". La page d'aide peut être créée à 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 désactivés, snippet_str, zone de liste nlines
- Possibilité d'ajouter des extraits à la fin de la fenêtre de script sans avoir besoin de #snippet
- Autre raccourci pour « Append Snippet » ?
- Pensez éventuellement à une syntaxe plus compliquée, qui permettrait de pré-remplir certaines valeurs dans des 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 des fonctionnalités ?
- Possibilité d'intégrer une liste d'extraits à côté de l'éditeur de script
- Ajouter plus d'extraits pré-écrits
- Ajouter la possibilité d'ajouter des descriptions aux extraits
Journal des modifications
Version 2.0 (20 décembre 2022)
- Ajout de nouveaux extraits : modal et if. Le nouveau elif a remplacé l'ancien extrait if
- Vérification d'extrait de code modifiée pour utiliser une liste de valeurs. Ajout de #sni et #snip comme mots clés supplémentaires (liste actuelle #sni, #snip, #snippet)
- Ajout de nouvelles variables configurables
- L'aperçu du script a été élargi pour contenir environ 80 caractères de code.
- Ajout du bouton Aide au menu complémentaire
- Ajout du bouton du dossier d'extraits de code ouvert au menu du complément
- Ajout de la prise en charge de l'indentation lors de l'utilisation d'un extrait de code
Version 2.0.1 (22 décembre 2022)
- Tentative de résolution du problème de suppression des lignes vides des extraits de code
@hogi
Je ne suis pas sûr de pouvoir accéder à la position du curseur de l'utilisateur dans Scripting Box directement avec JSL. Je peux trouver des solutions de contournement avec PowerShell et Windows DLL, mais je ne les ferai pas (très probablement) pour ce complément car il fonctionne assez bien pour moi avec l'utilisation de mots-clés.
@jthi , merci beaucoup pour ce complément. Cela peut beaucoup aider.
Vous pouvez ajouter un bouton pour ouvrir le C:\Utilisateurs\ Dossier \Documents\jmp_script_editor_snippets\.
@jthi a écrit:- Possibilité d'ajouter des extraits à la fin de la fenêtre de script sans avoir besoin de #snippet
... ou à la position actuelle du curseur ?
Vous pourriez placer un #fragment juste là, le complément ne le trouve pas ailleurs dans le code.
Mais c'est bien que ce soit juste #fragment et pas
#c'est l'endroit où mon extrait devrait aller

peut-être : autoriser # fragment (avec espace) également pour rendre la fonctionnalité plus robuste contre les "erreurs" des utilisateurs.