Wie behalte ich Formatierungen und Kommentare mit New Script() bei?Hallo an alle,
ich bin es wieder. Ein anderer Tag, eine andere Frage 
Also habe ich ein schönes langes Skript erstellt, das eine neue Datentabelle erstellt, die einige Skripte enthält. Ich verwende dazu die Funktion New Script().
dt<< New script ("myscript",
// comments
//beautiful indentation
(
(
( ( instructions) )
)
)
)
);
Mein Problem ist, dass, wenn ich das Skript in der Tabelle dt überprüfe, alle Kommentare verloren gehen, ebenso wie das Layout, mein persönlicher Einrückungsstil, leere Zeilen usw.
Diese Skripte sind für Benutzer gedacht, die nicht unbedingt mit JSL vertraut sind, daher muss ich die Kommentare und das ursprüngliche Layout beibehalten.
Ich habe versucht, so etwas wie das Einfügen meiner Skripts in eine Zeichenfolge und die Verwendung von Append() oder Append Text() zu tun, war aber nicht erfolgreich.
mystring = " \[ // all my
// script
]\" ;
myscript = dt<<NEW script=""></NEW>Leider hat dies nicht funktioniert. Irgendwelche Ideen ? Einige Tricks mit Expr/Eval usw. vielleicht?
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Gut, gut, gut, es sieht so aus, als hätten wir einen Gewinner!
Ich liebe es, wenn Sie Tage damit verbringen, an einem scheinbar unmöglichen Problem zu arbeiten, und dann offenbart jemand, dass die Lösung ein einzeiliges Skript ist :gesicht_mit_freudentränen:
vielen Dank @XanGregg 
Betreff: Formatierung und Kommentare mit New Script() beibehalten?JSL Quote() könnte helfen:
New Table( "formatted script",
New Script( "my script",
Eval( Parse(JSL Quote(
// example
x = 1;
Print( :column 1[1], y );
) )
)
),
New Column( "Column 1", Set Values( [5] ) )
)
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Du sagtest, " Soweit ich sehen kann, gibt es keine Möglichkeit, auf ein Skript innerhalb einer Datentabelle zu verweisen, und das ist das Problem. Was ich meine ist, dass es keine Datentabelle gibt: myscript oder datatable< " Sie können diese Nachricht an die Datentabelle senden, nachdem Sie meinen obigen Beispielcode ausgeführt haben:
dt << Get Script( "My Script" );
Jetzt kann ich Ausdrucks- oder Zeichenkettenfunktionen verwenden, um das Skript aus der Datentabelle zu bearbeiten.
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Hallo @Mark_Bailey ,
Danke für dieses Stück Code, es ist in der Tat nützlich.
Damit ist ein Punkt gelöst: Der Inhalt eines Skriptfensters kann in einem Skript gespeichert werden.
Aber der erste Teil scheint immer noch wahr zu sein "JMP-Skripte können nicht von einem anderen Skript bearbeitet werden". Das von Ihnen bereitgestellte Skript schreibt mit der Funktion New Script () jedes Mal ein neues Skript;
Soweit ich sehen kann, gibt es keine Möglichkeit, auf ein Skript innerhalb einer Datentabelle zu verweisen, und das ist das Problem. Was ich meine ist, dass es keine Datentabelle gibt: myscript oder datatable<
alles, was man tun kann, ist, Skripte zu kopieren und sie dann in einem neuen Skript einzufügen. Aber das löst das Problem in der Tat nicht, da es in einen JSL-Ausdruck umgewandelt wird und dabei Kommentare und Formatierungen löscht.
Ich denke, es ist an der Zeit zuzugeben, dass es derzeit keine Lösung gibt. Es steht auf der JMP-Wunschliste, so wie @Jeff_Perkinson erwähnt,
Alle Interessierten bitte unbedingt ein Kudo Bewahren Sie Kommentare und Leerzeichen in JSL-Code, der an Daten angehängt ist !!
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Die Tabellenskripte könnten die so gespeicherten Skripte ausführen.
Include( "My Path/My Script.jsl" );
Sie können die Skripte überall ablegen (z. B. in einem einzelnen Repository-Ordner) und den vollständigen Pfad angeben.
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Du sagtest, " Es sieht so aus, als ob JMP-Skripte nicht von einem anderen Skript bearbeitet werden können. Ich habe versucht, mein Skript in ein Skriptfeld in einem Fenster zu schreiben.Aber soweit ich sehen kann, kann der Inhalt einer Skriptbox nicht in einer Datentabelle gespeichert werden. "
Es ist möglich. Es ist vielleicht nicht offensichtlich. Es erfordert jedoch Skripttechniken, die nicht grundlegend sind. Hier ist ein Beispiel, um zu veranschaulichen, wie es gemacht werden könnte. Es
Names Default to Here( 1 );
script window = New Window( "Script", << Modal,
sb = Script Box( "print(\!"Hello\!");" ),
H List Box(
Button Box( "OK", s = sb << Get Lines ),
Button Box( "Cancel" )
)
);
If( script window["Button"] == -1,
Throw( "User cancelled" );
);
Print( s );
n = N Items( s );
script = s[1];
For( line = 2, line <= n, line++,
script ||= "\!n" || s[line];
);
Print( script );
Eval( Parse( script ) );
Eval(
Substitute(
Expr( Current Data Table() << New Script( "My Script", sss ) ),
Expr( sss ),
Parse( script )
)
);
Das Tabellenskript verliert jedoch die Formatierung, da die Funktion Parse() sie verwirft, genau wie der JSL-Interpreter. Dieses Beispiel löst also nicht Ihr ursprüngliches Problem.
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Danke markbailey,
Dies ist ein nützliches Stück Code. Ich denke, man könnte die .jsl-Dateien im selben Ordner wie die Datentabelle speichern, mit der sie verwendet werden. Das wäre eine vernünftige Vorgehensweise.Betreff: Formatierung und Kommentare mit New Script() beibehalten?Wir sind in unseren JMP-Schulungskursen zum Thema Skripterstellung auf dieses Problem gestoßen. Wir haben einen bestimmten Stil und ein bestimmtes Format festgelegt, um den Code so klar wie möglich zu machen, also wollten wir ihn jederzeit beibehalten. Unsere Lösung bestand darin, das JMP-Journal zu nutzen, das für jeden Kurs erstellt wurde. Wir haben für jedes Skript, das wir im Kurs bereitstellen, eine Schaltfläche hinzugefügt. Das Schaltflächenskript speichert das formatierte Skript als Zeichenfolge in einer Skriptdatei und öffnet oder führt es dann aus. Hier ist ein sehr einfaches Beispiel, um zu veranschaulichen, was der Journal-Button macht:
script = "dt = Open( \!"$SAMPLE_DATA/Big Class.jmp\!" );
dist = dt << Distribution( Y( :weight, :height ) );";
Save Text File( "My Script.jsl", script );
Open( "My Script.jsl" );
Diese Lösung funktioniert gut für unseren Zweck in der Schulung. Ich glaube aber nicht, dass es dir helfen wird.
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Aktualisieren :
Es sieht so aus, als ob JMP-Skripte nicht von einem anderen Skript bearbeitet werden können. Ich habe versucht, mein Skript in ein Skriptfeld in einem Fenster zu schreiben.Aber soweit ich sehen kann, kann der Inhalt einer Skriptbox nicht in einer Datentabelle gespeichert werden.
Es sieht so aus, als wäre dies doch nicht machbar.
Ein paar halbgare Sicherungsoptionen:
- Durch die Verwendung von \[...]\ kann ich mein Skript als Textzeichenfolge in der Datentabelle speichern. Benutzer können dann gehen und einen Blick auf die Kommentare werfen. Sie könnten diese Zeichenfolge auch kopieren und in ein neues Skript einfügen und das ursprüngliche Layout und die Kommentare erhalten. Nicht so toll, weil es einige Eingaben vom Benutzer erfordert.
- Eine andere Fallback-Möglichkeit wäre, eine Kommentarfunktion im Skript zu erstellen, die Kommentare in das Protokoll druckt. Auch keine so gute Option, da Skripte, die von einer Datentabelle ausgeführt werden, standardmäßig kein integriertes Protokoll haben.
- Oder ich könnte meinen Quellcode einfach als Ressource in einem Word- oder PDF-Dokument zur Verfügung stellen.
Irgendwelche anderen Ideen, Erkenntnisse??
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Danke Jeff,
Ich hatte Angst, dass dies die Antwort sein würde. Ich denke jedoch, dass es eine DIY-Lösung geben könnte, um dies zu umgehen ...
Zum Beispiel habe ich versucht, mein gesamtes Skript in eine Expr()-Anweisung zu packen, und es wurde gut exportiert. Natürlich steht im finalen Script noch alles zwischen den Klammern des Expr.
Aber vielleicht könnte ein Textbearbeitungsskript dies lesen und den Expr und die Klammern löschen, um den ursprünglichen Text zu haben?
also meine frage ist, ist das möglich? Kann ein Skript ein anderes Skript auf diese Weise bearbeiten?
Oder vielleicht könnte ich die Skripte meiner Datentabelle als separate .jsl-Dateien speichern und sie dann automatisch von der Tabelle importieren lassen?
Komm schon, es muss doch eine Möglichkeit geben 
Betreff: Formatierung und Kommentare mit New Script() beibehalten?Leider ist JMP nicht darauf ausgelegt, Kommentare und Formatierungen für Skripte beizubehalten, die an die Datentabelle angehängt sind. Dies wurde in der JMP-Wunschliste angefordert: Kommentare und Leerzeichen im JSL-Code beibehalten . Stellen Sie sicher, dass Sie das loben, um Ihre Unterstützung zu zeigen. Ich werde sicherstellen, dass die Entwickler sich des Wunsches bewusst sind.