모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.모두 안녕
이것은 게시물에 대한 후속 조치입니다.
https://community.jmp.com/t5/Discussions/JSL-How-to-close-data-tables-after-analysis/mp/36739
그러나 JSL Debgger를 실행하는 동안 내 스크립트에서 오류가 발생했습니다.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);스크립트는 dt4를 제외한 모든 테이블을 닫는 것처럼 잘 실행되지만 If 문 아래에 첨부된 파일에 표시된 대로 오류가 발생합니다. 이것이 무엇을 의미하는지 아는 사람이 있습니까?
스크립트는 정상적으로 실행되고 dt4를 제외한 모든 테이블을 닫지만 이 시점 이후에 스크립트를 확장할 때 문제가 발생합니다. dt4 테이블에 대해 이 시점 이후에 실행할 그래프 빌더 스크립트가 있지만 아무 작업도 수행하지 않습니다. 그래서 여기에서 이 오류가 다음 단계를 계속하기 위해 스크립트를 중지하는지 궁금합니다.
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.당신이 >= 0이기 때문입니다.데이터 테이블이 없습니다 0
>= 1 또는 >0으로 만드십시오.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 1, i--,
If( Contains( DontClose, Data Table( i ) << get name ),
Continue(),
Close( Data Table( i ), "No Save" )
)
);Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.조언 해주셔서 감사합니다. 접근 방식을 변경했으며 이제 스크립트의 앞부분에서 데이터 테이블을 닫습니다. 이제 스크립트가 실제로 더 빨라졌습니다. 감사해요
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.필 나도 같은 생각을 하고 있었다.테이블 이름은 중복될 수 없으므로 새 테이블 이름 "dt4"를 만들고 이미 "dt4" 테이블이 있는 경우 JMP에서 이름을 "dt4 2"로 지정합니다.테이블 이름은 예상한 것과 다를 수 있습니다. 이것이 제가 위의 코드가 당면한 문제를 해결하는 데 좋지 않은 방법이라고 생각하는 또 다른 이유입니다.
방금 원본 게시물에 링크 된 게시물을 보았습니다.Uday의 코드는 훨씬 더 생산 준비가 되어 있습니다.불행히도 OP는 txnelson의 단순화를 사용하고 있습니다. 이는 단순화이며 그가 모든 문제를 가지고 있는 곳입니다.
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다."dt4"가 테이블의 실제 이름입니까?스크립트에서 테이블에 대해 정의한 변수 이름일 가능성이 더 높습니까? 귀하의 스크립트가 테이블 이름, 즉 JMP 테이블 상단에 표시되는 것(예: "Big Class")을 찾고 있다고 생각합니다.
다음은 스크립트에서 사용되는 Get Name() 함수의 간단한 예(스크립팅 색인에서 가져옴)입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
n = dt << Get Name();
Show( n );
BTW, 이것이 문제의 원인이라는 것이 틀릴 수 있습니다!
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.테이블이 연결된 테이블일 수 있습니다. 아래 예를 참조하십시오.그렇지 않으면 스크립트에 오류가 있고 실수로 잘못된 테이블을 참조합니다.이름으로 테이블을 찾고 있기 때문일 수 있습니다.
Names Default To Here( 1 );
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt2 = dt1 << Summary(
Group( :height ),
Freq( "None" ),
Weight( "None" )
);
close(dt1, "nosave"); //closes both dt1 and dt2 since dt2 is dependant on dt1
어느 쪽이든 위의 코드는 마감 테이블을 처리하는 데 적합하지 않습니다.첫째, 스크립트와 관련이 없는 테이블을 닫아 잠재적으로 사용자가 작업 중이던 다른 작업을 닫았다는 사실에 화를 낼 수 있습니다.둘째, 필요하지 않은 테이블을 끝까지 닫아두는 것은 메모리를 비효율적으로 사용하는 것입니다.스크립트가 끝날 때까지 기다리지 않고 사용 직후 테이블을 닫는 것이 더 나은 방법/패턴입니다.전체 스크립트에 테이블이 필요한 경우 목록의 테이블을 추적하여 스크립트와 관련된 테이블만 닫는 것이 좋습니다.
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.안녕하십니까?
나는 이것을 변경했지만 JSL 디버거에서 여전히 동일한 오류가 발생합니다.
Re: 모든 데이터 테이블을 닫지만 추가 분석을 위해 하나는 열어 둡니다.@ivomdb ,
표시되는 오류는 일반적으로 JMP가 존재하는지 모르는 데이터 테이블을 참조하거나 테이블에 액세스할 참조가 없는 경우에 발생합니다. 이는 주로 데이터 테이블 참조가 손실되거나 참조되기 전에 닫힐 때 발생합니다.
이 문제를 해결하는 한 가지 방법은 다음을 수행하는 것입니다.
또한 테이블이 조기에 닫히지 않는지 확인해야 합니다.
DontClose = ("dt4"); // Example names of tables you want to leave
// Loop backwards through the list, so the table numbers do not change
For( i = N Table(), i >= 0, i--,
Current Data Table(Data Table(i)); // This should make the data table you are working with active and current
If( Contains( DontClose, Data Table( i ) << get name ),
Continue();
,
// else
Close( Data Table( i ), "No Save" );
)
);<BR />