문제여러 입력 값을 기반으로 숫자 표를 표시하는 사용자 지정 계산기를 빌드해야 합니다.
해결책숫자 편집 상자를 사용하여 값을 가져오고 함수 설정 방법을 사용하여 JSL을 숫자 편집 상자에 연결하여 값이 변경될 때 테이블을 다시 계산합니다. 테이블 상자를 사용하여 숫자 열을 담습니다. 값이 변경되면 숫자 열을 다시 작성하십시오.
if( jmpversion()<"13", Open Log(1); throw("JMP 13 이상이 필요합니다.")); // 편집 상자를 설정하려면 기본값이 필요합니다. borrow = 1e5; 년 = 2; 4월 = 15; 현재 = "USD"; // "EUR" New Window( "table demo", Border Box( Left( 5 ), Right( 5 ), bottom( 5 ), // 이 상자는 옅은 녹색을 몇 픽셀 확장합니다. V List Box( // 테두리 상자 모든 것을 보유하려면 vlist와 같은 단일 자식이 필요합니다. Border Box( Left( 20 ), Right( 20 ), top( 10 ), bottom( 10 ), // 데이터 항목 테두리 H List Box( // 데이터를 분리 "흥미로운" 제목의 입력 필드 V List Box( // 세 개의 수직 입력 필드와 해당 레이블 H List Box( // 필드 및 해당 레이블 Number Edit Box( // 필드 차용, < 12, 월 -= 12; 연도 += 1; ); 날짜[i ] = Date DMY( 일, 월, 년 ); 월 += 1; ); While( !Is Empty( tb << child ), (tb << child) << delete ); // 이전 데이터가 있는 경우 제거 // 테이블에 새 열 추가 tb << append( Number Col Box( "Due Date", 날짜, <저는 금융 전문가가 아닙니다. 공식을 올바르게 사용하고 있다고 가정하지 마십시오. 녹색 음영을 선택하고 일부 테이블 상자 매개변수를 지정하여 테이블을 매력적으로 만들었습니다. 나는 예술가가 아닙니다. 당신은 더 잘할 수 있습니다. 녹색 스페이서 상자는 멋진 색상 막대를 만들고 AutoStretching 및 MaxSize 옵션을 사용하여 페이지를 더 넓게 만들지 않고 페이지를 채웁니다. freshen() 함수는 세 개의 데이터 입력 필드 모두에서 호출되며 어떤 필드가 변경되었는지 상관하지 않습니다. 좀 더 복잡한 작업을 수행할 수 있지만 계산 속도가 정말 느린 경우가 아니면 간단하게 유지하십시오. 테이블을 마우스 오른쪽 버튼으로 클릭하고 데이터 테이블로 만들어 데이터를 추가로 처리할 수 있습니다. 데이터 테이블과 함께 매개 변수를 저장하는 방법이 필요할 수 있습니다(데이터 테이블을 만들기 위한 다른 버튼). 매개변수를 포함할 보고서를 저널링할 수도 있습니다.
또한보십시오도움말->도서->스크립팅 가이드에는 테이블 상자에 대한 자세한 정보가 있습니다.
2021년 초에 스크립팅을 시작했는데 이 게시물이 정말 유용했습니다. 위의 스크립트 대부분을 복사하여 내 계산기에 맞게 수정했으며 그 결과는 다른 플랫폼에서 사용할 계획입니다.
그러나 나는 내가 성취한 것에 완전히 만족하지 않는다. 처음으로 스크립트를 열고 실행하면 값을 입력할 수 있는 두 개의 미리 채워진 숫자 상자가 나타납니다.

미리 채워진 숫자 상자의 값 중 하나를 변경하는 경우에만 실제로 추가로 사용하려는 결과가 있는 세 번째 상자가 나타납니다.

내가 만든 것이 다음에서 제공한 코드를 기반으로 하기 때문에 @Craige_Hales 위에.
- 세 번째 상자(위에서 빨간색 원으로 표시됨)가 처음부터 표시되지만 다른 두 상자의 입력 값에 따라 업데이트되도록 하려면 어떻게 해야 합니까?
- 작은 계산기를 구축하는 데 더 효율적인 솔루션이 있습니까, 아니면 불필요하게 복잡한 접근 방식을 사용하고 있습니까?
이 시점에서 저는 스크립팅 가이드와 스크립팅 인덱스를 공부했지만 아직 저만의 솔루션을 제시할 만큼 강력한 스크립터가 아니라는 점을 언급하고 싶습니다. (저는 현재 내 사본에 액세스할 수 없기 때문에 "Jump into JMP Scripting"을 검색하지 않았습니다.)
Names default to here ( 1 );
// some default values for the first two number edit boxes
CurrentConc_wt% = 45.00;
LowestAcceptConc_wt% = 40.00;
New Window( "Calculating Concentration acceptance limit",
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Some comment")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 20 ),
V List Box(
Text Box("Instructions: [add instructions here later]")
)
),
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // added this because I copied this code and left in there, just in case...
V List Box( // border boxes need a single child, like a vlist, to hold everything
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ), // border for data entry boxes
H List Box(
V List Box(
Border Box(Left( 5 ), Right( 5 ), bottom( 5 ),
H List Box(
Number Edit Box(
CurrentConc_wt%,
<<SETFORMAT></SETFORMAT>
이것을 더 깊이 살펴보기까지는 시간이 좀 걸릴 것입니다. 그러나 원래 JSL의 맨 끝에서 호출이 누락되었을 수 있다고 생각합니다. freshen() 이 호출은 마치 무언가를 이미 클릭한 것처럼 모든 상자를 초기화하기 위해 존재했습니다.
덕분에 쉽게 고칠 수 있었습니다. 결국 만족해야 할 이유가 있을지도 모릅니다.