고유한 값을 표시하도록 콤보 상자를 어떻게 만듭니까?여러분 모두에게,
이 스크립트는 책 "JUMP into JMP"의 스크립트와 유사합니다.
스크립트는 사용자에게 "DieNo" 목록이 채워지는 이 선택에 따라 "DCM"을 선택하라는 메시지를 표시합니다.
여기에 몇 가지 문제가 있습니다. "DCM 번호" 목록이 오름차순이 아닙니다.
기타 문제, DCM 번호를 선택하면 "DieNo" 목록이 채워집니다. 그러나 이것은 모든 값을 나열하고 고유한 값만 나열되기를 원합니다.
두 열의 데이터 유형은 char이지만 여기서는 숫자 데이터 유형이 작동하지 않습니다. 이 문제에 대한 조언.
/* 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>
또한 날짜 선택 콤보 상자를 포함하려고 합니다. 이에 대한 최고의 게시물이자 쉬운 옵션은 "날짜 데이터 필터"였습니다.
JMP에서 날짜 달력을 표시할 수 있습니까{출발 날짜에서 도착 날짜까지 항공편을 예약할 때 표시되는 작은 달력}.
건배
산
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?이 새로운 기능과 관련하여 스크립팅 인덱스와 가이드가 다소 약합니다. 스크립팅 가이드의 예제는 약간 강화될 수 있습니다. 다음은 달력을 표시하는 더 나은 방법입니다. 날짜를 선택하고 확인을 누르면 로그창에 출력됩니다.
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;
)
);
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?달력 상자를 사용하기 위해 모달 창이 필요하지 않습니다.
달력 상자는 특수한 숫자 편집 상자처럼 작동합니다. 그것은 당신을 위해 날짜를 처리하므로 형식을 엉망으로 만들거나 초를 날짜 또는 시간으로 변환할 필요가 없습니다.
메시지 프로토콜에 대해서는 Scripting Index 또는 Scripting Guide를 참조하십시오.
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?JMP 13의 새로운 달력 상자() 표시 상자에 대해 몰랐습니다. 좋습니다! 그래도 어떻게 사용합니까? 무언가를 반환하도록 대화 상자를 모달로 만들어야 했습니다.
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?또한 날짜 형식의 숫자 편집 상자() 또는 새 달력 상자()를 사용할 수 있습니다. 둘 다 잘 작동하지만 사용자에게 다른 인터페이스를 제공합니다.
Scripting Index의 Number Edit Box() 접근 방식은 다음과 같습니다.
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 ) );
다음은 역시 Scripting Index에서 가져온 Calendar Box() 솔루션입니다.
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?DCM 목록은 사전순입니다. DCM을 숫자로 해석하고 있습니다. JMP는 DCM을 문자열로 해석합니다.
숫자 값이 DCM 또는 다이에 대해 작동하지 않는 이유는 무엇입니까? 해당 데이터 유형은 주문 문제를 해결할 것입니다.
더 짧은 솔루션을 위해 몇 가지를 정리했습니다. 여기있어:
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" ) );
)
);Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?드롭다운 상자에서 다른 숫자를 선택하지 않고 기본값을 사용하면 오류가 발생하는 이유는 무엇입니까? 다른 숫자를 선택해도 오류가 발생하지 않습니다.
저는 버전 17, 맥입니다.
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?@lishuanglin 예제 스크립트로 새 토론을 만들 수 있습니까?
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?이 게시물에서 제공되는 Mark의 스크립트와 데이터를 실행하면서 기본 드롭다운 상자 번호를 변경하지 않고 누르면 오류가 발생합니다. 다른 숫자를 선택해도 괜찮습니다.
/* 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" ) );
)
);Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?매우 빠르게 스크립트를 확인합니다. 문제는 콤보 상자 내의 스크립트가 초기 생성 시 트리거되지 않는다는 것입니다. 가장 간단한 수정은 다음과 같은 것을 추가하는 것입니다.
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
스크립트 끝까지. 이렇게 하면 콤보 상자의 값이 변경되고 스크립트가 한 번 트리거됩니다.
상당히 쉬운 다른 옵션은 Combo Box 내부의 스크립트를 expression으로 변경한 다음 창이 생성되면 실행하는 것입니다.
더보기...
또는 Eval과 함께 스크립트 끝에서 << Get Function을 사용하십시오.
Eval(select1 << get function);
Re: 고유한 값을 표시하는 콤보 상자를 만들려면 어떻게 해야 합니까?감사합니다 !