Column() vs. As Column() vs. datable:column vs. dt:As name("column")JSL hat mehrere Möglichkeiten, auf Spalten zu verweisen. Lassen Sie uns zuerst eine Datentabelle öffnen.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Bands data.jmp" );
Jetzt erstellen wir ein Tabellenskript, das so etwas hat.
dt = current data table();
print(dt:timestamp == Column(dt, "timestamp"));
// 0
print(Column(dt, "timestamp")==As Column(dt, "timestamp"));
//0
Wenn ein Benutzer in automatisierten Skripten (z. B. einem Diagramm) den Namen einer Spalte ändert, scheint er das Skript an den neuen Spaltennamen anzupassen. Dies schlug in benutzerdefiniertem JSL fehl, wobei so etwas wie Index() angezeigt wurde.
Wie würde man all diese Methoden verwenden, um ein JSL-Skript robust gegenüber Spaltennamensänderungen zu machen?
Grüße,
SkripterstellungRe: Column() vs As Column() vs datable:column vs dt:As name("column")Eigentlich erstaunlich, dass a Armaturenbrett funktioniert immer noch nach dem Umbenennen von Spalten
- wenn es als Tabellenskript gespeichert ist 
Vielen Dank für die Implementierung eines so großartigen Autokorrekturalgorithmus.
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Hier ist der Wunsch 
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idi-p/556596
Sollte jetzt für den JSL-Editor einfach zu implementieren sein - da eine ähnliche Funktionalität gerade mit dem neuen Workflow-Builder von Jmp 17 eingeführt wurde:
https://community.jmp.com/t5/JMP-Wish-List/catch-quot-missing-column-quot-error-and-provide-a-selection/idc-p/561663/highlight/true#M2949
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Schönes Video-Tutorial über die Unterschiede zwischen column() und as column():
Die häufigsten JSL-Fehler und wie man sie vermeidet (2020-US-30MP-571)
(ab @ 5:18 min)
mit dem Beispiel
dt << Select Where( Column( colName )[Row()] == 14 );
dt << Select Where( As Column( colName ) == 14 );
Betreffend
Wie würde man all diese Methoden verwenden, um ein JSL-Skript robust gegenüber Spaltennamensänderungen zu machen?
Wie wäre es mit einer Fehlerbehandlungsfunktion, die fehlende Spaltenereignisse nach Änderungen des Spaltennamens abfängt – mit einer Option zum automatischen Korrigieren des Codes?
Die Idee:
Im Falle einer fehlenden Spalte könnte JMP, anstatt eine Fehlermeldung anzuzeigen, ein Fenster mit einer Spaltenliste öffnen, um die richtige auszuwählen.
Dann könnte die Ausführung des Codes weiterlaufen – und der Quellcode automatisch repariert werden.
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Die beste Referenz (außerhalb meiner eigenen Erfahrung und vieler, vieler Versuche und Irrtümer) ist der Skriptindex:


Hilfeseiten sind an anderer Stelle Spalte(- , "name", "formatiert") Und
Als Spalte (Name) . Auch hier gibt es einige Informationen Skriptleitfaden > JSL-Bausteine > Regeln für die Namensauflösung > Häufig gestellte Fragen zur Namensauflösung Und Skriptleitfaden > Datentabellen > Spalten > Nachrichten an Datenspaltenobjekte senden Auch Zeilen in einer Tabelle durchlaufen , also im Grunde die Dokumentation (insbesondere Scripting Guide).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Könnten Sie Ihrer Antwort bitte eine Referenz hinzufügen, die dieses Bit erklärt?
"As Column() "greift" auf eine Spalte zu ( was das bedeutet, hängt vom fall ab... )."
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Normalerweise mag ich keine +1-Beiträge, aber @jthi Dies ist genau die gleiche Methode, die ich für Produktionsskripte anwende.Normalerweise denke ich darüber nach
Names default to here( 1 );
dt = open("$SAMPLE_DATA\Big Class.jmp");
col_name = "age";
show(ismissing(AsColumn(dt, col_name)) & ismissing(dt:age)); // these are both the same as far as I know
cols = dt << get column references; // these are the actual references
show(cols[2] == Column(dt, col_name)); // these are references
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Dies ist ein bisschen langer Beitrag und springt hier und da, sorry dafür..
Da Column(), Column(), :colname, ... in JSL nicht einfach ist und welche zu verwenden ist, hängt vom Fall ab. Meine bevorzugte Methode ist stets Verwenden Sie (außer wenn ich nicht kann oder wenn ich ein etwas saubereres Aussehen im Skript haben möchte) Column(datatable_reference, "string of the name of the column"). :colname hat seine Vorteile, die manchmal zum Nutzen von Skriptern verwendet werden können (einige werden hier erwähnt Skriptleitfaden > JSL-Bausteine > Regeln für die Namensauflösung > Regeln für die Namensauflösung im Abschnitt Ausnahmen).
Ich verwende auch gerne Zeichenfolgen von Spaltennamen anstelle der :colname-Syntax, um einige Probleme zu vermeiden, die hier und da auftreten können. Zum Beispiel << Get Column Names("String") statt nur << Get Column Names() und dann erhalte ich bei Bedarf die Referenz mit Column(string).
Spalte(- , "name", "formatiert") Und
Als Spalte (Name) sind nicht gleich. Column() gibt Ihnen eine Referenz auf eine Spalte zurück und As Column "greift" auf eine Spalte zu (was dies bedeutet, hängt vom Fall ab...). Wenn Sie dieses Skript zum ersten Mal ausführen, gibt dt:timestamp einen fehlenden Wert zurück, da Row() für die Indizierung von JMP nicht richtig definiert wurde (es wird mit 0 initialisiert).
Mehr sehen...
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
//Row() = 0;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"));
Row() = 1;
Show(Row(), dt:name, Column(dt, "name"), As Column(dt, "name"), Column(dt, "name")[], Column(dt, "name")[Row()]);
Print(dt:name == Column(dt, "name"));
// 0
Print(Column(dt, "name") == As Column(dt, "name"));
//0
Print(dt:name == As Column(dt, "name"));
//1
stop();
//
Show(Column("name") << get values);
Show(As Column("name") << get values);
Show(:name << get values);
stop();
col1 = "name";
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(col1), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Eval(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(As Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
gb = dt << Graph Builder(
Size(529, 466),
Show Control Panel(0),
Variables(X(Column(dt, col1)), Y(:height)),
Elements(Points(X, Y, Legend(6)))
);
@ich h enthält einige gute Vorschläge zum Verwalten von Namensänderungen in Spalten. Auch beim Einfügen von Spalten in beispielsweise Graph Builder können Sie verwenden Fügen Sie mit Eval Insert, Eval Expr, Parse und Substitute einen Ausdruck in einen anderen ein und manchmal Eval(). << Get Name kann auch von Zeit zu Zeit hilfreich sein oder zum Beispiel eine Benutzeroberfläche mit Filter Col Selector / Col List Box erstellen (wie z @pauldeen empfohlen).
Re: Column() vs As Column() vs datable:column vs dt:As name("column")meinst du sowas?
Nach dem Ausführen des Codes wurden die ersten beiden Einträge im TABLE SCRIPT automatisch auf den neuen Namen geändert.
Es funktionierte sogar für den :"name"n
Gleiches Verhalten für alle Diagramme usw.: automatisch an den neuen Spaltennamen angepasst.
Aber für As column() und Column() hat es nicht funktioniert.
Auch nicht für Spaltennamen im ursprünglichen Skript 
Vor:

nach:

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Script(
"script",
:name;
:"name"n;<BR /> As Column( "name" );
Column("name");
);
dt:name << Set Name( "name_2" );
dt:name[1]
Re: Column() vs As Column() vs datable:column vs dt:As name("column")Wie würde Du wissen Sie, auf welche Spalte das Skript verweisen soll?Wenn Sie wirklich Änderungen an Spaltennamen überwachen müssen, können Sie dies tun, indem Sie Änderungen in der Tabelle abonnieren und diese Spaltennamen irgendwo aufzeichnen, aber ich denke, das wäre ziemlich komplex.Könnten Sie stattdessen eine Spalteneigenschaft definieren und danach suchen?
Abonnieren Sie ein Beispiel aus dem Scripting Guide:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {dtab, col, oldname},
Print( dtab << getname() );
Print( "new column name", (col << getname()) );
Print( "old name", oldname );
);
sub = dt << Subscribe( "", OnRenameColumn( f ) );
Column( dt, 1 ) << set name( "test" );
Wait( 1 );
dt << unsubscribe( sub, on rename column );
Verwenden Sie die Spalteneigenschaft
Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt:height << Set Property( "My Script Identifier", X );
XVar = Filter Each({c}, dt << Get Column References,
ident = char(c << Get Property( "My Script Identifier" ));
if( is empty(ident), 0, ident == "X", 1, 0)
)[1];Re: Column() vs As Column() vs datable:column vs dt:As name("column")Indizieren Sie die Spalte entweder mit der Zahl Spalte (dt, 1) oder fordern Sie den Benutzer auf, eine Spalte auszuwählen oder einen Spaltennamen einzugeben. Schauen Sie in den Hilfedateien nach New Window().