내 이메일 중 하나에서 몇 가지 가능한 주제를 언급했지만 여기에는 몇 가지 아이디어가 있습니다.
- 참조 사용
- dt = Open()... Current Data Table() 대신 등
- 강력한 방식으로 보고서/보고서 계층에서 보고서에 대한 참조 찾기
- 네임스페이스/범위 관리
- 변수 초기화 중
- 프로그래밍 스타일 찾기
- 전역을 대문자로 작성
- 표현 활용하기
- 시도-캐치
- 벌채 반출
- 표시, 쓰기, 인쇄, 사용자 정의 로거
- 스택 활용
- 버튼/창의 변수
- 특히 함수에서 돌아올 때
- 컨텍스트 상자(), 창:
- 버튼 - 경로
- 패키징 스크립트
- 대규모 JMP 생성 스크립트를 사용하는 대신 해당 부분을 보다 강력한 스크립트로 분리하세요.
- 모범 사례
- 기호/전역 지우기/삭제 방지
- 로그인 지우기 스크립트를 떠나지 마십시오
- 변수/네임스페이스 잠금
- 경로
- 파일 경로 변환
- 기본 디렉토리
- $PATH_VARIABLES
- 열 참조
- Column(dt, "colname") vs dt:colname vs :colname, vs dt:"colname"n (및 AsColumn) 등...
- 부동 소수점 수학
- 도약하기 전에 살펴보십시오 . 코드를 작성할 때 허락을 구하는 것보다 용서를 구하는 것이 더 쉽습니다.
- 누락된 값/빈 값
- 비어 있음(), 누락됨(), If, IfMZ, N 항목() > 0
- 열린 테이블 확인, 보고서 열기, 이미 열린 사용자 정의 창 등...
- << 창을 앞으로 가져오기
- .jsl과 jmpaddin의 Throw()
- 사용자 정의 모달 창 기능
- JMP 생성 스크립트 개선(및 활용)
- 참조/변수 추가
- JMP 생성 스크립트 단축
- 파견 피하기
- 사용자 선호도가 이에 영향을 미치는 방식(보통 매우 큰 문제를 일으킴)
- 데이터 구조의 이해와 활용
- 예를 들어 모든 것을 다른 변수 이름에 저장할 필요가 없습니다(특히 Eval Parse를 사용하는 경우에는 그렇지 않음).
- 목록/연관 배열 사용
- UI에 관해 이야기할 때 필요할 때 참조할 수 있습니다.
부분적으로 관련된 게시물("새로운" JMP 커뮤니티 페이지로 인해 매우 지저분해 보일 수 있음)
감사합니다. 여기에서 제 작업 중 일부를 공유할 수 있지만 제가 하는 작업의 대부분은 이미 위에 언급되어 있습니다.
- Try(close(dt_ref,nosave)); dt_ref = Open(...) --> 테이블을 정리하고 스크립트가 처음 실행될 때 오류를 생성하지 않습니다. 문제는 테이블 이름을 바꿀 수 있지만 dt 참조 스위치도 전환되므로 JSL이 여전히 테이블을 닫는다는 것입니다.
- 항상 탭을 사용하여 더 큰 루프와 기능을 식별하면 코드에서 길을 잃지 않고 누락된 항목을 검색할 수 있습니다.
- 다중 언어 사용 가능성이 있는 경우 표 작성 단계 후에 열 이름을 바꾸는 것을 고려하십시오. 이로 인해 다른 사용자의 코드가 손상될 수 있지만 귀하의 코드는 정상적으로 작동합니다.
- Try to dynamically work with reference in platform to avoid user inputs.
You could do this:
dt << Process screening(Process Variables({:Column 4, :Column 6, :Column 7}));
But you can also use this:
dt = current data table();
col_names = dt << get column names();
spec_list = {};
for(k=1,k<=nitems(col_names),k++,
if(!isempty(column(dt,k) << Get Property("Speclimits")),insertinto(spec_list,col_names[k]);););
dt << Process screening(Process Variables(eval(spec_list)));
altering a column name will then not break the code and the question about missing spec limits will not be triggered. -
아마도 첨부된 것과 같은 것으로 갈 것입니다(모든 것을 살펴볼 시간이 충분하지는 않겠지만, 문제가 되지는 않을 것입니다). "JSL을 위한 팁"과 같은 것으로 끝났을 수도 있지만, 그것을 만드는 데도 시간이 많이 걸렸습니다.
Jarmo, 스크립트에 대한 몇 가지 생각이 있습니다.
103번째 줄: 루프가 매우 짧고 실행할 줄이 한 줄뿐인 경우에만 이걸 사용합니다. 이렇게 하면 코드를 조금 더 위로 올릴 수 있습니다.
109번째 줄: 짧은 이름을 사용하면 JMP 함수를 mean = (x1 + x2) / 2와 같은 변수로 재정의하는 데 문제가 발생할 수 있습니다. m_production_speed 또는 mean_production_speed라고 쓰는 것이 더 좋습니다.
149번째 줄: 코드 접기를 위해 쉼표 바로 뒤에 if 루프와 if 주석을 넣는 습관을 들였습니다.
다음과 같이 코드를 작성하면:
if(1,//average of x
mean_x = mean(x);
);
그리고 코드를 접으면 다음과 같이 보입니다.

