Beschreibung
Beim Warten Snippets zum Skripteditor hinzufügen Nachdem ich den Wunsch vervollständigt habe, habe ich schnell ein Add-In geschrieben, damit ich bei der Skripterstellung im Skripteditor zumindest einige Snippets haben kann. Das Add-In wurde ziemlich schnell erstellt und weist immer noch Fehler und Probleme auf (insbesondere bei der Fokussierung verschiedener Elemente in der Benutzeroberfläche). Dort Möglicherweise handelt es sich um Änderungen an diesem Add-In, die die Funktionalität aktueller Snippets und/oder ihrer Speicherorte beeinträchtigen.
Was ist ein Snippet? Snippet ist ein Programmierbegriff für einen kleinen Bereich wiederverwendbaren Quellcodes, Maschinencodes oder Textes ( Wikipedia, Snippet_(Programmierung) ). Mit Snippets können Sie wiederverwendbare Codeblöcke schnell in Ihren Code einfügen. Dies spart Ihnen Zeit und reduziert Fehler, die bei der manuellen Eingabe des Snippets auftreten könnten.
Installation
Das Add-In wurde mit erstellt Add-In-Manager , erfordert mindestens JMP16 und unterstützt Windows (funktioniert möglicherweise unter OSX, aber ich kann das nicht testen und der unterstützte Host wurde im Add-In-Manager auf Win eingestellt).
Laden Sie das Add-In von dieser Seite herunter und installieren Sie es, wie Sie es normalerweise bei der Installation von JMP-Add-Ins tun würden (Doppelklick). Das Add-in verwendet (standardmäßig) eine Tastenkombination Strg+Umschalt+Leertaste . Wenn das Add-In zum ersten Mal ausgeführt wird, wird es ausgeführt Ordner für Benutzer $DOCUMENTS erstellen angerufen jmp_script_editor_snippets Welcher Benutzer kann zum Speichern benutzerdefinierter Snippets verwendet werden (vollständiger Pfad ist etwa C:\Benutzer\ \Dokumente\jmp_script_editor_snippets\). Bei den Snippet-Dateien handelt es sich im Grunde nur um .jsl-Dateien, die im Snippet-Ordner der Add-Ins oder im Dokumenten-Snippet-Ordner des Benutzers zu finden sind.
Verwendung:
Schreiben #snippet (Optional kann der Benutzer #sni oder #snip verwenden, anstatt das gesamte #snippet zu schreiben) in Ihren Skripteditor. #snippet wird als Suchwert verwendet und wenn Sie optionale Suchbegriffe angeben, werden diese zum Vorabfüllen der Suchleiste verwendet. Nachdem Sie #snippet in Ihrem Code haben, drücken Sie Strg+Umschalt+Leertaste, um das Snippet-Fenster des JMP Script Editor zu öffnen, suchen Sie nach dem richtigen Snippet und drücken Sie OK (manchmal können Sie auch einfach die Eingabetaste drücken/die Tabulatortaste verwenden, um zur Eingabetaste zu gelangen). Die Zeile #snippet wird durch das von Ihnen ausgewählte Snippet ersetzt. Unten sehen Sie ein Bild des Snippet-Fensters

Snippet-Fenster
Wenn der Benutzer das Add-In ausführt und im Skriptfeld kein #snippet gefunden wird, passiert nichts. Wenn Sie kein Snippet einfügen möchten, drücken Sie Esc. Wenn Sie versehentlich ein Snippet einfügen, können Sie versuchen, die Änderung durch Drücken von Strg+Z rückgängig zu machen.
Der Benutzer kann auf diese Community-Seite zugreifen, um Hilfe zu erhalten, und den Snippet-Ordner über das Add-In-Menü öffnen

