Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Mein aktuelles JSL-Skript funktioniert einwandfrei, wenn ich es schrittweise durchführe. Bei der Ausführung kann es jedoch zu Fehlern kommen.Ich kann das einigermaßen lösen, indem ich die Funktion „wait()“ einfüge, aber es funktioniert nicht immer.Gibt es eine einfache Funktion, die ich oben in meinem Skript aufrufen kann, damit es nacheinander ausgeführt wird?
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Nun, anscheinend ist es nicht so rosig, wie ich gehofft hatte. Mancher Code wird in diesem onclose()-Befehl nicht ordnungsgemäß ausgeführt.Ein 'dt << sort(...)' funktionierte im inneren onclose() nicht richtig, aber es funktionierte einwandfrei, wenn ich das innere onclose() auskommentierte.
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Danke für die Antwort. Ich habe versucht, es als Funktionen einzurichten, aber es wartete immer noch nicht auf Benutzereingaben.Was die Fragen zur Neukodierung und Wertreihenfolge angeht, bin ich mit ihnen vertraut, aber ich hätte mehr Wert darauf legen sollen, sie (oder eigentlich alle nativen Funktionen) als auszuführen modal von dem ich gehofft hatte, dass er so ausgeführt werden könnte, dass die Funktion abgeschlossen wird, bevor mit der nächsten Codezeile fortgefahren wird.
Ich verstehe, was Sie über die Verwendung von jsl sagen, um dies direkt neu zu kodieren, aber ich hatte gehofft, dass eine Mischung aus jsl und nativer Benutzeroberfläche eine Reihe allgemeiner Aufgaben ausführen würde, die mit anderen Aufgaben immer gleich sind (hartcodiertes Scripting ist in Ordnung). deren Ein-/Ausgaben sich ändern und sich daher für die native Benutzeroberfläche eignen, z. B. zum Ordnen von Werten und zum Neucodieren. ich fand Craiges Beitrag von damals im März wo er etwas gepostet hat, das dies kann, aber aufgrund des Spaltennamens -> der Funktionsfensterbenennung etwas restriktiv ist. In meinem Fall werden die Spaltennamen in Zeichenfolgen oben angezeigt, daher ist das für mich in Ordnung. Hier ist es für 2 Ebenen der Interaktivität modifiziert. Getestet nach JMP13-Standard.
dt = Open( "$sample_data/big class.jmp" );
dt << Go To( :sex ) << Recode; // First interactivity, as a test, change "F" to "Female"
Window( "Recode" ) << onclose(
dt << Go To( :sex );
main menu("column info"); // second interactivity, as a test, change value ordering properties.
Window( "sex" ) << onclose(
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
);
);Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Wenn ich ein ziemlich komplexes Skript programmiere, verwende ich normalerweise die folgende Struktur für meinen Code:
Main = Expr(
returna = A(passing variables);
returnb = B(passing variables);
);
A = Function({Passed variables},
processing code
);
B = Function({Passed variables},
processing code
);
// Enter the script by executing the Main section
Main;
Auf Ihre Fragen zu Recode- und Col-Info-Elementen lauten die Antworten „Nein“ und „Ja“. Es gibt keine direkte Funktion zum Ausführen des Recode-Elements aus dem interaktiven JMP. Dies liegt daran, dass es einfacher ist, die Funktionalität in offenem JSL zu replizieren.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt:Sex[ dt << Get Rows Where( :Sex == "F" )] = "Female";
dt:Sex[ dt << Get Rows Where( :Sex == "M" )] = "Male";
// or
For Each Row(
If( :Sex == "F", :Sex = "Female",
:Sex = "Male"
);
Was die Elemente im Dialogfeld „Spalteninformationen“ angeht, sind Formatierung, Spalteneigenschaften wie Wertreihenfolge, Spezifikationsgrenzen usw. in JSL verfügbar und können in das geändert werden, was sie benötigen.
All dies wird im Scripting Guide behandelt
Hilfe==>Bücher==>Skripthandbuch
und/oder im Scripting Index
Hilfe==>Skriptindex
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?
@txnelson schrieb:
Die Methode, die ich verwende, besteht darin, das Skript in funktionale Komponenten aufzuteilen und dann den Steuerabschnitt des Skripts das Skript durchlaufen zu lassen und die Komponenten aufzurufen, wenn ich sie benötige.Normalerweise platziere ich den Code in EXPR(()-Abschnitten.Der in EXPR() eingefügte Code wird erst ausgeführt, wenn er vom Steuerabschnitt aufgerufen wird.
Wenn Sie sagen, dass Sie die Komponenten aufrufen, wenn Sie sie benötigen, meinen Sie damit, dass Sie die Ausdrücke innerhalb des Steuerabschnitts aufrufen und ihn direkt ausführen, oder müssen Sie sie manuell und einzeln aufrufen, damit die vorherige Funktion beendet wird? Wenn ersteres der Fall ist, wie ist der Steuerteil aufgebaut, damit er wirklich wartet?
Gibt es eine Möglichkeit, native Funktionen wie Recode und Column Info (um die Reihenfolge der Werte zu ändern) als modale Fenster/Funktionen aufzurufen?
Danke,
Mike
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Es ist eine bewährte Methode, der Datentabelle eine Nachricht darüber zu übergeben, welche Plattform ausgeführt werden soll, anstatt nachverfolgen zu müssen, welche Tabelle die aktuell aktive Tabelle ist.Also statt:
dt = Datentabelle( "Datentabelle xxx" );
dt << Clear Select;
dt<
Bivariat(X(.......
dt = Datentabelle( "Datentabelle xxx" );
dt << Bivariate(X(.........
Stellt sicher, dass die bivariate Plattform auf der Datentabelle ausgeführt wird, auf die durch „dt“ verwiesen wird.
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Beim automatischen Ausführen von Skripten traten mehrere Fehler auf, aber als ich sie manuell testete, war alles in Ordnung.
Solche Fehler passieren mir normalerweise, wenn ich versuche, eine Handlung auf der Grundlage einer falschen Tabelle zu erstellen
Jetzt füge ich diese Zeilen hinzu, bevor ich Plots/Diagramme in Skripten erstelle
dt = Datentabelle( "Datentabelle xxx" );
dt << Clear Select;
dt<Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?
Es tut mir leid zu hören, dass Sie hier Probleme haben.
Unser Ziel ist es, dass Sie niemals eines brauchen sollten Warten() um Ihr Skript zum Laufen zu bringen. Wir wissen, dass es Zeiten gibt, in denen die verschiedenen Elemente der Benutzeroberfläche (Fenster, Plattformen usw.) einen Moment benötigen, um vollständig instanziiert zu werden, bevor sie angemessen auf den Rest Ihrer JSL reagieren können. Wir möchten diese Situationen jedoch intern behandeln, damit Sie sich in Ihrer JSL keine Sorgen darüber machen müssen.
Wenn Sie also auf Situationen stoßen, die durch Hinzufügen eines gelöst werden können Warten() in Ihren Code einbinden möchten, senden Sie diese bitte an Technischer Support , damit wir sie verfolgen und beheben können.
Danke!
-Jeff
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Ich legte warte(0); Anweisungen zwischen Codeabschnitten, die ich nacheinander ausführen möchte.
Betreff: Wie kann ich die sequentielle Ausführung meines Skripts erzwingen?Die Methode, die ich verwende, besteht darin, das Skript in funktionale Komponenten aufzuteilen und dann den Steuerabschnitt des Skripts das Skript durchlaufen zu lassen und die Komponenten aufzurufen, wenn ich sie benötige.Normalerweise platziere ich den Code in EXPR(()-Abschnitten.Der in EXPR() eingefügte Code wird erst ausgeführt, wenn er vom Steuerabschnitt aufgerufen wird.