すべての CSV ファイルを 1 つの JMP テーブルに連結するスクリプトこんにちは!
CSV ファイルを含むディレクトリを開いてそれらを 1 つのマスター ファイルに連結する現在のスクリプトが機能していません。その理由についての洞察が得られることを期待していました。 すでに変数 dir と files を指定していますが、フォルダー内にファイルが 4 つある場合、最初のファイルを取得した後にループが終了するようです。 また、CSV ファイルのファイル名を読み取り、それを使用して新しい列を埋めるスクリプトはありますか?
のために( i = 1 、私は< N 個のアイテム( ファイル )、i++、
このテーブル =開ける(ディレクトリ || ファイル[i]);
// SD ID を示す新しい列を作成します
新しい列( 「EX801.SD.ID」 、キャラクター、複数回答);
各行について(:EX801.SD.ID = 「ラン1」 ); // SD ID の入力でスタックしました - ファイル名が必要です!
このテーブル <<選択した列を移動する( {:EX801.SD.ID}, 最初へ );
// 列「......PV」を削除します
のために(i = N列(このテーブル)、i > 32 、 私 - 、 // 最初の 32 列が必要です
このテーブル <<列を削除する(カラム(私));
);
// 後で列名と照合するために、各列名の前に「I」を追加します
のために( i = 3 、私<= 32 、i++、
カラム( thisTable, i ) <<セット名( "私" || (カラム( thisTable, i ) <<名前の取得) );
);
dt <<連結する(このテーブル、 「最初のテーブルに追加」 );
(このテーブル) を閉じる;
dt <<場所を選択してください(不足している(:TIME)) <<行の削除;
);
Re: すべての CSV ファイルを 1 つの 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列(このテーブル)、k > 32 、k--、 // 最初の 32 列が必要です
このテーブル <<列の削除(カラム(k));
);
Re: すべての CSV ファイルを 1 つの JMP テーブルに連結するスクリプトあなたの問題は、2 つの For ループで変数 "i" を使用しており、一方の For ループが他方の For ループの内側にあることです。したがって、"i" の値が外側のループに対して適切にインクリメントされません。
以下のスクリプトの内部ループの Loop 変数を変更しました。これがあなたの解決策になるかもしれません
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 ファイルを 1 つの JMP テーブルに連結するスクリプト[ファイル] > [複数ファイルのインポート] を選択します。 詳細については、「ヘルプ」>「JMP の使用」を参照してください。 すべてのオプションはスクリプト化できます。 初めて対話的に使用して、既知のケースで結果が得られることを確認してください。 次に、ソース テーブル スクリプトを独自のスクリプトにコピーします。