So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichIch habe ein Dialogfeld, in dem ich einen Benutzer zum Zuordnen von Spaltenpaaren benötige. Ziemlich ähnlich wie bei Join Tables.

Konkretes Beispiel: Ich habe Sätze experimentell gemessener Parameter und Sätze ihrer theoretischen Vorhersagen. Diese Daten stammen aus verschiedenen Quellen und die Benennung der Spalten kann willkürlich sein. Daher muss ich für jeden Parameter eine Zuordnung zwischen Theorie und Experiment durch die Benutzer vornehmen.
Gibt es ein Beispiel für das Skript dieses Teils? Und wie behält man diese Paare und wie verwendet man sie später?
Bisher habe ich das und bin daran interessiert, wie man das Feld im grünen Rahmen so schreibt, dass es übereinstimmende Paare widerspiegelt (wie im Beispiel oben), und wie man diese Paare behält (Liste mit 2 Elementlisten?) und wie man \Recall entfernt sie usw.:

Und hier ist das Skript:
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>
Datenmischung und -bereinigungBetreff: So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichAbhängig davon, wie Ihre Anwendung funktionieren wird, ist es möglicherweise besser, keine Werte an eine Liste anzuhängen, bis der Benutzer die Schaltfläche „Ausführen“/OK drückt, da Benutzer möglicherweise Werte aus dem Listenfeld entfernen möchten (derzeit nicht möglich).
Ich habe diesem Beispiel die Schaltfläche „Ausführen“ und „runExpr“ hinzugefügt (wenn Sie nicht über JMP16 verfügen, können Sie „Transform Each“ in eine For-Schleife ändern, die Werte an eine Liste anfügt), die Schaltfläche „entfernen“ und die Auswahl im Listenfeld „col“ löschen, wenn „Match“ gedrückt wird:
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);
Betreff: So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichOk, es funktioniert so:
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);
);Betreff: So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichNoch eine Frage. Ich habe das Skript folgendermaßen geändert:
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);Und ich bekomme Folgendes:
matchedList = {a, b, a, b};Während ich Folgendes erwartet hatte:
matchedList = {{"A_Theory", "A_Measured"}, {"B_Theory", "B_Measured"}}Oder so etwas in dieser Richtung, damit ich Paare durchlaufen kann.
Was mache ich falsch?
Betreff: So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichLass mich das versuchen.
Und um später etwas mit diesen Spalten zu machen (z. B. für jedes Paar „Y nach X anpassen“) – ist es in Ordnung, sie als Liste von Listen beizubehalten?
columnPairs = {{A_Theory, A_Experiment}, {B_Theory, B_Experiment}};und sie dann durchlaufen, oder gibt es eine bessere Option?
Betreff: So erstellen Sie ein Skript für den Dialog zum SpaltenabgleichWenn ich raten müsste, verwendet die Join-Plattform eine Listbox, in der neue Werte angehängt werden, wenn Sie Spaltenpaare hinzufügen.
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], "=");

Ich habe das Skript einfach schnell zusammengestellt, um eine bessere Benennung als bei Variablen zu verwenden, die Auswahl mehrerer Werte in Spaltenlistenfeldern zu verhindern und hartcodierte Grenzen der Spaltenindizierung zu entfernen. Wenn Sie die Werte benötigen, können Sie sie mit << get items zur Listbox-Referenz abrufen, wodurch Sie eine Liste der Elemente erhalten. Verwenden Sie dann Words(), um dies weiter in verschiedene Teile aufzuteilen.