"Join"을 사용하여 JSL 설정 병합<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"Join" data tables 명령을 사용하여 두 개의 데이터 세트를 가장 잘 병합할 수 있다는 것을 알았습니다. 이렇게 하면 존재할 수 있는 가능한 중복 항목을 가장 잘 제거할 수 있습니다. 열 1에는 각 항목에 대한 고유 번호가 포함되어 있습니다.여러 데이터 테이블을 열고 데이터를 조작하는 스크립트가 있지만 "조인" 스크립트가 올바르게 작동하도록 하기 위해 각 데이터 테이블을 별도로 호출하는 데 문제가 있습니다.
수동으로 이 작업을 수행하는 경우 코드는 다음과 같습니다.
데이터 테이블 ( "무제 322" ) << 가입하다 ( 데이터 테이블 ( "무제 318" ) ) ,
같은 이름 열 병합 ,
일치하는 열로( : REPLICATE_ID = : REPLICATE_ID ) ,
배수( 1 , 1 ) ,
이름( "일치하지 않는 항목 포함" )( 1 , 1 ) ,
기본 테이블 순서 유지( 1 ) ,
출력 테이블( "병합" )
이 양식을 여러 테이블로 코딩하려고 할 때 문제가 발생합니다.무제 테이블(무제 322, 무제 318 등 - 내가 여는 파일 수에 따라 더 많을 수 있음)은 내 코드에서 다음과 같이 지정됩니다.. 그래서 어떻게든 내 최대치를 취하고 싶어그리고 서로 합류한다 w.
다음과 같이 설정했습니다.
(f = 데이터 테이블에 대해, f >= 1, f--,
Try(v = w << Join( With(데이터 테이블(f)),
*나머지는 위에 나열된 조인 테이블 속성을 따릅니다*
그러나 내 코드가 작동하지 않습니다.누구든지 내가 이것을 할 수있는 방법을 알고 있습니까?
Re: "Join"을 사용하여 JSL 설정 병합죄송합니다. 제가 명확하지 않은 것 같습니다.
목록에 추가된 테이블을 열린 상태로 유지해야 한다는 것을 이해합니다. 내 코드에서 모두 닫기(데이터 테이블, nosave)를 주석 처리하면
내 로그에 다음 내용이 있습니다(openDT 목록에 없어야 하는 원본 테이블에 대한 참조가 있으며 OT로 전송됩니다.나는 그 테이블에 대해 닫기 fxn이 필요하고 그것을 알아낼 수 있다고 확신합니다.이전에 병합이 작동한다고 지정했지만 작동 방식이 아닙니다.

하지만 내 코드에서 //invisible(w = z << Split...의 경우), 보이지 않는 주석을 제거하고 싶지만, 보이지 않는 fxn은 루프의 마지막 테이블만 인식하고 나머지는 모두 삭제되기 때문에 이들을 참조하고 목록에 보관하여 전체적으로 참조할 수 있는 방법이 필요합니다. (모두 닫기도 주석 처리됨) 어떻게 해야 하나요?

보이지 않는 것이 문제입니다. b/c 보이지 않는 각 테이블을 참조하는 방법을 찾지 못하면 여러 테이블을 병합할 수 있는 방법이 없습니다. 조인 코드를 루프로 이동해야 하는 것처럼 보이지만 한 번에 하나의 테이블만 반복하고 최소한 두 개를 참조해야 하는 경우 이를 통합하는 방법을 모르겠습니다.
Re: "Join"을 사용하여 JSL 설정 병합여기서 보이지 않는 것은 문제가 아닙니다. 보이지 않는 테이블은 다른 보이지 않거나 보이는 테이블을 참조하고 결합할 수 있습니다. 닫힌 테이블과 보이지 않는 테이블은 같은 것이 아닙니다. 닫힌 테이블은 완전히 쓸모가 없으며 사라지고 잊혀졌습니다. 당신이 배치한 스크립트에서 모두 닫기 ( 데이터 테이블 , 노사브 ) ; 병합 코드 부분 전에. 그 결과 모든 테이블이 잊혀지고 병합이 실패합니다. 보이지 않는 테이블을 닫기 전에 완료될 때까지 기다리십시오.
또는 위의 방법을 사용하십시오. 즉, 테이블을 한 번에 하나씩 열고 원하는 편집 및 분할을 수행한 다음 닫고 다음 파일로 이동하기 전에 현재 MT와 병합하십시오.
Re: "Join"을 사용하여 JSL 설정 병합흠, 하지만 원본 txt 파일을 병합할 수 없습니다. 원본 txt 파일의 분할/포맷에서 생성된 중간 보이지 않는 파일을 병합하고 있습니다.이러한 파일은 보이지 않고 중간이므로 저장되는 루트 디렉터리가 없습니다(내가 보이지 않는 기능을 사용하는 이유 - 공간과 시간을 절약함). 내 테이블이 목록에 있더라도 테이블이 닫혀 있으므로 참조할 방법이 없지만 "열기"는 txt 파일에서 생성된 중간/보이지 않는 파일이므로 적용되지 않습니다. 저장되지 않은 디렉토리입니다.
내가 하는 일에 대한 분석은 다음과 같습니다.
1. txt 파일을 엽니다. 코드는 귀하가 가지고 있는 것과 유사합니다(이름 데이터 테이블("결과1")을 가짐)
2. 이 txt 파일을 다시 포맷합니다(열 형식이 아니므로 JMP에서 더 읽기 쉬운 데이터 테이블로 "분할", 형식 등을 지정하는 코드가 있습니다. - 이 INTERMEDIATE 테이블을 호출합니다(이름은 Data Table("Untitled1")).
3. 이 중간 파일은 보이지 않습니다(보이게 하기에는 너무 많습니다) - 나중에 삭제해야 하는 저장된 중간 파일의 디렉토리를 원하지 않기 때문에 저장하지 않습니다.
4. 내 문제는 중간 테이블을 병합하려고 한다는 것입니다.
원본 파일을 결합하는 것이 더 쉬울 것이라고 생각하지만, 내가 그렇게 할 수 있는 형식으로 제공되지 않으므로 내 수수께끼입니다.
따라서 내가 가지고 있는(그리고 이전에 참조한) 코드는 중간 테이블이 보이지 않고 조인을 참조하는 중간 테이블을 닫지 않으면 작동합니다(내가 원하는 방식으로 정확하게 작동하지 않지만 그럼에도 불구하고 작동함) - 하지만 모든 테이블이 열려 있습니다 - 병합 및 병합 해제
그래서 내가 가진 실제 질문은 다음과 같습니다.
a) 중간 테이블이 있습니다. 본질적으로 보이지 않게 하고 싶지만 MT/OT 목록에 참조하려면 이 작업을 위해 볼 수 있도록 해야 합니다. 기본적으로는 이러한 테이블이 보이지 않기를 원합니다.그래서 내 진짜 질문은 다음과 같습니다. 추가 계산에 사용할 각 테이블을 인식하기 위해 루프가 포함된 보이지 않는 중간 테이블을 참조하는 방법(조인 테이블 fxn을 사용하려면 For 루프 외부에 있어야 중간 테이블)?
스크립트를 첨부했습니다.아마도 이것은 내가하려고하는 것을 설명 할 것입니다.
Re: "Join"을 사용하여 JSL 설정 병합Join() 전에 모든 테이블이 닫힌 것 같습니다. List OT는 데이터 테이블 참조의 목록일 뿐입니다. 해당 테이블이 사라지면 "스크립트 가능한 개체"가 아닙니다.
다음과 같이 시도하십시오.
my_path = "/사용자/.../파일/" ; //.txt 파일의 디렉토리 경로
주먹 = 디렉토리의 파일 ( my_path ) ; //모든 파일 목록
N = N 항목 ( 주먹 ) ;
// flist에서 텍스트가 아닌 파일 제거
을 위한 ( 나 = N , 나 > 0 , 나 --,
만약에 ( 포함 ( 주먹 [ 나 ] , ".txt" ) == 0 ,
제거 위치 ( 주먹 , 나 ) ;
N --;
)
) ;
// 열린 텍스트 파일을 위한 함수(필요한 경우 열 편집 및 설정 가져오기)
open_file = 기능 ( { 엑스 } ,
열려 있는 (
my_path || 주먹 [ 엑스 ] ,
가져오기 설정 (
줄 끝 ( CRLF , CR , LF ) ,
필드 끝 ( 탭 ) ,
스트립 지수 ( 1 ) ,
아포스트로피를 따옴표로 사용 ( 0 ) ,
전체 파일 스캔 ( 1 ) ,
라벨 ( 1 ) ,
열 이름 시작 ( 1 ) ,
데이터 시작 ( 2 ) ,
읽을 줄 ( 모두 ) ,
연도 규칙 ( "10-90" )
)
)
) ;
// 첫 번째 파일 열기
산 = open_file ( 1 ) ;
//flist의 모든 파일을 조인
을 위한 ( 나 = 2 , 나 <= N , 나 ++,
성 = open_file ( 나 ) ;
FT = 산 ;
산 = FT << 가입하다 (
와 함께 ( 성 ) ,
업데이트 ,
열을 일치시켜 ( : 열_1 = : 열_1 ) ,
배수 삭제 ( 1 , 0 ) ,
이름 ( "일치하지 않는 항목 포함" )( 1 , 1 ) ,
기본 테이블 순서 유지 ( 1 ) ,
출력 테이블 ( "병합" )
) ;
// 정리
닫다 ( 성 , 저장 없음 ) ;
닫다 ( FT , 저장 없음 ) ;
) ;
Re: "Join"을 사용하여 JSL 설정 병합좋아, 나는 열린 테이블을 목록으로 보낸 비슷한 것을 시도했습니다.
이 코드 이전에는 *txt 파일이 열리고(최대 30개 이상의 파일이 있을 수 있음) JMP 데이터 테이블(따라서 최대 30개 이상의 테이블 출력)로 변환되는 코드가 있습니다.그런 다음이 모든 테이블을 병합하려고합니다. 한 테이블 그러나 일부 파일에는 삭제해야 하는 중복 정보가 포함될 수 있습니다. Join table 속성을 사용하여 이 작업을 수행할 수 있습니다.따라서 아래 코드에 따라.나는 성공적으로 1 테이블 = MT를 얻었고 나머지는 목록에 있습니다 = OT.목록에서 각 OT에 가입하고 MT에 가입하여 다음을 얻습니다.
MT+OT(1) = MergedTable, 다음 MergedTable+OT(2) = MergedTable2, MergedTable2+OT(3) = MergedTable3 등 내가 얻을 때까지 모든 데이터를 포함하는 하나의 마스터 테이블(다른 것들은 닫혀 있음)
<코드>
openDT = 목록();
(f = 1, f <= N Table(), f++,
에 삽입(열기 DT, 데이터 테이블(f)););
표시(openDT);
MT = 데이터 테이블(1);
닫기(데이터 테이블(1), nosave);
OT = 목록();
For(g = 1, g<= N 항목(openDT) -1, g++,
(OT, DataTable(g))에 삽입;
모두 닫기(DataTables, nosave);
쇼(OT);
쇼(MT);
For( h = 1, h <= N 항목(OT), h++,
MT << Join(With(ST),
업데이트,
Columns(:Column_1 = :Column_1)를 일치시켜,
배수(1,0) 삭제,
Name("일치하지 않는 항목 포함")(1, 1),
기본 테이블 순서 유지(1),
출력 테이블("병합")););
계속하다());
스크립트를 실행하면 다음 오류가 발생하는 Join 명령까지 모든 것이 제대로 작동합니다.
"Send는 'Send'에 대한 액세스 또는 평가에서 스크립팅 가능한 개체를 예상합니다."
을 위한( 시간 = 1 , 시간 <= N 항목 ( OT ) , 시간 ++,
MT << /*###*/ 가입하다 (
(ST)와 함께,
업데이트 ,
일치하는 열로( : 열_1 = : 열_1 ) ,
배수( 1 , 0 ) ,
이름( "일치하지 않는 항목 포함" )( 1 , 1 ) ,
기본 테이블 순서 유지( 1 ) ,
출력 테이블( "병합" )) /*###*/ ;
계속하다();
돕다? 나는 이것이 작동하지 않는 이유를 알아내려고 벽에 머리를 두드리고 있습니다.
Re: "Join"을 사용하여 JSL 설정 병합이렇게 하면 예제로 시작할 수 있습니다. 실행 후 열린 테이블의 마지막도 닫히기 때문에 완벽하지 않습니다 ...
Close All(data tables);
New Table("a") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 4, 5, 6]);
New Column("Label", Character) << Set Each Value("a");
New Table("b") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 7, 8, 9]);
New Column("Label", Character) << Set Each Value("b");
New Table("c") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 10, 11, 12]);
New Column("Label", Character) << Set Each Value("c");
New Table("d") << Add Rows(3);
:Column 1 << Set Values([1, 2, 3, 13, 14, 15]);
New Column("Label", Character) << Set Each Value("d");
t_count = N Table();
dt_old = Data Table(t_count);
Show(dt_old << get name());
dt_new = Data Table(1);
For(i = 2, i <= t_count, i++,
dt_old = dt_new;
dt_new = dt_old << Join(
With(Data Table(i)),
Merge Same Name Columns,
By Matching Columns(:Column 1 = :Column 1),
Drop multiples(1, 1),
Name("Include non-matches")(1, 1)
);
Close(dt_old);
);