"Join"을 사용하여 JSL 설정 병합<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />"Join" 데이터 테이블 명령을 사용하면 두 개의 데이터 세트를 가장 잘 병합할 수 있다는 것을 알았습니다. 이 방법은 존재할 수 있는 중복 항목을 가장 잘 제거합니다. 열 1에는 각 항목에 대한 고유 번호가 포함되어 있습니다.여러 데이터 테이블을 열고 데이터를 조작하는 스크립트가 있지만 "조인" 스크립트가 올바르게 작동하도록 하기 위해 각 데이터 테이블을 개별적으로 호출하는 데 문제가 있습니다.
이 작업을 수동으로 수행하는 경우 코드는 다음과 같습니다.
데이터 테이블 ( "무제 322" ) << 가입하다 ( 데이터 테이블 ( "무제 318" ) ) ,
같은 이름 열 병합 ,
일치하는 열 기준( : REPLICATE_ID = : REPLICATE_ID ) ,
배수 삭제( 1 , 1 ) ,
이름( "일치하지 않는 항목 포함" )( 1 , 1 ) ,
메인 테이블 순서 유지( 1 ) ,
출력 테이블( "병합" )
이 양식을 여러 테이블에 코딩하려고 하면 문제가 발생합니다.제목 없는 테이블(제목 없는 322, 제목 없는 318 등 - 내가 여는 파일 수에 따라 더 많을 수 있음)은 내 코드에서 다음과 같이 지정됩니다.. 그래서 난 어떻게든 내 최대치를 취하고 싶어그리고 다른 모든 사람들과 합류하세요.
나는 다음과 같이 뭔가를 설정했습니다.
(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 파일 코드를 열었습니다. 코드는 귀하가 가지고 있는 코드와 유사합니다(이름은 데이터 테이블("Result1")입니다).
2. 이 txt 파일의 형식을 다시 지정합니다. (열 형식이 아니기 때문에 JMP에서 더 읽기 쉬운 데이터 테이블로 "분할", 형식 지정 등을 하는 코드가 있습니다. - 이 INTERMEDIATE 테이블을 호출하겠습니다(이름은 Data Table("Untitled1")).
3. 이러한 중간 파일은 보이지 않습니다(표시하기에는 너무 많습니다). 나중에 삭제해야 하는 저장된 중간 파일의 디렉토리를 원하지 않기 때문에 저장하지 않습니다.
4. 내 문제는 중간 테이블을 병합하려고 한다는 것입니다.
원본 파일을 결합하는 것이 더 쉬울 것이라고 생각하지만 원본 파일이 내가 할 수 있는 형식으로 제공되지 않으므로 수수께끼입니다.
따라서 이전에 참조한 코드는 중간 테이블이 보이지 않고 조인을 위해 참조하는 중간 테이블을 닫지 않은 경우 작동합니다(원하는 방식으로 정확하게 작동하지는 않지만 그럼에도 불구하고 작동합니다). 그런데 모든 테이블이 열려 있습니다. 병합된 테이블과 병합되지 않은 테이블이 있습니다.
그래서 내가 가진 실제 질문은 다음과 같습니다.
a) 중간 테이블이 있습니다. 본질적으로 표시되지 않기를 원하지만 MT/OT 목록에 참조하려면 이 작업을 위해 표시되도록 해야 합니다. 본질적으로 표시되지 않기를 원합니다.그래서 내 진짜 질문은 다음과 같습니다. 추가 계산에 사용할 각 테이블을 인식하기 위해 루프에서 보이지 않는 중간 테이블을 참조하는 방법(조인 테이블 fxn을 사용하려면 중간 테이블의 두 인스턴스를 조인할 수 있도록 For 루프 외부에 있어야 하는 것 같습니다) 테이블)?
스크립트를 첨부했습니다.아마도 이것이 내가 하려는 일을 설명해줄 것입니다.
Re: "Join"을 사용하여 JSL 설정 병합Join() 전에 모든 테이블이 닫힌 것 같습니다. List OT는 단지 데이터 테이블 참조 목록일 뿐입니다. 해당 테이블이 사라지면 "스크립팅 가능한 개체"가 아닙니다.
다음과 같이 시도해 보세요.
내_경로 = "/사용자/.../파일/" ; //.txt 파일의 디렉터리 경로
플리스트 = 디렉토리의 파일 ( 내_경로 ) ; //모든 파일 목록
N = N개 품목 ( 플리스트 ) ;
// Flist에서 텍스트가 아닌 파일을 제거합니다.
을 위한 ( 나 = N , 나 > 0 , 나 --,
만약에 ( 포함 ( 플리스트 [ 나 ] , ".txt" ) == 0 ,
다음에서 제거 ( 플리스트 , 나 ) ;
N --;
)
) ;
// 열린 텍스트 파일에 대한 기능(필요한 경우 열 편집 및 가져오기 설정)
open_file = 기능 ( { 엑스 } ,
열려 있는 (
내_경로 || 플리스트 [ 엑스 ] ,
가져오기 설정 (
라인 끝 ( 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 테이블(), f++,
Insert Into(open DT, 데이터 테이블(f)););
표시(openDT);
MT = 데이터테이블(1);
Close(데이터 테이블(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 << 가입(With(ST),
업데이트,
열(:Column_1 = :Column_1)을 일치시켜,
배수 삭제(1,0),
Name("일치하지 않는 항목 포함")(1, 1),
메인 테이블 순서 유지(1),
출력 테이블("병합")););
계속하다());
스크립트를 실행하면 다음 오류가 발생하는 Join 명령까지 모든 것이 잘 작동합니다.
"보내기에는 '보내기' 액세스 또는 평가 시 스크립팅 가능한 개체가 필요합니다."
을 위한( 시간 = 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);
);