여러 폴더가 있고 각 폴더 안에는 여러 CSV 파일이 있습니다. 각 CSV 파일에는 약 500,000 개의 행이 있습니다. JSL 스크립트를 사용하여 각 폴더 내의 모든 csv 파일을 하나의 JMP 테이블로 연결합니다. 이 프로세스는 각 폴더에서 반복되므로 결국 폴더 수만큼 연결된 JMP 테이블이 있습니다. 하지만 시간이 많이 걸립니다.
JSL에서 병렬 프로그래밍을 검색하고 Parallel Assign에 대해 알게되었습니다. 연결 속도를 높이기 위해 Parallel Assign 내에 아래 스크립트를 넣는 방법에 대한 지침이 필요합니다. 대단히 감사하겠습니다.
path = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
Print(dirList(path));
folderlist={};
folderlist = dirList(path);
count=nitems(folderlist);
//prefolderlist = Files In Directory( path );
//filepath = Convert File Path(path, Windows )
For( j2 = 1, count >= j2, j2++,
folderpath= path || folderlist[j2] || "/" ;
Print(folderpath);
prefilelist = Files In Directory( folderpath );
n2=nitems(prefilelist);
filelist = {};
//filter out any non-txt or csv files
For( i2 = 1, n2 >= i2, i2++,
file=(prefilelist[i2]);
If( Item( 2, prefilelist[i2], "." ) == "txt" | Item( 2, prefilelist[i2], "." ) == "csv",
Insert Into( filelist,file),
show(file)
)
);
nf=nitems(filelist); //number of items in the working list
cctable= New Table( "Combined data table ");//make an empty table
cctable<<New Column( "Source", Character, Nominal );
For( iii = 1 , iii <= nf, iii++, //this starts the first loop
filenow = ( filelist[iii] );
fileopen=(folderpath||filenow);
//dt=open(fileopen,private);
dt=open(fileopen,importset,private);//Import settings used in the open argument
New Column( "Source", Character, Nominal );
:Source << set each value( filenow );
//dt<<new column("Source", character, nominal)<<set each value(9999);
dt << Run Formulas();
//add the current table to the bottom of the combined data table
cctable << Concatenate( Data Table( dt ), Append to first table );
//don't use "Create Source Column" argument
Close( dt, NoSave );//after concatenating the table, close it and move on
);//end of the first for loop
);File-> MultipleFileImport를 살펴보십시오. 중첩 된 디렉토리를 탐색하고 파일 이름 패턴으로 선택하고 유사한 파일을 연결할 수 있습니다. 그리고 일반적으로 단일 파일에 대해서도 CSV에서 open ()을 사용하는 것보다 빠릅니다. 또한 수정하고 재사용 할 수있는 스크립트를 만듭니다. 소스 파일 정보가있는 열을 추가 할 수 있습니다.
대화식으로 시작하고 창을 열어 두는 확인란을 찾은 다음 몇 가지 실험을 수행하십시오.
GUI에는 선택한 파일을 선택하는 4 개의 필터가 있습니다.폴더 / 숨김 / 재귀 필터는 항상 표시되며 표시 할 세 개의 확인란이 있습니다. 활성화 파일 이름, 파일 시간 및 파일 크기 필터. 파일 목록에는 선택한 항목이 표시됩니다. 그것은 아니 파일을 선택합니다.
최악의 경우 각 디렉터리에서 한 번에 하나씩 MFI를 사용하면 속도가 빨라질 수 있습니다. 최상의 경우 전체 디렉토리 중첩에서 원하는 작업을 수행 할 수 있습니다.
병렬 할당은 배열을 채우고 스레드 간의 오류를 방지하는 격리 된 환경에서 각 배열 요소를 채우는 JSL을 실행하도록 설계되었습니다. 두 개의 다른 스레드에서 동시에 데이터 테이블에 액세스하는 것과 같은 것을 피하려고합니다. 방법을 찾으면 충돌이 발생할 수 있습니다.
정말 고맙습니다. 스크립트에 여러 파일 가져 오기를 통합 할 수 있었고 이제 테이블을 훨씬 더 빠르게 연결할 수 있습니다.