Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Ready to learn about stringing everything together into an actual script?Sind Sie bereit, zu lernen, wie man alles zu einem tatsächlichen Drehbuch zusammenfügt? Willkommen zurück zu meiner Serie über die Grundlagen der Skripterstellung JMP . Dies ist der fünfte Eintrag in einer Reihe, die so strukturiert ist, dass Sie daran arbeiten können. Wenn Sie gerade erst dabei sind, sollten Sie unbedingt einen Blick auf die früheren Einträge in werfen die Serie , weil das hier ein Idiot ist. Hier sind die Links zu ihnen, damit Sie sie überprüfen können:
In Ordnung? Immer noch hier? Hast du dir die früheren Folgen angeschaut? Exzellent! Vorwärts zum Ruhm!
Aus der Hausaufgabe vor ein paar Wochen geht hervor, dass wir alle eine Menge JSL-Schnipsel von der Verwendung haben sollten Skript speichern zum Skriptfenster oder den Scripting Index, um Codeteile zu erhalten, die wir benötigen. Du tat mach deine Hausaufgaben, Rechts ? Gut! Beginnen wir damit, alles zu einem tatsächlichen Skript zusammenzufügen. Aber zuerst müssen wir uns noch ein wenig unterhalten.
Einer von Mikeys Coding-Haustieren peeves
Okay, Leute. Lassen Sie mich für einen Moment wegen etwas aufstehen. Wenn wir Code schreiben, müssen wir stets Kommentiere es! Wir können keine Vermutungen über die Person anstellen, die unseren Code nach uns liest, auch nicht über uns selbst.
Zurück am College nahm ich an einem Visual Basic-Programmierkurs teil. Das erste, was wir lernten, war, wie man Code kommentiert und Pseudocode schreibt. Bei Pseudocodes handelt es sich übrigens um Kommentare, die Sie vor dem Schreiben von Code schreiben, um Ihnen dabei zu helfen, herauszufinden, was Sie tun müssen (sie ähneln der Fehlerliste, in die ich Sie schreiben ließ). dieser erste Beitrag ). Der Dozent nannte Kommentieren und Pseudocode „ein guter Bürger in der Coding-Community sein“. Wir wurden sogar danach bewertet, wie gut wir den von uns eingereichten Code kommentiert haben. Es ist so wichtig.
Die Wahrheit ist, dass Sie selten die vollständige Kontrolle darüber haben, wer Ihren Code sieht. Ein typisches Beispiel: In dieser Blogserie habe ich Ihnen Schritt-für-Schritt-Anleitungen gegeben, wie Sie das Add-In einer anderen Person rückentwickeln können. Ich kann garantieren, dass einige (wenn nicht die meisten) der Leute, die diese Add-Ins geschrieben haben, nicht damit gerechnet haben, dass andere einen Blick unter die Haube ihres Codes werfen würden. Ich kann auch garantieren, dass Sie im Code nicht so viele Kommentare finden, die Ihnen dabei helfen, herauszufinden, was los ist, wie Sie es sich erhoffen.
Sie müssen Ihren Code kommentieren, um sicherzustellen, dass jemand, der ihn später betrachtet, leicht verstehen kann, was Sie tun. Ja, das Kommentieren ist eine Qual. Und ja, es dauert länger. Aber, NEIN , man kann es nicht einfach überspringen. Es wird sich auf lange Sicht auszahlen. Und ich praktiziere, was ich hier predige. Ich habe Add-Ins, die ich vor fünf Jahren geschrieben habe und die ich immer noch verstehen kann, weil ich sie ausführlich kommentiert habe (und ich erinnere mich noch daran, wie mühsam das war!).
Diejenigen unter Ihnen, die bereits programmieren, stellen Sie sicher, dass Sie Ihren Code kommentieren, damit jemand anderes verstehen kann, was Sie tun. Diejenigen unter Ihnen, die lernen, gewöhnen sich an und bleiben dabei, Ihren Code ausführlich zu kommentieren. Lassen Sie mich jetzt von dieser Seifenkiste herunterkommen und Ihnen zeigen, wie.
Kommentieren in JSL
Öffnen wir JMP und öffnen wir die Datentabelle „Big Class Families.jmp“, die wir verwendet haben. Wenn Sie das Skriptbeispiel der letzten Sitzung nicht gespeichert haben, erstellen Sie es neu. Sie sollten etwas haben, das so aussieht:

Es gibt zwei Möglichkeiten, Kommentare in Ihren JSL-Code einzufügen. Die erste besteht darin, einzelne Zeilen mit einem doppelten Schrägstrich („//“) auszukommentieren. Alles, was nach den Schrägstrichen bis zu einem Wagenrücklauf (dem Drücken der Eingabetaste auf der Tastatur) folgt, wird ignoriert. Im Allgemeinen verwende ich diese Methode für meine kurzen Inline-Kommentare. Es ist auch nützlich, einzelne Codezeilen zu deaktivieren, die Sie nicht ausführen möchten. Werfen wir einen Blick darauf, was das bedeutet:

Die zweite Möglichkeit zum Kommentieren wird in Fällen verwendet, in denen Sie große Codeblöcke deaktivieren oder große Kommentar- und Textblöcke generieren möchten. Diese Art von Kommentar wird als Kommentarblock bezeichnet. Dies geschieht mithilfe eines Flags für den öffnenden Kommentar, der aus einem Schrägstrich und einem Sternchen („/*“) besteht, und eines Flags für den schließenden Kommentar, das aus einem Sternchen und einem Schrägstrich („*/“) besteht. Hier ist ein Beispiel dafür, wie dies verwendet werden könnte:

Beachten Sie, dass ich nicht über das Kommentieren diskutiere Stil Hier. Das liegt eigentlich an Ihnen. Sie werden im Laufe der Zeit Ihren eigenen Stil entwickeln und möglicherweise sogar unterschiedliche Kommentarstile für verschiedene Zwecke verwenden. Meine Inline-Kommentare (wie die in den Beispielen) unterscheiden sich völlig von den Kommentaren, die ich in so etwas wie einer Anwendung mache. Es geht darum, die Kommentare zu schreiben und in einem Skript intern mit der Art und Weise, wie Sie es tun, konsistent zu sein.
Die schwierigsten Teile dieser gesamten Serie
Wirklich, diese ganze Serie hat zu diesen nächsten Punkten geführt. Es gibt drei grundlegende Dinge, die Sie wissen müssen, um mit JSL zu beginnen. Das erste ist das Kommentieren (siehe die Predigt weiter oben in diesem Artikel). Der zweite und dritte sind wie man Dinge benennt Und wie man Nachrichten sendet zu ihnen.
Ich nehme an, dass es möglich ist, einen eigenen ANOVA-Algorithmus zu programmieren (ein Kollege von mir erzählt eine sehr unterhaltsame Geschichte darüber). Es ist jedoch viel einfacher, einer Datentabelle durch eine Nachricht mitzuteilen, dass sie eine ANOVA mit „Y nach X anpassen“ ausführen soll, wie wir in der vorherigen Folge gelernt haben. Dieser grundlegende Arbeitsablauf (etwas benennen, ihm eine Nachricht senden) ist ein großer Teil dessen, worum es bei JSL geht. Ja, Sie können sich mit Logik und Schleifen, GUI-Entwicklung usw. befassen, aber Brute-Force-Skripting erfordert eigentlich nur Namen, Nachrichten und ein wenig Durchsuchen des Skriptindex.
Dinge benennen
Beginnen wir mit der Benennung der Dinge. Sie benennen Dinge, indem Sie JMP einen Namen geben, gefolgt von einem Gleichheitszeichen, und dann den Text, die Zahl, den Code usw. schreiben, den dieser Name darstellen soll. Der Name heißt a Variable . Sie können sich Variablen als Container vorstellen, in die Sie Inhalte einfügen können, oder als Spitznamen für offene Berichte JMP .
Schauen wir uns ein Beispiel mit einer ANOVA an. Um den Code für eine ANOVA zu erstellen, führen Sie zunächst die Analyse in „Y nach X anpassen“ (unter „Analysieren“) aus, aktivieren Sie dann den ANOVA-Test und speichern Sie den Code dann in einem Skriptfenster. Hier ist der Bericht dafür unter Verwendung von Big Class Families.jmp und dem resultierenden JSL-Code, der aus dem roten Dreiecksmenü gespeichert wurde (Höhe als Y, Geschlecht als X und Auswahl). Mittel/Anova/Gepoolte t unter dem roten Dreieck):


