표현식 안의 따옴표<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
모두 동일한 형식을 가진 많은 수의 테이블을 연결하려고 한다고 가정합니다. 한 번에 하나의 데이터 테이블을 연결하는 루프가 아니라 함수를 연결하는 단일 호출을 갖고 싶습니다. JMP에서 표현을 배우고 싶기 때문입니다.
나는 이런 것을 갖고 싶다.
데이터 테이블("dt1") << 연결(데이터 테이블("dt2"), 데이터 테이블("dt3"),…, 데이터 테이블("dt100"))
이 예에서는 동일한 샘플 데이터의 복사본을 만들고 있지만 다른 소스에서 가져오고 다른 값을 포함할 수 있다고 상상해 보십시오.
모두 닫기 ( 데이터 테이블 , 노사브 ) ;
dt1 = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
N = 100 ;
/*이 루프에서 데이터 테이블을 복사하고 연결 함수에서 사용하는 것을 목표로 문자열을 생성합니다*/
/*큰따옴표가 있어서 이스케이프 문자를 사용하고 있습니다*/
dt_string = "" ;
~을 위한 ( 나 = 2 , 나 <= N , 나 ++,
dt_tmp = ( dt1 << 부분집합 ( 모든 행 , 모든 열 , 보이지 않는 )) ;
dt_name = "디티" || 숯 ( 나 ) ;
dt_tmp << 세트 이름 ( dt_name ) ;
만약에 ( dt_string == "" ,
dt_string = "데이터 테이블(\!"" || dt_name || "\!")" ;,
dt_string = dt_string || ", 데이터 테이블(\!"" || dt_name || "\!")" ) ;
) ;
보여 주다 ( dt_string ) ;
concat_expr = 특급 ( dt1 << 사슬 같이 잇다 ( dt_list )) ;
보여 주다 ( concat_expr ) ;
concat_expr2 = 대리자 ( Nameexpr ( concat_expr ) , 특급 ( dt_list ) , dt_string ) ;
보여 주다 ( concat_expr2 ) ;
평가 ( concat_expr2 ) ;
그리고 내 문제는 표현식에 여전히 이스케이프 문자가 있고 평가가 실패한다는 것입니다.
올바른 표현을 구성하는 코드를 제안해 주시겠습니까?
미리 감사드립니다.
제이에프
Re: 표현식 내의 인용부호분명히 하자면, 'Show(tbls)'를 포함하여 내가 제공한 모든 코드는 연결하기 위해 공급할 수 있는 테이블 목록을 만드는 빠른 방법이었습니다.
하지만 보이지 않게 하려면 다음을 수행할 수 있습니다.
// 테이블 열기
dt1 = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
dt1스크립트 = dt1 << getScript ;
인쇄 ( dt1스크립트 ) ;
에 집어 넣다 ( dt1스크립트 , 특급 ( 보이지 않는 )) ;
인쇄 ( dt1스크립트 ) ;
우연히도 이것은 표현식을 조작하는 방법의 간단한 예입니다.
Re: 표현식 내의 인용부호두분 모두 답변 감사합니다. 함수를 연결하는 목록을 제공할 수 있다는 사실을 몰랐습니다.
MS의 답은 내가 찾던 바로 그 것이었다. 나는 아주 가까웠다.
아래에서 문자열과 목록의 효율성을 비교하기 위해 두 가지 옵션을 정렬합니다.
문자열 옵션은 2.85초가 걸리고 목록 옵션은 4.38초가 걸립니다.
데이터 테이블을 보이지 않게 함으로써 코드를 더 빠르게 할 수 있습니다. 부분집합 기능으로 보이지 않는 옵션을 쉽게 추가할 수 있습니다. 그러나 getscript를 사용하면 어떻게 해야할지 모르겠습니다.
dt1 = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
N = 100;
시작하다 = HP 시간 () ;
dt_string = "" ;
~을 위한 ( 나 = 2 , 나 <= N , 나 ++,
dt_tmp = ( dt1 << 부분집합 ( 모든 행 , 모든 열 )) ;
dt_name = "디티" || 숯 ( 나 ) ;
dt_tmp << 세트 이름 ( dt_name ) ;
만약에 ( dt_string == "" ,
dt_string = "데이터 테이블(\!"" || dt_name || "\!")" ;,
dt_string = dt_string || ", 데이터 테이블(\!"" || dt_name || "\!")" ) ;
) ;
보여 주다 ( dt_string ) ;
concat_expr = 특급 ( dt1 << 사슬 같이 잇다 ( dt_list )) ;
보여 주다 ( concat_expr ) ;
concat_expr2 = 대리자 ( Nameexpr ( concat_expr ) , 특급 ( dt_list ) , 분석하다 ( "{" || dt_string || "}" )) ;
보여 주다 ( concat_expr2 ) ;
평가 ( concat_expr2 ) ;
을 위한 ( 나 = 2 , 나 <= N , 나 ++, 닫다 ( 데이터 테이블 ( "디티" || 숯 ( 나 )) , 저장 안함 )) ;
끝 = HP 시간 () ;
솔루션1 = ( 끝 - 시작하다 ) / 1e6 ; /*마이크로초가 아닌 초로 표시*/
시작하다 = HP 시간 () ;
dt1스크립트 = dt1 << getScript ;
티블 = {} ;
을 위한 ( 나 = 2 , 나 <= N , 나 ++,
평가 ( dt1스크립트 ) ;
에 집어 넣다 ( 티블 , 데이터 테이블 ( "빅 클래스" || 숯 ( 나 ))) ;
) ;
보여 주다 ( 티블 ) ;
dt1 << 사슬 같이 잇다 ( 티블 ) ;
을 위한 ( 나 = 1 , 나 <= NItems ( 티블 ) , 나 ++, 닫다 ( 티블 [ 나 ] , 저장 안함 )) ;
끝 = HP 시간 () ;
솔루션2 = ( 끝 - 시작하다 ) / 1e6 ; /*마이크로초가 아닌 초로 표시*/
Re: 표현식 내의 인용부호(다음과 같은 코드를 게시하지 마십시오. 모두 닫기 ( 데이터 테이블 , 노사브 ) ; 나는 부주의했고 열려 있는 모든 창에 무슨 일이 일어났는지 처음에는 이해할 수 없었습니다.)
표현식과 문자열을 혼합한 것 같습니다. 어떤 단계에서는 문자열을 실행 가능한 코드로 구문 분석해야 합니다(이 경우 목록이 바람직함).
변경하면 코드가 제대로 작동합니다. concat_expr2 이것에 할당 :
concat_expr2 = 대리자 ( Nameexpr ( concat_expr ) , 특급 ( dt_list ) , 분석하다 ( "{" || dt_string || "}" )) ;
그러나 더 간단한 접근 방식을 제안합니다. 문자열을 건너뛰고 목록을 직접 작성합니다.
dt1 = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
N = 10 ;
dt_list = {} ;
을 위한 ( 나 = 2 , 나 <= N , 나 ++,
dt_tmp = dt1 << 부분집합 ( 모든 행 , 모든 열 , 보이지 않는 ) ;
에 집어 넣다 ( dt_list , dt_tmp ) ;
) ;
dt1 << 사슬 같이 잇다 ( dt_list ) ;
Re: 표현식 내의 인용부호두 번 읽은 후에는 '연결' 문제가 표현식 사용을 파고들 수 있도록 하는 예시일 뿐이라고 생각합니다.
그러나 그렇지 않은 경우 '<< Concatenate()'는 테이블 목록을 가져오므로 단순히 작업을 완료하려는 경우 테이블을 엉망으로 만들 필요가 없습니다.
NamesDefaultToHere ( 1 ) ;
// 테이블 열기
dt1 = 열려 있는 ( "$SAMPLE_DATA/빅 클래스.jmp" ) ;
dt1스크립트 = dt1 << getScript ;
// 일부 복사
N = 4 ;
티블 = {} ;
을 위한 ( 나 = 1 , 나 <= N , 나 ++,
평가 ( dt1스크립트 ) ;
에 집어 넣다 ( 티블 , 데이터 테이블 ( "빅 클래스" || 숯 ( 나 + 1 ))) ;
) ;
보여 주다 ( 티블 ) ;
// 복사본을 첫 번째 테이블에 연결 - 테이블 목록, tbls를 사용할 수 있습니다.
dt1 << 사슬 같이 잇다 ( 티블 , 첫 번째 테이블에 추가 ) ;
// 첫 번째 테이블을 제외한 모든 테이블 닫기
을 위한 ( 나 = 1 , 나 <= NItems ( 티블 ) , 나 ++, 닫다 ( 티블 [ 나 ] , 저장 안함 )) ; .