Come scriptare la finestra di dialogo di corrispondenza delle colonneHo una finestra di dialogo in cui ho bisogno di un utente per abbinare coppie di colonne. Più o meno come facciamo in Join Tables.

Esempio specifico: ho insiemi di parametri misurati sperimentalmente e insiemi delle loro previsioni teoriche. Questi dati provengono da fonti diverse e la denominazione delle colonne può essere arbitraria, quindi ho bisogno che gli utenti corrispondano alla teoria e all'esperimento per ciascun parametro.
C'è un esempio su come scrivere questa parte? E come conservare queste coppie e come usarle in seguito?
Finora ho questo, e sono interessato a come scrivere la casella nella cornice verde per riflettere le coppie abbinate (come nell'esempio sopra) e come mantenere quelle coppie (elenco di 2 elenchi di elementi?) e come rimuovere \ richiamare loro ecc.:

Ed ecco la sceneggiatura:
dt = New Table( "Untitled 5",
Add Rows( 4 ),
Set Header Height( 46 ),
New Column( "X", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 2, 3, 4] ) ),
New Column( "A_Theory", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 3, 2, 3] ) ),
New Column( "B_Measured", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 5, 6, 5] ) ),
New Column( "A_Measured", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 4, 3, 4] ) ),
New Column( "B_Theory", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [4, 5, 3, 4] ) )
);
notImplemented = Expr(
win = New Window( "Feature Not Implemented Yet", <<MODAL></MODAL>
Miscelazione e pulizia dei datiRi: Come scriptare la finestra di dialogo per la corrispondenza delle colonneA seconda di come funzionerà la tua applicazione, potrebbe essere meglio non aggiungere valori a un elenco fino a quando l'utente non preme il pulsante Esegui / OK, poiché gli utenti potrebbero voler rimuovere i valori dalla casella di riepilogo (attualmente non possibile).
Ho aggiunto Run button e runExpr a questo esempio (se non hai JMP16, puoi modificare Transform Each in a For loop che aggiungerà valori a un elenco), rimuovi il pulsante e cancella le selezioni della casella di riepilogo col quando viene premuto Match:
Names Default To Here(1);
matchedList = {};
dt = New Table("Untitled 5",
Add Rows(4),
Set Header Height(46),
New Column("X", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4])),
New Column("A_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([1, 3, 2, 3])),
New Column("B_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6, 5])),
New Column("A_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([1, 4, 3, 4])),
New Column("B_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 3, 4]))
);
notImplemented = Expr(
a = (clb1 << get selected)[1];
b = (clb2 << get selected)[1];
clb1 << Clear selection;
clb2 << Clear selection;
lb << Append(a || "=" || b);
);
notImplemented2 = Expr(
lb << Remove Selected;
);
runExpr = Expr(
lb << get items;
lb_values = Transform Each({val}, lb << get items, Words(val, "="));
show(lb_values);
);
gui = Expr(
H List Box(
V List Box(
Panel Box("Theory",
clb1 = Col List Box(All, Nlines(5))
),
Panel Box("Experiment",
clb2 = Col List Box(All, Nlines(5))
)
),
Panel Box("Theory vs Experiment Matching",
H List Box(
Lineup box(N Col(1),
Button Box("Match", notImplemented),
Button Box("Remove", notImplemented2),
),
lb = List Box({}, Nlines(12))
)
),
Panel Box("Actions",
Button Box("Run",
runExpr;
)
)
)
);
fileLoad = New Window("Example", Show Menu(0), Show Toolbars(0), gui);
Ri: Come scriptare la finestra di dialogo per la corrispondenza delle colonneOk, funziona così:
notImplemented = Expr(
a = (clb1 << get selected)[1];
b = (clb2 << get selected)[1];
lb << Append(a || "=" || b);
matchedList[N Items( matchedList ) + 1] = Eval List ({a, b});
//Insert Into(matchedList, Eval List(columnPair));
Show(matchedList);
);Ri: Come scriptare la finestra di dialogo per la corrispondenza delle colonneUn'altra domanda. Ho modificato lo script in questo modo:
Names Default To Here(1);
matchedList = {};
dt = New Table("Untitled 5",
Add Rows(4),
Set Header Height(46),
New Column("X", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4])),
New Column("A_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([1, 3, 2, 3])),
New Column("B_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6, 5])),
New Column("A_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([1, 4, 3, 4])),
New Column("B_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 3, 4]))
);
notImplemented = Expr(
a = (clb1 << get selected)[1];
b = (clb2 << get selected)[1];
lb << Append(a || "=" || b);
Insert Into(matchedList, {a, b});
Show(matchedList);
);
gui = Expr(
H List Box(
V List Box(
Panel Box("Theory",
clb1 = Col List Box(All, Nlines(5))
),
Panel Box("Experiment",
clb2 = Col List Box(All, Nlines(5))
)
),
Panel Box("Theory vs Experiment Matching",
H List Box(
Button Box("Match", notImplemented),
lb = List Box({}, Nlines(12))
)
)
)
);
fileLoad = New Window("Example", Show Menu(0), Show Toolbars(0), gui);E sto ottenendo questo:
matchedList = {a, b, a, b};Mentre mi aspettavo questo:
matchedList = {{"A_Theory", "A_Measured"}, {"B_Theory", "B_Measured"}}O qualcosa del genere in modo da poter scorrere le coppie.
Che cosa sto facendo di sbagliato?
Ri: Come scriptare la finestra di dialogo per la corrispondenza delle colonneFammi provare.
E poi fare qualcosa con queste colonne in seguito (ad esempio, tracciare Fit Y per X per ogni coppia): va bene tenerle come un elenco di elenchi?
columnPairs = {{A_Theory, A_Experiment}, {B_Theory, B_Experiment}};e poi scorrere attraverso di loro o c'è un'opzione migliore?
Ri: Come scriptare la finestra di dialogo per la corrispondenza delle colonneSe dovessi indovinare, la piattaforma di join utilizza Listbox in cui aggiunge nuovi valori quando aggiungi coppie di colonne.
Names Default To Here(1);
dt = New Table("Untitled 5",
Add Rows(4),
Set Header Height(46),
New Column("X", Numeric, "Continuous", Format("Best", 12), Set Values([1, 2, 3, 4])),
New Column("A_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([1, 3, 2, 3])),
New Column("B_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 6, 5])),
New Column("A_Measured", Numeric, "Continuous", Format("Best", 12), Set Values([1, 4, 3, 4])),
New Column("B_Theory", Numeric, "Continuous", Format("Best", 12), Set Values([4, 5, 3, 4]))
);
notImplemented = Expr(
a = clb1 << get selected;
b = clb2 << get selected;
lb << Append(a[1] || "=" || b[1]);
);
gui = Expr(
H List Box(
V List Box(
Panel Box("Theory",
clb1 = Col List Box(All, Nlines(5))
),
Panel Box("Experiment",
clb2 = Col List Box(All, Nlines(5))
)
),
Panel Box("Theory vs Experiment Matching",
H List Box(
Button Box("Match", notImplemented),
lb = List Box({}, Nlines(12))
)
)
)
);
fileLoad = New Window("Example", Show Menu(0), Show Toolbars(0), gui);
//{col1, col2} = Words((lb << get items)[1], "=");

Ho appena messo insieme rapidamente lo script, quindi usa una denominazione migliore rispetto a quella che ho fatto per le variabili, impedisci la selezione di più valori nelle caselle di riepilogo delle colonne e rimuovi i limiti codificati dell'indicizzazione delle colonne. Quando hai bisogno dei valori che puoi ottenere allora con << porta gli elementi al riferimento della casella di riepilogo, che ti darà un elenco di elementi. Quindi usa Words () per suddividerlo ulteriormente in parti diverse.