테이블 이름을 올바르게 지정하는 방법은 무엇입니까?모두,
나는 테이블에 이름을 설정하는 방법을 알고 있습니다. 그러나 때로는 해당 이름이 이미 존재하는 경우(우연히 또는 이전 스크립트 실행 후 왼쪽에서) "My Table" 대신 이름이 "My Table 2"로 설정됩니다. 정확히 내가 설정하고 싶은 대로 올바르게 설정하려면 어떻게 해야 합니까?
나는 이 작업을 수행하는 코드 조각을 찾고 있습니다. 이 이름을 가진 테이블이 존재하는지 확인하고, 그렇다면 이전 테이블을 닫거나 이름을 바꾼 다음, 내가 요청한 정확한 이름으로 이 테이블의 이름을 지정합니다.
Try() 함수를 사용해 보았지만 그것이 어떻게 작동하는지 완전히 이해하지 못할 수도 있습니다. 모든 테이블 목록을 가져오고 이름 등을 반복하는 복잡한 if() 문을 시도했습니다. 너무 길고 테이블 수가 많으면 속도가 크게 느려집니다.
그래서 저는 테이블 이름이 정확히 그와 같이 지정되도록 테이블 이름을 지정하는 정확하고 일반적인 방법이 무엇인지 궁금합니다.
Re: 테이블 이름을 올바르게 지정하는 방법은 무엇입니까?내가 보기에 이 접근 방식의 유일한 문제는... 음, 기본적으로 대신 새 함수를 작성하여 Set Name을 더 안전하게 사용하려고 한다는 것입니다. 하지만 해당 함수에서는 Set Name을 다시 사용하는데, 이는 해결하려는 것과 동일한 문제가 발생하기 쉽습니다.
그러나 이는 바로 옆 테이블과 스크립트 자체에는 중요하지 않으므로 여기서는 괜찮습니다.
이 시점에서는 아마도 기존 테이블을 저장하지 않고 닫을 것입니다.Re: 테이블 이름을 올바르게 지정하는 방법은 무엇입니까?네, 그렇게 접근하려고 했어요. 아마도 Try()가 어떻게 작동하는지 완전히 이해하지 못할 것입니다. 당신의 방법을 시도해 보겠습니다.Re: 테이블 이름을 올바르게 지정하는 방법은 무엇입니까?앞서 언급했듯이 열려 있는 모든 테이블 목록을 가져오는 것을 피하고 싶습니다. 하나의 스크립트 실행으로 수백 개의 요약 테이블을 생성하는 경우 시간이 많이 걸립니다.Re: 테이블 이름을 올바르게 지정하는 방법은 무엇입니까?저는 다양한 커뮤니티 회원들이 이 문제를 공격하는 다양한 방법을 갖고 있을 것이라고 확신합니다.다음은 매우 간단한 접근 방식인 것 같습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
xt = dt << subset( selected rows( 0 ), selected columns( 0 ) );
setName = Function( {tdt, Name},
{tdt, Name},
Try( Data Table( Name ) << set name( Name || "_Old" ) );
tdt << set name( name );
);
setName( xt, "big class" );Re: 테이블 이름을 올바르게 지정하는 방법은 무엇입니까?나는 (이미 사용 중인 이름을 피하는 것 외에) 일반적인 방법을 알지 못합니다. 가동 시간이 길어지면 열려 있는 모든 창을 추적하는 것이 어려울 수 있다는 점에 동의합니다.
다음은 귀하가 설명하는 작업을 수행하는 하나의 JSL 아이디어입니다(JMP 14에서 테스트됨). 상당히 효율적인 것 같습니다. 항상 전역적으로 사용 가능하도록 하려면 JMP가 시작될 때마다 자동으로 실행되는 시작 스크립트를 통해 함수를 사용자 정의 함수()로 추가할 수 있습니다.
// Function for renaming data table if desired name is used by another open table
rename_if_exists = Function({s},
open_tables = Get Window List(Type("data tables")) << Get Window Title();
exists = Loc(open_tables, s)[1];
If(exists,
Data Table(open_tables[exists]) << set name(open_tables[exists] || "_old")
);
s;
);
// Apply...
dt = New Table(rename_if_exists("untitled 28972"), add rows(10));