Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Verehrte Gäste,
Dieses Skript ähnelt einem im Buch „JUMP into JMP“.
Das Skript fordert den Benutzer auf, ein „DCM“ auszuwählen. Basierend auf dieser Auswahl wird die Liste „DieNo“ ausgefüllt.
Hier gibt es einige Probleme. Die Liste „DCM-Nummer“ ist nicht in aufsteigender Reihenfolge.
Anderes Problem: Wenn ich eine DCM-Nummer auswähle, wird die Liste „DieNo“ ausgefüllt. Hier werden jedoch alle Werte aufgelistet. Ich möchte, dass nur eindeutige Werte aufgelistet werden.
Für beide Spalten ist der Datentyp char, der numerische Datentyp funktioniert hier jedoch nicht. Irgendwelche Ratschläge zu diesem Problem.
/* Open the sample data table */
dt = Open( "$Desktop/JMP scripts/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
Unique DCM=Associative array(dt:DCMNo);
nitems(unique DCM);
DCM1= unique DCM<<GET keys=""></GET>
Ich versuche auch, das Kombinationsfeld für die Datumsauswahl einzubinden. Der beste Beitrag und die einfachste Option hierfür war „Datumsdatenfilter“.
Erlaubt mir JMP, einen Kalender für Daten anzuzeigen {ein kleiner Kalender, wie er angezeigt wird, wenn wir Flüge vom Abflugdatum bis zum Ankunftsdatum buchen}?
Beifall
San
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Der Skriptindex und die Anleitung sind im Hinblick auf diese neue Funktion etwas schwach. Die Beispiele im Scripting-Guide könnten etwas präzisiert werden. Hier ist eine bessere Version, die den Kalender anzeigt. Wenn Sie ein Datum auswählen und auf OK klicken, wird es im Protokollfenster gedruckt.
Names Default To Here( 1 );
nw = New Window( "Calendar Box Example",
cal = Calendar Box(),
ok_button = button box("OK",
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
nw << close window;
)
);
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Sie benötigen kein modales Fenster, um die Kalenderbox zu verwenden.
Das Kalenderfeld funktioniert wie ein spezielles Zahlenbearbeitungsfeld. Es verwaltet Datumsangaben für Sie, sodass Sie sich nicht mit Formaten herumschlagen oder Sekunden in Datums- oder Zeitangaben umwandeln müssen.
Informationen zum Nachrichtenprotokoll finden Sie im Scripting Index oder im Scripting Guide.
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Ich wusste nichts über das neue Anzeigefeld „Kalenderbox()“ in JMP 13. Schön! Aber wie benutzt man es? Ich musste das Dialogfeld modal machen, damit es etwas zurückgab.
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Sie können auch eine Number Edit Box() mit einem Datumsformat oder die neue Calendar Box() verwenden. Beide funktionieren gut, bieten dem Benutzer jedoch eine unterschiedliche Benutzeroberfläche.
Hier ist der Number Edit Box()-Ansatz aus dem Scripting Index:
Names Default To Here( 1 );
New Window( "Example",
fontobj = numbox = Number Edit Box( 0 )
);
numbox << Set Format( Format( "m/d/y", 12 ) );
numbox << Set( Date MDY( 10, 2, 1989 ) );
Hier ist die Calendar Box()-Lösung, ebenfalls aus dem Scripting Index entnommen:
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Die DCM-Liste ist alphabetisch geordnet. Sie interpretieren das DCM als Zahl. JMP interpretiert DCM als Zeichenfolge.
Warum funktionieren numerische Werte nicht für DCM oder Die? Dieser Datentyp würde Ihr Bestellproblem lösen.
Für eine kürzere Lösung habe ich ein paar Dinge aufgeräumt. Hier ist es:
Names Default to Here( 1 );
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Warum erhalte ich eine Fehlermeldung, wenn ich nicht die anderen Zahlen im Dropdown-Feld auswähle und die Standardwerte verwende? Wenn ich die anderen Zahlen auswähle, erhalte ich keine Fehlermeldung.
Ich bin Version 17, Mac.
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?@lishuanglin Könnten Sie eine neue Diskussion mit einem Beispielskript erstellen?
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Es ist Marks Skript und die in diesem Beitrag bereitgestellten Daten, die ich bei der Ausführung festgestellt habe. Wenn ich auf die Standard-Dropdown-Feldnummern drücke, ohne sie zu ändern, erhalte ich eine Fehlermeldung. Die Auswahl anderer Nummern ist in Ordnung.
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Bei der schnellen Überprüfung des Skripts besteht das Problem darin, dass das Skript im Kombinationsfeld bei der ersten Erstellung nicht ausgelöst wird. Die einfachste Lösung besteht darin, so etwas hinzuzufügen
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
bis zum Ende des Skripts. Dadurch wird der Wert im Kombinationsfeld geändert und das Skript dann einmal ausgelöst.
Eine andere recht einfache Möglichkeit wäre, das Skript im Kombinationsfeld in „Ausdruck“ zu ändern und es dann auszuführen, sobald das Fenster erstellt wurde.
Mehr sehen...
Oder verwenden Sie << Get Function am Ende des Skripts mit Eval
Eval(select1 << get function);
Betreff: Wie erstelle ich ein Kombinationsfeld, um eindeutige Werte anzuzeigen?Danke !