Dieses kleine JSL-Snippet erstellt eine ANOVA für jede Datentabelle, die dieselben Spaltennamen wie die ursprüngliche Datentabelle hat. (Wir werden uns in dieser Serie jedoch nicht um die Parametrisierung kümmern. Es liegt etwas außerhalb des Rahmens.)
Was ist nun, wenn Sie eine Reihe von Datentabellen geöffnet haben und steuern möchten, für welche Datentabelle Sie diese ANOVA ausführen möchten? Nun, Sie können das Skript bearbeiten, indem Sie der Datentabelle, für die Sie die ANOVA ausführen möchten, einen Namen geben und dann den von JMP generierten Code als Nachricht senden. Wenn Sie im Scripting-Index nachsehen (siehe den Artikel zum Anfordern von Hilfe), finden Sie mehrere Möglichkeiten, dies zu tun. Sie können entweder eine Datentabelle direkt aufrufen oder mithilfe von Current Data Table() einen Verweis auf die Datentabelle abrufen, auf die sich JMP gerade konzentriert. Es gibt eine dritte, etwas komplexere Option, bei der Sie einer Datentabelle beim Öffnen einen Namen geben. Ich habe unten Beispiele für alle drei aufgeführt (und beachten Sie auch hier die Verwendung von Kommentaren zur Informationsvermittlung!):

Das Aufrufen der Datentabelle nach Namen funktioniert, solange eine Datentabelle geöffnet ist, die den Namen hat, den Sie verwenden möchten. Dies kann nützlich sein, wenn Sie über eine Liste mit Datentabellennamen verfügen, mit denen Sie arbeiten können. Dies kann auch nützlich sein, wenn Sie Ihre Datentabelle ausgeblendet oder minimiert haben. In beiden Fällen können Sie weiterhin Nachrichten an die Datentabelle senden, auch wenn Sie diese nicht unbedingt sehen können. Diese Methode verwendet das Formular:
= Datentabelle(“”);
Die für unsere Zwecke wahrscheinlich nützlichste Möglichkeit, einer Datentabelle eine Variable zuzuweisen, ist die Verwendung der Funktion „Current Data Table()“. Diese Funktion erfasst die aktive oder aktuelle Datentabelle und weist sie der von Ihnen angegebenen Variablen zu. Sobald die Tabelle der Variablen zugewiesen ist, spielt es keine Rolle, ob eine andere Datentabelle „aktuell“ wird (wenn Sie beispielsweise eine Übersichtstabelle erstellen, haben Sie immer einen Verweis auf die erste Datentabelle, bis Sie die Variable neu definieren). Es hat eine einfachere Form:
= Aktuelle Datentabelle();
Die letzte Methode ist nützlich, wenn Sie davon ausgehen möchten, dass die Datentabelle möglicherweise nicht geöffnet ist, wenn jemand das Skript ausführt. Mit dieser Methode generiert JMP einen Dateidialog, der es dem Benutzer ermöglicht, die Datei auszuwählen, die er öffnen möchte. Wenn der Benutzer seine Auswahl bestätigt, wird die Datei geöffnet und ihr der von Ihnen gegebene Variablenname zugewiesen. Auch hier handelt es sich um eine einfache Form:
= Open();
Verwendung der Offen(…); Die Methode kann auch nützlich sein, wenn Sie mit Dateipfaden und Verzeichnissen vertraut sind. Sie können den Dateipfad in Klammern setzen, um JMP mitzuteilen, wo nach der Datei gesucht werden soll, etwa so:

Beachten Sie außerdem, dass ich etwas namens a verwende Pfadvariable im Offen(…); Befehl zum Verkürzen der Zeichenfolge. Es gibt einen Abschnitt darüber im Skript-Anleitung .
Nachrichten senden
Sobald Sie etwas benannt haben, können Sie ihm eine Nachricht senden. Es funktioniert ähnlich wie das Senden einer Textnachricht an jemanden auf Ihrem Telefon. Wenn Sie eine SMS senden, müssen Sie zunächst den Namen, die E-Mail-Adresse oder die Telefonnummer des Empfängers kennen, um ihn identifizieren zu können. Sie geben das in die Messaging-App ein und senden dann die Nachricht. So geht's mit der ANOVA der großen Klasse. Ich werde ein bisschen Spaß haben und mich von JMP bitten lassen, in diesem Fall eine Datei zu öffnen:

