Col list box() berücksichtigt keinen DatentabellenverweisMit JMP 14.1:
Ich möchte, dass die Leute zwei Datentabellen auswählen und dann die Spalten in diesen Datentabellen in zwei Spaltenlistenfeldern anzeigen. Wenn ich jedoch die Spalten in den Feldern festlege, legt JMP nur die Spalten aus der aktiven Datentabelle fest und berücksichtigt das Datentabellenargument nicht. Irgendwelche Vorschläge?
Hier ist ein kurzes Beispiel für das falsche Verhalten:
dt = New Table( "Table 1",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
dtNew = New Table( "Table 2",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 5",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 6",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
new window("Column renamer",
h list box(
Panel box("Source table",
SourceBox = Col List Box(dt,All)
),
Panel box("Destination table",
DestBox = Col List Box(dtnew,All),
),
)
);Dieses Ergebnis ist:

Das erwartete Ergebnis ist, dass in der linken Liste die Spalten 1,2,3 angezeigt werden, da dies die Namen in der ersten Tabelle sind. Stattdessen wird die zweite Tabelle (die zuletzt erstellte und damit aktive Tabelle) zweimal angezeigt.
Betreff: Col list box() berücksichtigt keine DatentabellenreferenzVerstanden! Wenn Sie möchten, können Sie mit „ColListBox()“ etwas Ähnliches tun:
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
updateCLB =
Expr(
Try(clb << delete);
thisTable = (tlb << getSelected)[1];
CMD = Expr(nw << Append(clb = ColListBox(DataTable(tableTBD), All, maxSelected(1), clbAction)));
SubstituteInto(CMD, Expr(tableTBD), Eval(thisTable));
CMD;
);
clbAction =
Expr(
Speak("Column "||(clb << getSelected)[1]||" was selected.");
);
nw = NewWindow("Test", tlb = ListBox(ListOfOpenTables, maxSelected(1), updateCLB));
Betreff: Col list box() berücksichtigt keine DatentabellenreferenzJa, mit der Verwendung eines Standard-Listenfelds habe ich es zum Laufen gebracht, aber es sieht nicht wie die Spaltenauswahldialoge aus, die JMP normalerweise verwendet. Und es zeigt keine Spaltengruppierung aus Ihrer Datentabelle an. Daher würde ich es gerne mit der Col-Listbox implementieren
Betreff: Col list box() berücksichtigt keine DatentabellenreferenzTut mir leid, Paul, ich hatte nicht die Zeit, die Nuancen dessen zu verstehen, was Sie zu tun versuchen.
Aber hier ist ein alter Codeausschnitt, der Sie vielleicht näher bringt (ohne Verwendung von „ColListBox()“):
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
updateCLB =
Expr(
thisTable = (tlb << getSelected)[1];
CMD = Expr(cols = DataTable(tableTBD) << getColumnNames("String"));
SubstituteInto(CMD, Expr(tableTBD), Eval(thisTable));
CMD;
clb << setItems(cols);
);
clbAction =
Expr(
Speak("Column "||(clb << getSelected)[1]||" was selected.");
);
nw = NewWindow("Test",
tlb = ListBox(ListOfOpenTables, maxSelected(1), updateCLB),
clb = ListBox({"Pick a table above"}, maxSelected(1), clbAction)
);Betreff: Col list box() berücksichtigt keine DatentabellenreferenzHallo Ian, danke für deine Hilfe, aber sie löst mein Problem tatsächlich nicht. Hier ist ein größerer Codeausschnitt von dem, was ich wirklich versuche. Sie wählen also zwei verschiedene Tabellen aus den geöffneten Tabellen aus und wenn Sie eine andere Tabelle auswählen, wird die Spaltenliste darunter mit den Spalten der ausgewählten Tabellen gefüllt:
Names default to here(1);
ListOfOpenTables = sort list(Get Data Table List());
ColumnWidth = 300;
new window("Column renamer",
h list box(
Panel box("Source table",
v list box(
FirstDT = List box(ListOfOpenTables, maxSelected(1), width(ColumnWidth),
dt = Data Table((FirstDT << get selected())[1]);
SourceBox << Set items(Data Table((FirstDT << get selected())[1]) << Get Column Names("String"));
),
SourceBox = Col List Box(,nlines(40), width(ColumnWidth),
OldCounter << set text(char(n items(SourceBox << get selected())) || " Columns selected");
dt << Select columns(SourceBox << get selected());
),
OldCounter = Text Box("")
)
),
Panel box("Destination table",
v list box(
SecondDT = List box(ListOfOpenTables, maxSelected(1), width(ColumnWidth),
dtnew = Data Table((SecondDT << get selected())[1]);
DestBox << Set items(Data Table((SecondDT << get selected())[1]) << Get Column Names("String"));
),
DestBox = Col List Box(,nlines(40), width(ColumnWidth),
NewCounter << set text(char(n items(DestBox << get selected())) || " Columns selected");
dtnew << Select columns(DestBox << get selected())
),
NewCounter = Text Box("")
)
),
Panel box("Actions",
v list box(
button box("Change column names",DoTheWork),
button box("Undo",Undo)
)
)
)
);Betreff: Col list box() berücksichtigt keine DatentabellenreferenzIch beantworte Ihre eigentliche Frage nicht, aber das funktioniert (JMP 14.2 auf einem Mac):
dt = New Table( "Table 1",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 1",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 2",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 3",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
dtNew = New Table( "Table 2",
Add Rows( 0 ),
Compress File When Saved( 1 ),
New Column( "Column 4",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 5",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
),
New Column( "Column 6",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [] )
)
);
new window("Column renamer",
h list box(
Panel box("Source table",
SourceBox = Col List Box(DataTable( "Table 1"),All)
),
Panel box("Destination table",
DestBox = Col List Box(DataTable( "Table 2"),All),
),
)
);