いくつかのフォルダーがあり、各フォルダー内にいくつかの CSV ファイルがあります。 各 CSV ファイルには約 500,000 行があります。 JSL スクリプトを使用して、各フォルダー内のすべての csv ファイルを 1 つの 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 を一度に 1 つずつ使用すると、おそらくかなりの速度向上が得られます。 最良の場合、ディレクトリのネスト全体で必要なことが実行される可能性があります。
Parallel Assign は、配列に入力し、スレッド間のエラーを防ぐ分離された環境で各配列要素に入力する JSL を実行するように設計されています。 2 つの異なるスレッドから同時にデータ テーブルにアクセスするなどの事態を回避しようとします。 それへの方法を見つけたとしても、おそらくクラッシュするでしょう。