Lassen Sie uns ab Zeile 5 auspacken, was wir hier sehen. Das erste, was wir sehen, ist der Variablenname der Datentabelle, der wir eine Anweisung geben möchten. Genauso wie wenn wir einer Person eine SMS schicken oder ihr eine Anweisung geben, müssen wir erkennen, mit wem wir sprechen. Als nächstes gibt es zwei „Kleiner-als“-Symbole (<<). So etwas haben wir bereits beim Glue Operator (;) gesehen. Das Symbol „<<“ wird als Nachrichtenoperator bezeichnet. Dadurch wird der Empfänger der Nachricht darüber informiert, dass es sich bei dem, was folgt, um eine Nachricht handelt. Danach sehen wir eine Funktion namens Oneway(…); mit den Argumenten, die die Funktion zum Erstellen des ANOVA-Berichts benötigt. Hinweis: Alle Informationen zu den Optionen für diese Funktion finden Sie in der Dokumentation oder im Skriptindex, Sie müssen sie jedoch nicht handschriftlich aufschreiben. Führen Sie die Analyse einfach einmal durch und holen Sie sich das fertige Skript (mit allen Optionen) mit einem der Skript speichern unter... Befehle, die ich Ihnen zuvor gezeigt habe.
Einige Kleinigkeiten
Okay, es gibt noch drei letzte Details, die geklärt werden müssen. Das erste ist die Frage der Aneinanderreihung der Dinge. Wenn Sie beispielsweise eine ANOVA durchführen und im selben Skript einen Graph Builder erstellen möchten, müssen Sie JMP warnen, dass weitere Anweisungen folgen müssen. Verwenden Sie dazu den Glue-Operator (;), den ich immer wieder erwähne.

Wie ein Semikolon in geschriebenem Englisch teilt das Semikolon am Ende eines Befehls JMP mit, dass weitere Anweisungen folgen. Kleber befindet sich am Ende einer Anweisung wie Bivariate(...) ; , oder Verteilung(...) ; , oder etwas einen Namen geben: stuff = 5 + 6 ; . Wie Sie sich vielleicht aus früheren Beiträgen erinnern, fügt JMP das Semikolon automatisch ein, wenn wir es verwenden Skript speichern…im Skriptfenster , aber wenn ich freihändig Skripte erstelle, ist das der häufigste Fehler, den ich beim Skripterstellen begehe – ich vergesse, die Dinge zusammenzukleben.
Das zweite Detail besteht darin, sicherzustellen, dass Ihre Skripte in einer JMP-Sitzung gute Bürger sind. Dies geschieht, indem Sie alle von Ihnen erstellten Variablen einem zuweisen Namensraum . Ein Namespace ist eine kleine Sandbox, die verhindert, dass die von Ihnen erstellten Variablennamen andere Teile der Software beeinträchtigen. Der Standard-Namespace wird „Here“-Namespace genannt. In Skripten sieht das so aus (siehe Zeile 2):

