여러 폴더가 있고 각 폴더 안에 여러 개의 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
);매우 감사합니다. 내 스크립트에 여러 파일 가져오기 기능을 통합할 수 있었고 이제 테이블을 훨씬 더 빠르게 연결할 수 있습니다.
파일-> MultipleFileImport를 살펴보십시오. 중첩된 디렉터리를 탐색하고, 파일 이름 패턴으로 선택하고, 유사한 파일을 연결할 수 있습니다. 그리고 일반적으로 단일 파일에 대해서도 CSV에서 open()을 사용하는 것보다 빠릅니다. 또한 수정하고 재사용할 수 있는 스크립트를 만듭니다. 소스 파일 정보가 포함된 열을 추가할 수 있습니다.
대화형으로 시작하고 창을 열어두는 확인란을 찾아 몇 가지 실험을 수행해 보세요.
GUI에는 선택한 파일을 선택하는 4개의 필터가 있습니다.폴더/숨김/재귀 필터는 항상 표시되며 표시할 확인란이 3개 있습니다. ~할 수 있게 하다 파일 이름, 파일 시간 및 파일 크기 필터. 파일 목록에는 선택된 내용이 표시됩니다. 그것은 ~ 아니다 파일을 선택하는 데 사용됩니다.
최악의 경우, 각 디렉터리에서 한 번에 하나씩 MFI를 사용하면 속도가 상당히 향상될 수 있습니다. 가장 좋은 경우는 전체 디렉토리에서 원하는 작업을 수행할 수 있습니다.
Parallel Assign은 배열을 채우고 스레드 간의 오류를 방지하는 격리된 환경에서 각 배열 요소를 채우는 JSL을 실행하도록 설계되었습니다. 두 개의 서로 다른 스레드에서 동시에 데이터 테이블에 액세스하는 것과 같은 일을 피하려고 합니다. 방법을 찾으면 충돌이 발생할 수 있습니다.