for 루프나 if 문 위에 한 줄을 더 절약할 수 있습니다.
198번째 줄: " 매트릭스를 초기화하겠습니다. 미리 만들어 놓으면 채우는 게 더 빠를 겁니다." 조종사로는 1분이 걸렸습니다. 주석이 200개나 되는 코드를 디버깅하는 건 상상도 못하겠네요. *g*
212번째 줄: 로그와 워크플로를 참조로 사용한 다음 코드를 프로그래밍 스타일에 맞게 변경할 수 있다는 점을 언급하고 싶습니다. 이는 특히 프로그래밍을 하지 않는 사용자에게 내가 프로그래밍해야 하는 스크립트로 무엇을 달성하고 싶은지에 대한 워크플로를 만들 것을 요청할 때 그렇습니다. 그래서 그들이 원하는 것을 잘 이해하고 대부분의 기능을 이미 코딩했습니다.
391번째 줄: 이렇게 하면 그래프 빌더를 열어둔 상태에서 테이블을 반복할 때 스크립트 속도가 빨라질 수 있으며, 이렇게 하면 변경 사항마다 그래프를 업데이트하지 않아도 됩니다.
Names Default To Here( 1 );
try(close(dt,nosave));
dt = new table("test");
dt << New Column( "Y",
Numeric,
"Continuous",
Format( "Best", 12 ),
<<SET initial="" data="https://community.jmp.com/"></SET><SPAN>line 414: 여기에 추가하고 싶은 것이 있습니다. << Subset 등의 함수를 사용할 때 고정된 이름을 지정할 때는 항상 테이블 참조를 추가하세요. 이는 생성된 이름이 이미 있고 JMP가 자동으로 끝에 "2"를 추가할 때 매우 유용합니다. 참조가 없으면 실수로 잘못된 테이블에서 작업할 수 있습니다.</SPAN>
<SPAN>74번째 줄: 이건 내 스크립트에 훔칠 내용이에요</SPAN>:)</img>
<SPAN>line757: 이 방법은 루프를 매우 느리게 만들 수 있지만, SQL 문을 처리할 때 유용합니다. 요청을 보내면 스크립트의 나머지 부분을 차지하여 오류를 일으킬 수 있기 때문입니다. 데이터를 가져오는 데 시간이 걸릴 수 있지만 코드를 줄별로 실행하면 잘 작동합니다.</SPAN>
line 780: maybe referencing to the JSL cook book? <A href="https://community.jmp.com/t5/JSL-Cookbook/tkb-p/jmp-scripting" target="_blank">JSL 요리책 - JMP 사용자 커뮤니티</A>
line 787: Just be aware that this will also break when a report reference name contains a variable.
This is what happened here: <A href="https://community.jmp.com/t5/Discussions/fitting-truncated-data-to-a-continuous-distribution/m-p/772495#M95287" target="_blank">Re: 잘린 데이터를 연속 분포에 맞추기 - JMP 사용자 커뮤니티</A>
the detection limits is added with censored data in the title and can change depending on the data set.
THX a lot for the script.<BR /><BR />Regards<BR /> Mauro
787번 라인
이것이 바로 XPath를 거의 항상 helpKey 속성과 함께 사용하는 이유입니다(outlinebox 제목은 신경 쓰지 않습니다). 견고한 참조를 구축하는 방법은 너무 많아서, 예를 들어 20분 정도를 할애할 수 있습니다.
예를 들어 검출 한계의 경우 helpKey 또는 와일드카드를 사용할 것입니다(윤곽선 상자 이름이 변경될 수 있다는 것을 알고 있다면...)
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
Column(dt, "height") << Set Property("Detection Limits", {60, 100});
dist = dt << Distribution(
Stack(1),
Continuous Distribution(
Column(:height),
Horizontal Layout(1),
Vertical(0),
Process Capability(0),
Fit Normal
)
);
obs = Report(dist) << XPath("//OutlineBox[@helpKey='FitDistributions']");
show(obs << get title);
// Or
ob = Report(dist)[OutlineBox("Fitted Normal Distribution?")];
show(ob << get title);
// Or
obs2 = Report(dist) << XPath("//OutlineBox[contains(text(), 'Fitted Normal Distribution')]");
show(ob << get title);
</CODE></P>
<P>I also added few things based on your comments. Thanks!<CODE class=" language-jsl">