Diese Anweisung sollte immer am Anfang eines Skripts stehen (bis Sie wissen, wann Sie sie nicht verwenden sollten!), um zu verhindern, dass Ihre Variablennamen mit anderen Skripten oder Teilen von JMP kollidieren. Bevor Sie anfangen, sich an diesem Punkt die Haare zu reißen, hier eine TL;DR-Version dessen, was ich gerade gesagt habe: Denken Sie daran, immer „Names Default To Here(1)“ einzugeben. am Anfang Ihres Skripts und für den Moment wird es Ihnen gut gehen. Wenn Sie mehr über Namespaces erfahren möchten, finden Sie einen Absatz zu diesem Thema in diesen anderen Beitrag habe ich vor einiger Zeit geschrieben .
Das letzte Detail, das ich besprechen muss, ist, wie man einen Spaltennamen in einem gespeicherten Skript ändert. Es ist wirklich einfach. Schauen Sie in Ihrem gespeicherten Skript nach. Ihre Spaltennamen sollten mit einem Doppelpunkt („:“) davor angezeigt werden. Dieser Doppelpunkt zeigt an, dass es sich um Spaltennamen handelt (er kann auch andere Bedeutungen haben, im Moment bedeutet er jedoch Spaltennamen). Um einen Spaltennamen zu ändern, ändern Sie ihn einfach, aber denken Sie daran, den Doppelpunkt voranzustellen. Wenn Ihre Spaltennamen Sonderzeichen enthalten, stoßen Sie möglicherweise auf etwas wie :Name(“…”), wenn JMP das Skript für Sie ausgibt. Auf diese Weise geht JMP mit der Tatsache um, dass Ihr Spaltenname Zeichen enthält, die Probleme verursachen würden, wenn nicht klar wäre, dass sie Teil einer Zeichenfolge sind. Auch wenn die Verwendung von :Name(“…”) in unseren Skripten eine schlechte Codierungsform ist, kann die Software es verwenden, weil sie keine Wahl hat. Sie sollten versuchen, bessere Spaltennamen zu wählen.
Aber du hast es vergessen...
OK, mir ist klar, dass einige von Ihnen an dieser Stelle wahrscheinlich etwas nervös werden. Sie denken vielleicht: „Sie haben die Funktionen vergessen!!!“ oder „ABER WAS IST MIT AUSDRÜCKEN!!!“ oder sogar: „DU Idiot!!! Du hast die Logik und die Schleife völlig beschönigt!“ Zunächst einmal ist es nicht schön, Namen zu nennen. Zweitens habe ich nichts davon vergessen. ICH bewusst habe es weggelassen.
Die Sache ist, dass diese Serie nicht dazu gedacht ist, Ihnen die Haare in den Nacken zu blasen. Wie ich bereits zu Beginn der Serie sagte, soll es Ihnen den richtigen Weg weisen, Ihnen eine gute Karte, ein paar Snacks und ein Schulterklopfen geben und Ihnen zeigen, wo Sie Hilfe suchen können, falls Sie nicht weiterkommen. Es ist ein Ausgangspunkt. (Übrigens haben Sie an dieser Stelle meine Erlaubnis, einen Snack zu bekommen.)
Für diejenigen von uns, die regelmäßig Drehbücher schreiben, ist vieles von dem, worüber ich hier spreche, so grundlegend – so grundlegend – dass es sich um ein Muskelgedächtnis handelt. Was wir vergessen haben, ist, dass ein unerfahrener Skripter allein durch die Nutzung des Grundwissens, das ich hier behandele, eine Menge abdecken kann. Wie auch immer, wenn Sie hyperventilieren, weil ich nichts besonders Ausgefallenes behandelt habe, entspannen Sie sich. Wir werden in der nächsten Serie ganz tief in den Kaninchenbau vordringen. Kehren wir zunächst zur Diskussion zurück und sprechen wir über die Hausaufgaben dieser Woche.
Hausaufgaben
Alles klar – hier sind wir. Die große Hausaufgabe. Diese Woche werden Sie die Codeteile, die Sie letzte Woche erstellt haben, nehmen und sie zusammenfügen. Tun Sie dies Stück für Stück. Wenn Ihr Skript außerhalb einer Datentabelle (als JSL-Datei) ausgeführt werden soll, öffnen Sie zunächst Ihre Datentabelle und fügen Sie sie in eine Variable ein. Fügen Sie danach, unabhängig davon, wo Ihr Skript gespeichert wird, etwas hinzu und prüfen Sie, ob es das tut, was Sie erwarten. Fügen Sie dann weitere hinzu und überprüfen Sie erneut, ob Sie das erwartete Ergebnis erhalten. Denken Sie daran, dass die Community, Hilfedateien usw. Ihre Freunde sind. Wenn Sie Fehlermeldungen erhalten, schauen Sie sich das Protokoll an ( Ansicht > Protokoll für PC und Fenster > Protokoll für MacOS) und die vorherige Folge .
Viel Glück und bis nächste Woche!