모든 CSV 파일을 하나의 JMP 테이블로 연결하는 스크립트안녕!
CSV 파일이 포함된 디렉터리를 열고 이를 하나의 마스터 파일로 연결하는 현재 스크립트가 작동하지 않으며 그 이유에 대한 통찰력을 얻고 싶었습니다. 이미 변수 dir과 files를 지정했는데, 폴더에 4개가 있으면 첫 번째 파일을 가져온 후 루프가 끝나는 것 같습니다. 또한 CSV 파일의 파일 이름을 읽고 이를 사용하여 새 열을 채우는 스크립트가 있습니까?
을 위한 ( 나는 = 1 , 나는 < N개 품목 ( 파일 ), i++,
이 테이블 = 열려 있는 (디렉토리 || 파일[i]);
// SD ID를 나타내는 새 열을 생성합니다.
새 열 ( "EX801.SD.ID" , 성격, 다중 응답);
각 행에 대해 (:EX801.SD.ID = "런1" ); // SD ID 입력 중 멈춤 - 파일 이름이 필요합니다!
이 테이블 << 선택한 열 이동 ( {:EX801.SD.ID}, 처음으로 );
// "......PV" 열을 삭제합니다.
을 위한 (나 = N열 (thisTable), 나는 > 32 , 나--, // 첫 번째 32개 열이 필요합니다.
이 테이블 << 열 삭제 ( 열 (나));
);
// 나중에 컬럼 이름과 일치하도록 각 컬럼 이름 앞에 "I"를 추가합니다.
을 위한 ( 나는 = 삼 , 나는 <= 32 , 나는 ++,
열 ( thisTable, i ) << 이름 설정 ( "나" || ( 열 ( thisTable, i ) << 이름 가져오기 ) );
);
dt << 사슬 같이 잇다 (이 테이블, "첫 번째 테이블에 추가" );
(thisTable)을 닫습니다.
dt << 위치를 선택하세요 ( 누락 (:시간)) << 행 삭제 ;
);
Re: 모든 CSV 파일을 하나의 JMP 테이블로 연결하는 스크립트이 옵션을 제공해 주셔서 정말 감사합니다! 그러나 파일을 가져온 후 루프 스크립트를 사용하여 정리할 수 없는 것 같습니다. 이것이 왜 그런지에 대한 제안이 있으십니까?
// 선택한 폴더에서 csv 파일을 가져옵니다.
이 테이블 = 다중 파일 가져오기 (
<< 폴더 설정 (디르),
<< 이름 필터 설정 ( "*.*;" ),
<< 이름 설정 활성화 ( 0 ),
<< 크기 필터 설정 ( { 254056 , 261197 } ),
<< 크기 설정 활성화 ( 0 ),
<< 날짜 필터 설정 ( { 3632893806 , 3633422386 } ),
<< 날짜 설정 활성화 ( 0 ),
<< 파일 이름 추가 열 설정 ( 1 ),
<< 파일 크기 열 추가 설정 ( 0 ),
<< 파일 추가 날짜 열 설정 ( 0 ),
<< 가져오기 모드 설정 ( "CSV데이터" ),
<< 문자 세트 설정 ( "최선의 추측" ),
<< 스택 모드 설정 ( "스택 유사" ),
<< CSV에 헤더가 있음 설정 ( 1 ),
<< CSV 허용 숫자 설정 ( 1 ),
<< CSV 첫 번째 헤더 줄 설정 ( 1 ),
<< 헤더 줄의 CSV 수 설정 ( 1 ),
<< CSV 첫 번째 데이터 라인 설정 ( 2 ),
<< CSV EOF 쉼표 설정 ( 1 ),
<< CSV EOF 탭 설정 ( 0 ),
<< CSV EOF 공간 설정 ( 0 ),
<< CSV EOF 공백 설정 ( 0 ),
<< CSV EOF 기타 설정 ( "" ),
<< CSV EOL CRLF 설정 ( 1 ),
<< CSV EOL CR 설정 ( 1 ),
<< CSV EOL LF 설정 ( 1 ),
<< CSV EOL 세미콜론 설정 ( 0 ),
<< CSV EOL 설정 기타 ( "" ),
<< CSV 견적 설정 ( "\!"" ),
<< CSV 이스케이프 설정 ( "" )
) << 데이터 가져오기 ;
이 테이블 << 선택한 열 이동 ( {:파일 이름}, 처음으로 );
// "......PV" 열을 삭제합니다. // 여기에 멈췄습니다.
을 위한 (k = N 열 (thisTable), k > 32 , 케이--, // 첫 번째 32개 열이 필요합니다.
이 테이블 << 열 삭제 ( 열 (케이));
);
Re: 모든 CSV 파일을 하나의 JMP 테이블로 연결하는 스크립트문제는 하나의 For 루프가 다른 하나의 내부에 있는 두 개의 For 루프에서 변수 "i"를 사용하고 있다는 것입니다. 따라서 "i" 값이 외부 루프에 대해 제대로 증가하지 않습니다.
아래 스크립트에서 내부 루프의 루프 변수를 변경했습니다.이것이 당신의 해결책이 될 수 있습니다
For( i = 1, i < N Items( files ), i++,
thisTable = Open( dir || files[i] );
// creates new column to indicate SD ID
New Column( "EX801.SD.ID", Character, Multiple Response );
For Each Row( :EX801.SD.ID = "Run1" ); // stuck at inputing SD ID - need file name!
thisTable << Move Selected Columns( {:EX801.SD.ID}, To First );
// deletes columns "......PV"
For( k = N Cols( thisTable ), k > 32, k--, // 1st 32 columns are needed
thisTable << delete columns( Column( k ) );
);
// adds "I" in front of each column name to be matched with column name later
For( k = 3, k <= 32, k++,
Column( thisTable, k ) << Set Name( "I" || (Column( thisTable, k ) << Get Name) );
);
dt << Concatenate( thisTable, "Append to First Table" );
Close( thisTable );
dt << Select Where( Is Missing( :TIME ) ) << Delete Rows;
);
JMP 14를 사용하는 경우 Multiple File Import() 기능을 사용할 수 있습니다.
Re: 모든 CSV 파일을 하나의 JMP 테이블로 연결하는 스크립트파일 > 다중 파일 가져오기를 선택합니다. 자세한 내용은 도움말 > JMP 사용을 참조하세요. 모든 옵션을 스크립트로 작성할 수 있습니다. 처음에는 대화형으로 사용하여 알려진 사례에서 결과를 얻을 수 있는지 확인하세요. 그런 다음 원본 테이블 스크립트를 자신의 스크립트에 복사합니다.