Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und RegexVollständige Offenlegung: Ich bin kein Programmierer und JSL bereitet mir eine besonders schwierige Zeit, aber ich denke, dass dieser Teil des Skripts, den ich schreibe, viel einfacher sein sollte als bisher. Ich verwende den Datenfilter häufig, wobei "Suchen" und "Reguläre Ausdrücke" aktiviert sind (siehe Bild), jedoch gibt es keine Option zum Speichern dieser Einstellungen, sodass sie jedes Mal umständlich neu aktiviert werden müssen, wenn ich den Filter öffne. Was ich möchte, ist ein eingebettetes Tabellenskript, das:
1) öffnet den Datenfilter
2) fügt automatisch die aktuell ausgewählte Spalte hinzu (dh ich wähle eine Spalte aus und starte dann das Skript)
3) „Suchen“ aktivieren
4) Aktivieren Sie "Regulärer Ausdruck"

Leider speichert die Option zum Speichern des Skripts nur dies:
Current Data Table() << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( :name ), Display( :name, Size( 160, 225 ), List Display ) )
);Find und Regex werden nicht mit dem Skript gespeichert. . .
Aber hier ist der Teil, der mich gezwungen hat, um Hilfe zu bitten. Ich kann nicht für mein ganzes Leben herausfinden, wie ich den Namen der aktuell ausgewählten Spalte an die Funktionen "columns()" und "Display()" übergeben kann.
Ich habe schon vieles ausprobiert, zum Beispiel das hier:
Names Default to Here( 1 );
dt = Current Data Table( );
col_selected = dt << Get Selected Columns(string);
dt << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( col_selected ), Display( col_selected, Size( 160, 225 ), List Display ) )
);Aber ich bekomme einen Fehler:
"Angegebene Spalte nicht in Datentabelle gefunden. bei Zugriff oder Auswertung von 'Spalten' , Spalten( col_s selected ) /*###*/"
Wahrscheinlich, weil col_selected eine Liste ist, aber ich kann nicht herausfinden, wie ich nur den Namen aus der Liste mit einem Element herausbekomme. Sollte wirklich nicht so schwer sein.
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und RegexDanke @Mark_Bailey Dies funktioniert auch, obwohl es nur die erste Spalte filtert, wenn mehrere ausgewählt sind. Mit Ihrem Vorschlag zum Abrufen der Spaltenreferenz konnte ich jedoch eine FOR-Schleife erstellen, die genau das tut, was ich will.
Names Default to Here( 1 );
dt = Current Data Table( );
list = dt << Get Selected Columns( );
obj = dt << Data Filter( );
For( i = 1, i <= N Items( list ), i++,
obj << Add Filter( columns( Column( list[i] ) )
)
);
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und RegexDieser Weg ist verschlungen. Es ist jedoch nicht der einzige Weg, der funktioniert. Ausdrücke sind mächtige Konstruktoren, aber sie sind nicht immer erforderlich. Beachten Sie, dass das Argument Columns() eine Spaltenreferenz erwartet. Das ist alles, was dazu gehört. Dies kann ein Literalwert (Spaltenname), ein in einer Variablen gespeicherter Wert oder ein von einer Funktion zurückgegebener Wert sein.
Names Default to Here( 1 );
// open example data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// select a column (mimic result by interactive user)
dt << Go To( :age );
// identify selection
col = dt << Get Selected Columns( String );
// obtain column reference
col = Column( col[1] );
// launch data filter on selected column
df = dt << Data Filter(
Add Filter( Columns( col ) )
);
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und Regex@ionatx Ich bin bei dir.Ich habe selbst damit gekämpft und schließlich die Lösung hier im Forum gefunden.Mein grobes Verständnis ist, dass Sie all dieses Rigmarole durchgehen müssen einen Ausdruck in einen anderen Ausdruck einfügen. Mit Ihrem ursprünglichen Code war col_selected nie vorhanden ausgewertet.Data Filter() sah nur die Zeichen „col_selected“, die es nicht als Spaltentitel erkannte, und gab daher den Fehler „ Angegebene Spalte nicht in Datentabelle gefunden ".Sie schließen es also in Expr() ein, was bedeutet, dass es sich um einen Ausdruck handelt, der ausgewertet werden muss.Schließen Sie dann das Ganze in Eval Expr() ein, um die Auswertung der Dinge zu erzwingen, die in Expr() eingeschlossen sind.Wickeln Sie dann ein Eval() um das Ganze Ausdruck was im Wesentlichen führt aus den Ausdruck, um die gewünschte Ausgabe zu erzeugen.Es fühlt sich alles sehr kompliziert an, aber so funktioniert es.
Möchten Sie mehr wissen?https://community.jmp.com/t5/JSL-Cookbook/Insert-one-expression-into-another-using-Eval-Insert-Eval-Expr/ta-p/48998
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und Regex@Chris_Rodrigues das hat funktioniert, verstehe ich nicht Warum es funktionierte, aber es funktionierte.
@Jeff_Perkinson vielen Dank für die Nachbereitung, und ja, das werde ich tun.
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und Regex@Chris_Rodrigues hat eine Handhabe dafür, wie die Variable in der Data Filter()-Nachricht ausgewertet werden kann, und ich kann bestätigen, dass es keine JSL-Unterstützung für das Aktivieren der Find- und Regex-Optionen gibt.
Wenn Sie der Meinung sind, dass dies wertvoll wäre, tragen Sie es unbedingt in das ein JMP-Wunschliste .
Betreff: Skript zum Öffnen des Datenfilters für die aktuell ausgewählte Spalte mit aktiviertem Suchen und RegexUm eine Variable wie col_selected an die Datenfilterfunktion zu übergeben, müssen Sie das Konstrukt Eval(Eval Expr(Expr())) verwenden.JSL ist so seltsam.Aber so sieht es aus:
Names Default to Here( 1 );
dt = Current Data Table( );
col_selected = dt << Get Selected Columns(string);
Eval(
Eval Expr(
dt << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( Expr(col_selected) ), Display( Expr(col_selected), Size( 160, 225 ), List Display ) )
);
)
);Für die Find- und Regex-Optionen... Ich bezweifle, dass das überhaupt möglich ist.Wenn Sie sich die Data Filter()-Dokumentation im Skriptleitfaden ansehen, werden diese Optionen nicht erwähnt.Ich bezweifle, dass die Skriptschnittstelle diese Granularität hat und diese Kontrollkästchen nur interaktiv aufgerufen werden können.Ich kann mich aber irren.Jemand anderes könnte sich mit einer Lösung dafür melden.