JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenEs sollen alle Spalten rechts neben der Spalte „Adders“ ausgewählt werden. Der folgende Code wird ausgeführt, wählt aber die Spalten rechts neben „Adders“ nicht sichtbar aus. Die Anzahl der Spalten links und rechts neben „Adders“ kann variieren.
<JSL> Names Default To Here(1);
dt = Data Table("Test Table");
dt << Bring Window To Front;
Show(dt << Get Name);
// Step 1: Get all column names and show them
colNames = dt << Get Column Names();
Show(colNames);
// Step 2: Find the index of the "Adders" column
targetColName = "Adders";
colIndex = Loc(colNames, targetColName);
Show(colIndex); // Should be > 0 if found
// Step 3: Try to visually select all columns to the right
If(colIndex > 0 & colIndex < N Cols(dt),
dt << Clear Column Selection;
For(i = colIndex + 1, i <= N Cols(dt), i++,
Column(dt, i) << Set Selected(1);
);
// Step 4: Show what JMP thinks is selected
selected = dt << Get Selected Columns;
Show(selected);
,
New Window("Error", Text Box("Column 'Adders' not found, or it's the last column."));
);</JSL>
Ausgabe:
dt << Get Name = "Test Table";
colNames = {A, B, Adders, X, Y};
colIndex = [];Automatisierung und SkriptingWindowsBetreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenIch würde hier zwei Änderungen vornehmen. Sie müssen in Ihrer Meldung „Spaltennamen abrufen“ „String“ angeben. Anschließend sollten Sie die Funktion Loc() in Contains() ändern. Loc() gibt eine Matrix zurück, die manchmal leer ist. Contains() gibt eine Ganzzahl zurück (0, wenn nicht gefunden).
Names Default To Here(1);
dt = Data Table("Test Table");
dt << Bring Window To Front;
Show(dt << Get Name);
// Step 1: Get all column names and show them
colNames = dt << Get Column Names( "string" );
Show(colNames);
// Step 2: Find the index of the "Adders" column
targetColName = "Adders";
colIndex = Contains(colNames, targetColName);
Show(colIndex); // Should be > 0 if found
// Step 3: Try to visually select all columns to the right
If(colIndex > 0 & colIndex < N Cols(dt),
dt << Clear Column Selection;
For(i = colIndex + 1, i <= N Cols(dt), i++,
Column(dt, i) << Set Selected(1);
);
// Step 4: Show what JMP thinks is selected
selected = dt << Get Selected Columns;
Show(selected);
,
New Window("Error", Text Box("Column 'Adders' not found, or it's the last column."));
);
//Output:
//dt << Get Name = "Test Table";
//colNames = {"A", "B", "Adders", "X", "Y"};
//colIndex = 3;<BR />//selected = {:X, :Y};Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenIch bin sicher, dass es auch andere Möglichkeiten gibt, dies zu tun, aber das folgende Skript findet die Spalte „Adders“ und wählt sie sowie alle Spalten rechts davon aus:
names default to here(1);
dt = current data table();
targetCol = "Adders";
targetColNum = 0;
for( i = 1, i <= n cols( dt ), i++,
if( column( dt,i ) << get name == targetCol, targetColNum = i )
);
dt << select columns( targetColNum::n cols(dt) )
Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenIch habe Ihren ursprünglichen Beitrag bearbeitet und das JSL und seine Ausgabe mithilfe der Eingabesymbole oben im Bearbeitungseingabefenster in ein JSL-Fenster bzw. ein Codefenster verschoben.
Ich habe Ihren Code außerdem so geändert, dass << Spaltennamen abruft, Zeichenfolgen zurückgibt und statt Loc() Contains() verwendet, um einen einzelnen Wert statt eines Matrixwerts zurückzugeben.
Names Default To Here(1);
dt = Data Table("Test Table");
dt << Bring Window To Front;
Show(dt << Get Name);
// Step 1: Get all column names and show them
colNames = dt << Get Column Names(string);
Show(colNames);
// Step 2: Find the index of the "Adders" column
targetColName = "Adders";
// Loc() returns a matrix, contains returns a scaler value
colIndex = contains(colNames, targetColName );
Show( colIndex ); // Should be > 0 if found
// Step 3: Try to visually select all columns to the right
If( colIndex > 0 & colIndex < N Cols( dt ),
dt << Clear Column Selection;
For( i = colIndex + 1, i <= N Cols( dt ), i++,
Column( dt, i ) << Set Selected( 1 )
);
// Step 4: Show what JMP thinks is selected
selected = dt << Get Selected Columns;
Show( selected );
,
New Window( "Error", Text Box( "Column 'Adders' not found, or it's the last column." ) )
);Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenVielen Dank für die Korrekturen.
Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenJim: Danke für die Korrekturen.
Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenScott: Danke für den Code, der funktioniert.
Betreff: JMP 18: Alle Spalten rechts von einer angegebenen Spalte auswählenEnthält + Indizierung, die dies verwendet, sollte dies ziemlich einfach machen
Names Default To Here(1);
dt = Data Table("Test Table");
collist = dt << Get Column Names("String");
adders_idx = Contains(collist, "Adders");
If(adders_idx == 0,
Throw("No Adders column found");
);
dt << Select columns(collist[adders_idx + 1::N Items(collist)]);
Show(dt << Get Selected Columns);