Vorinstallierte Snippets
Die Namen dieser Snippets werden absichtlich kurz gehalten, sodass Benutzer problemlos den gesamten Namen schreiben können nach #snippet. Durch die Verwendung von Snippets auf diese Weise kann der Benutzer sofort die Eingabetaste drücken, um das gewünschte Snippet zu verwenden.
new_bg
Mehr sehen...
new_bg_gb
Mehr sehen...
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)))
);
Namen standardmäßig hier(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 , Legende(11))) );
Wenn
Mehr sehen...
If(condition1,
//code1
, //else
//code2
);
If(condition1, //code1 , //else //code2 );
elif
Mehr sehen...
If(condition1,
//code1
, //condition2,
//code2
, //else
//code3
);
If(condition1, //code1 , //condition2, //code2 , //else //code3 );
Funktion
Mehr sehen...
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, was fehlt. Weitere Beschreibung zur Funktion. Argumente: param1 (displaybox): param2 (char): param3 (num): Rückgabe: num: fehlt. Raises: Ausnahme_msg """*/ return(.); );
neu
Mehr sehen...
/*"""One sentence description for this script
Author:
Creation Date:
Creation JMP Version:
Description:
Todo:
*
*
"""*/
Names Default To Here(1);
/*"""Ein Satz Beschreibung für dieses Skript Autor: Erstellungsdatum: Erstellung JMP-Version: Beschreibung: Todo: * * """*/ Names Default To Here(1);
jetzt
Mehr sehen...
nw = New Window("name",
V List Box(align("Center"),
)
, << Set Window Icon("JMP")
);
nw = New Window("name", V List Box(align("Center"), ) , << Set Window Icon("JMP") );
modal
Mehr sehen...
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 = Neues Fenster("Modal Window", << modal, << Ergebnis zurückgeben, H List Box( Panel Box("Options", lb = List Box({}) ), Panel Box("Actions", Lineup Box( N Col(1), Button Box("OK"), Button Box("Abbrechen") ) ) ), << Set Window Icon("Warning") ); If(nw["Button"] != 1, Throw("Cancelled"); );
sql
Mehr sehen...
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 = "\[ 1 aus Dual auswählen]\"; dbc = Datenbankverbindung erstellen(dsn_string); sql = Eval Insert(sql_template, "¤"); // ¤ verwenden, um Probleme mit Regex zu vermeiden, wenn ^ dt = Execute SQL(dbc, sql, "NewTable"); Datenbankverbindung schließen (dbc);
versuchen
Mehr sehen...
Try(
Show(a);
, // Catch
show(exception_msg);
);
Try( Show(a); , // Catch show(Exception_msg); );
Ich habe auch hinzugefügt community_template.jsl in meinem Snippet-Ordner $DOCUMENTS gespeichert, in dem ich meine Skriptlösungen aus der JMP-Community speichere
Mehr sehen...
/*"""
author: jthi
date: YYYY-MM-DD
url: https://community.jmp.com/t5/Discussions/
keywords/tags: []
"""*/
Names Default To Here(1);
Beispiel
In diesem einfachen Beispiel werde ich ein neues Skript erstellen. Das Skript verfügt über eine Funktion, die eine SQL-Abfrage durchführt und dann die Ergebnistabelle zurückgibt.
Zuerst werde ich eine neue .jsl-Skriptdatei starten. Ich werde mit dem Schreiben beginnen
#snippet new
Als nächstes werde ich das Add-In ausführen, um dieses Snippet zu ersetzen. Da ich den gesamten Snippet-Namen vorab in die Zeile #snippet geschrieben habe, wird er für mich vorab ausgewählt

und ich kann direkt nach dem Öffnen des Add-Ins einfach die Eingabetaste drücken, um dieses Snippet zu verwenden.
Als nächstes werde ich eine neue Funktion mit Func-Snippet hinzufügen
#snippet func
und dann werde ich darin ein SQL-Snippet hinzufügen
#snippet sql
Mein aktueller Code sieht so aus:
Mehr sehen...
/*"""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(.);
);
/*"""Dieses Add-In stellt Snippet-Funktionalität für den JMP Script Editor bereit. Autor: Erstellungsdatum: Erstellung JMP-Version: Beschreibung: Todo: * * """*/ Names Default To Here(1); function1 = function({param1, param2, param3 = .}, {Default Local}, /*" „“Funktion1, die „fehlt“ zurückgibt. Weitere Beschreibung zur Funktion Args: param1 (displaybox): param2 (char): param3 (num): Rückgaben: num: fehlende Auslöser: Ausnahme_msg """*/ sql_template = "\[ select 1 from dual ]\"; dbc = Datenbankverbindung erstellen(dsnstring); sql = Eval Insert(sql_template, "¤"); // ¤ verwenden, um Probleme mit Regex zu vermeiden, wenn ^ dt = Execute SQL(dbc, sql, "NewTable"); Datenbankverbindung schließen(dbc ); zurückkehren(.); );
Ich werde es bereinigen, indem ich Einrückungen innerhalb der Funktion hinzufüge und die Dokumentationszeichenfolgen ausfülle, und schließlich wird mein Skript so aussehen:
Mehr sehen...
/*"""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);
);
/*"""Beispiel zur Verwendung von JMP Script Editor Snippets Autor: jthi Erstellungsdatum: 19.12.2022 Erstellung JMP-Version: JMP Pro 16 """*/ Names Default To Here(1); get_data = function({duration = 1}, {Default Local}, /*"""Funktion zum Abfragen von Daten aus SQL Argumente: Dauer (num): abzufragende Tage Rückgabewerte: datatable: abgefragte Datentabelle """*/ 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); );
Nachfolgend finden Sie ein kurzes Video zur Verwendung des Add-Ins basierend auf dem Beispiel unten
Mögliche zukünftige Arbeit
- Schreiben Sie die richtige MD-Datei
- Fügen Sie vor dem Snippet eine Behandlung für Leerzeichen/Tabulatoren hinzu, damit der eingefügte Code die richtige Einrückung hat
- Fügen Sie eine Hilfeschaltfläche und eine Schaltfläche zum Öffnen des Snippet-Ordners des Benutzers zum Add-In-Menü hinzu
- Erfordert außerdem die Erstellung einer „Hilfe“-Seite. Die Hilfeseite kann aus .md in .html konvertiert oder über diese Community-Seite erstellt werden.
- Versuchen Sie, Fokussierungsprobleme zu beheben
- Einstellungsoption hinzufügen
- deaktivierte Snippets, snippet_str, Listbox nlines
- Möglichkeit, Snippets am Ende des Skriptfensters anzuhängen, ohne dass #snippet erforderlich ist
- Andere Verknüpfung für „Snippet anhängen“?
- Denken Sie möglicherweise an eine kompliziertere Syntax, die es ermöglichen würde, einige Werte in Snippets vorab einzugeben
- #snippet !param1 !param2 (oder etwas Ähnliches)
- Vielleicht sogar die Auswertung von Werten aus Variablen im Skript zulassen? Würde dies eine andere Syntax erfordern oder ist dies bereits der Fall? Feature-Creep ?
- Möglichkeit, eine Snippet-Liste neben dem Skript-Editor einzubetten
- Fügen Sie weitere vorgefertigte Snippets hinzu
- Fügen Sie die Möglichkeit hinzu, Beschreibungen zu Snippets hinzuzufügen
Änderungsprotokoll
Version 2.0 (20. Dezember 2022)
- Neue Snippets hinzugefügt: modal und if. Neues elif ersetzt altes if-Snippet
- Die Snippet-Prüfung wurde geändert, um eine Werteliste zu verwenden. #sni und #snip als zusätzliche Schlüsselwörter hinzugefügt (aktuelle Liste #sni, #snip, #snippet)
- Neue konfigurierbare Variablen hinzugefügt
- Die Skriptvorschau wurde breiter gemacht, um etwa 80 Zeichen Code aufzunehmen
- Schaltfläche „Hilfe“ zum Add-In-Menü hinzugefügt
- Schaltfläche zum Öffnen des Snippet-Ordners zum Add-In-Menü hinzugefügt
- Unterstützung für Einrückungen während der Snippet-Nutzung hinzugefügt
Version 2.0.1 (22. Dezember 2022)
- Versuchen Sie, das Problem zu beheben, bei dem leere Zeilen aus Snippets entfernt wurden
@hogi
Ich bin nicht sicher, ob ich mit JSL direkt auf die Cursorposition des Benutzers in Scripting Box zugreifen kann. Ich kann Problemumgehungen mit Powershell und Windows DLL durchführen, werde diese jedoch (höchstwahrscheinlich) nicht für dieses Add-In durchführen, da es mit der Verwendung von Schlüsselwörtern für mich gut genug funktioniert.
@jthi , vielen Dank für dieses Add-In. Das kann sehr helfen.
Sie könnten eine Schaltfläche zum Öffnen hinzufügen C:\Benutzer\ Ordner \Documents\jmp_script_editor_snippets\.
@jthi schrieb:- Möglichkeit, Snippets am Ende des Skriptfensters anzuhängen, ohne dass #snippet erforderlich ist
... oder an der aktuellen Cursorposition?
Sie könnten eine platzieren #Schnipsel Nur dort findet das Add-In es nicht an einer anderen Stelle im Code.
Aber gut, dass es so ist #Schnipsel Und nicht
#hier ist der Ort, an den mein Snippet gehen soll


vielleicht: erlauben # Ausschnitt (mit Leerzeichen), um die Funktionalität robuster gegen Benutzerfehler zu machen.