Comment créer un script pour la boîte de dialogue de correspondance de colonneJ'ai une boîte de dialogue dans laquelle j'ai besoin d'un utilisateur pour faire correspondre des paires de colonnes. À peu près comme nous le faisons dans Join Tables.

Exemple spécifique - J'ai des ensembles de paramètres mesurés expérimentalement et des ensembles de leurs prédictions théoriques. Ces données proviennent de différentes sources et la dénomination des colonnes peut être arbitraire, j'ai donc besoin que les utilisateurs fassent correspondre la théorie à l'expérience pour chaque paramètre.
Y a-t-il un exemple sur la façon de scripter cette partie ? Et comment conserver ces paires et comment les utiliser plus tard ?
Jusqu'à présent, j'ai ceci, et je suis intéressé par la façon de scripter la boîte dans un cadre vert pour refléter les paires correspondantes (comme dans l'exemple ci-dessus) et comment conserver ces paires (liste de 2 listes d'éléments ?) Et comment supprimer\rappeler eux etc. :

Et voici le script :
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>
Fusion et nettoyage des donnéesRe : Comment créer un script pour la boîte de dialogue de correspondance de colonneSelon le fonctionnement de votre application, il peut être préférable de ne pas ajouter de valeurs à une liste tant que l'utilisateur n'a pas appuyé sur le bouton exécuter / ok, car les utilisateurs peuvent vouloir supprimer des valeurs de la zone de liste (ce qui n'est pas possible actuellement).
J'ai ajouté le bouton Exécuter et runExpr à cet exemple (si vous n'avez pas JMP16, vous pouvez modifier Transform Each en une boucle For qui ajoutera des valeurs à une liste), supprimer le bouton et effacer les sélections de la liste déroulante lorsque Match est pressé :
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);
Re : Comment créer un script pour la boîte de dialogue de correspondance de colonneBon, ça marche comme ça :
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);
);Re : Comment créer un script pour la boîte de dialogue de correspondance de colonneEncore une question. J'ai modifié le script de cette façon:
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);Et j'obtiens ceci :
matchedList = {a, b, a, b};Alors que je m'attendais à ça :
matchedList = {{"A_Theory", "A_Measured"}, {"B_Theory", "B_Measured"}}Ou quelque chose dans ce sens pour que je puisse parcourir les paires.
Qu'est-ce que je fais mal?
Re : Comment créer un script pour la boîte de dialogue de correspondance de colonneLaissez-moi essayer.
Et puis faire quelque chose avec ces colonnes plus tard (par exemple, tracer Fit Y by X pour chaque paire) - est-il acceptable de les conserver sous forme de liste de listes ?
columnPairs = {{A_Theory, A_Experiment}, {B_Theory, B_Experiment}};puis parcourez-les ou il y a une meilleure option?
Re : Comment créer un script pour la boîte de dialogue de correspondance de colonneSi je devais deviner, la plate-forme de jointure utilise Listbox dans laquelle elle ajoute de nouvelles valeurs lorsque vous ajoutez des paires de colonnes.
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], "=");

Je viens de créer rapidement le script, donc utilisez une meilleure dénomination que moi pour les variables, empêchez la sélection de plusieurs valeurs dans les zones de liste col et supprimez les limites codées en dur de l'indexation des colonnes. Lorsque vous avez besoin des valeurs, vous pouvez les obtenir avec << get items to the list box reference, ce qui vous donnera une liste d'éléments. Ensuite, utilisez Words() pour diviser davantage cela en différentes parties.