複数のtxtまたはcsvファイルを結合するこのスクリプトは、複数の txt または csv ファイルを 1 つのファイルに結合します。 スクリプトはターゲット ディレクトリを要求し、最初のファイルを開いてから、Table Concatenate 関数を使用して後続のファイルを最初のファイルに繰り返し追加します。最終ファイルには 1 つの新しい列が作成されます。この列には、各行の元のファイルの名前が含まれます。 すべてのテキスト ファイルが同じ (同一の) 列名を持つ場合、それらの列はすべて 1 つの列にスタック (連結) されます。 固有の列も最終ファイルに転送されます。
スクリプトにはコメント化されたいくつかのセクション ブロックがあり、スクリプトのこれらのセクションは複数の Excel ファイルを結合するために使用できます。 Excel ファイルを結合する場合、これらの .xls または .xlsx ファイルにはワークシートが 1 つだけ含まれると想定されます。
-------2016 年 6 月 1 日更新
このスクリプトに関して興味深い質問がありました。 ある人は、列名が 2 行目にある CSV ファイルの山を持っていましたが、さらに悪いことに、列名はセミコロンで区切られ、テキストはカンマで区切られていました。これに対処する 1 つの方法は、インポート設定をスクリプトに追加することです。これは、JMP に書いてもらってうれしいことの 1 つです。ファイルを手動で開いてインポートしました ([ファイル] > [開く] > [プレビューで開く] を使用し、ダイアログで列が 2 行目から始まるように設定し、「;」の「その他」区切り文字を追加しました。ファイルをインポートした後、ソース スクリプトに移動し、[インポート設定] 引数を見つけました。
スクリプトでこのファイルを開かせるために、式 importset=expr(import settings(...ここにスクリプトを貼り付け...)); を追加しました。スクリプトの先頭近くにあります。 (後でファイルを開いたときに必要になるまでインポート設定を評価するのは役に立たないため、これは式です。)
次に、一番下近くで、オープン引数 open(filename,importset) に式を追加しました。
重要な注意: インポート フィルターを使用してこの 2 番目のスクリプトをダウンロードし、通常とは異なる形式の CSV テーブルで自動的に動作することを期待している場合。それは機能しません。独自のインポート設定を作成し、それをここでの例の設定に置き換える必要があります。
--------少し前に、これを MAC 上で動作させる方法についての質問もありました。
Mac でも動作するようにもう 1 つ追加しました (つまり、PC ではテストしませんでした)
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
-----2016年10月10日更新
Justin C は、複数の「.」を含むファイル名がうまく機能しないことに気づき、「項目」を -1 に変更して、2 番目の項目ではなくファイル拡張子がファイル拡張子に使用されるようにすることを提案しました。 素晴らしい修正であり、ファイル名を扱うときに覚えておくべき重要なアイデアです。 ありがとうジャスティン!
公共事業Re: 複数のtxtまたはcsvファイルを結合する私の場合、列が常に適切に結合されていないことがわかりました。誰かがこれを手伝ってくれますか?
連結したいファイルがたくさんありますが、以下に示す例のように、列の順序が時々変更されます。
ファイル1~3
列の順序 (A、B、C、D、E、F、G)
ファイル4~100
列の順序 (A、B、C、D、E、 H 、F、G)
ファイル101~1000
列の順序 (A、B、C、 K 、D、E、 H 、F、G、私、 J )
これらすべてのファイルを結合して、各列のデータが常に最終的なテーブルの適切な列に配置されるようにしたいと考えています。また、すべてのデータを保持したいと思います(列 K は削除せず、列 K が存在しなかったすべての行を空白のままにしておきます)。ご協力いただければ幸いです。
Re: 複数のtxtまたはcsvファイルを結合するこのスクリプトにヘッダーを追加する方法はありますか?ヘッダーのないデータを含むファイルが約 20,000 個あります
Re: 複数のtxtまたはcsvファイルを結合するこんにちは、
JMP スクリプトの初心者です。 何らかの理由で、複数のテキスト ファイルを結合するときにインポート設定が機能しません。 連結されたファイルが表示されます。 私の場合、列名は11から始まり、データは12から始まります。 ただし、結合ファイルは 11 列目からではなく 1 列目から始まります。 私に何が欠けているのか教えてください。
ありがとう
Re: 複数のtxtまたはcsvファイルを結合するこの問題を回避するには、ファイルを一時ディレクトリにコピーして名前を変更する方法を作成しました。 ファイルを添付する手段が見つからないので、コードをここに示します
names default to here (1);
Clear Symbols();
//Import settings, sometimes CSV files aren't exaclty formatted as CSV. Add import settings
//This is an expression to use later in the Open argument.
//Column names start on the second row, and are semicolon delimited
importset=expr( Import Settings(
End Of Line( CRLF, CR, LF ),
End Of Field( Comma, Other( ";" ), CSV( 0 ) ),//use ";" as a delimiter too
Strip Quotes( 1 ),
Use Apostrophe as Quotation Mark( 0 ),
Scan Whole File( 1 ),
Treat empty columns as numeric( 0 ),
CompressNumericColumns( 0 ),
CompressCharacterColumns( 0 ),
CompressAllowListCheck( 0 ),
Labels( 1 ),
Column Names Start( 2 ),//starting on second row
Data Starts( 3 ),//data starts on 3rd row
Lines To Read( "All" ),
Year Rule( "20xx" )
));
//set up variables with starting values
filelist={}; //empty list
//launch dialog to get the file location
prefilepath = munger(Pick Directory( "Browse to the Directory of the .txt / .csv files " ),1,"/","");
If( Host is( Mac ),
filepath="/"||prefilepath,
filepath = Convert File Path( prefilepath, Windows )
);
prefilelist = Files In Directory( filepath );
n2=nitems(prefilelist);
//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)
)
);<BR />
nf=nitems(filelist); //number of items in the working list
tempDir = "$TEMP\JMP\";
Create Directory(tempDir); //create the temp folder in the "%temp%" windows directory
//for each .csv file found on the server
For( i3 = 1 , i3 <= nf, i3++,
copyFileName = filelist[i3];
csvPos = Contains(filelist[i3],".csv"); //determine where in the filename .csv is
newFileName = Left(copyFileName, csvPos + 3 ); //determine the filename without the extra bits after .csv
Copy File (filepath||filelist[i3], tempDir||copyFileName);//copy the file to the temp folder
Rename File (tempDir||copyFileName, newFileName);//rename the file without the extra bits after .csv
filelist[i3] = newFileName; //replace the reference in the array to this file
);//end of the for loop
cctable= New Table( "Combined data table ");//make an empty table
cctable<<NEW column=""></NEW>Re: 複数のtxtまたはcsvファイルを結合するこれを実行するのに少し問題があります。問題は、本質的にカンマ区切りのテキスト ファイルであるが、.log 拡張子が付いているファイルを使用していることだと思います。
コード内のテキストを次のログに変更しました。
item( -1, prefilelist[i2], "." ) == "ログ"
というエラーが発生します
Send は、 'Send' のアクセスまたは評価でスクリプト可能オブジェクトを期待します、 dt << /*###*/Run Formulas() /*###*/
で:
dt<< 式を実行します();
ファイルの拡張子を .txt に変更すると、機能します。ただし、結合したいファイルが何千もあり、毎日数十のファイルが追加されます。 これを .log 拡張子を持つファイルで動作させる方法はありますか?
2番目の質問。
私のファイルにはヘッダーがありません。ファイルを結合してデータテーブルにヘッダーを追加する方法はありますか?現在、最初のファイルの一番上の行を取得し、それをヘッダー (すべてのデータ) にします。
助けていただきありがとうございます。
Re: 複数のtxtまたはcsvファイルを結合するバイロンに感謝したいと思います。 それは素晴らしく実践的な例です。
このスクリプトのおかげで時間を大幅に節約できました。
このスクリプトは、私が何時間もかかっていた作業を数秒で実行します。
ありがとう!!!
Re: 複数のtxtまたはcsvファイルを結合する<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />「結合」でも同じアプローチが機能します。 concat 引数を join 引数に置き換えてみてください。(結合を手動で実行し、結合引数がどのようになるかの例として、結果のテーブルのソース スクリプトをコピーします。
Re: 複数のtxtまたはcsvファイルを結合する複数の txt または csv ファイルを垂直方向に結合する代わりに、JOIN を使用して並べて結合する簡単な方法はありますか?連結するでtxt Tables.jslを結合する?
Re: 複数のtxtまたはcsvファイルを結合するこんにちは、バイロン。このスクリプトはうまく機能します。 開いたファイルからデータのサブセットを選択したり、列を追加したり、文字を数値に変更したりするために少し変更しました。私が抱いた質問の 1 つは、ファイルが存在するフォルダーと存在しないフォルダーを指定するようにスクリプトを変更する簡単な方法はありますか?プロンプトポップアップ?
ありがとう
TS
Re: 複数のtxtまたはcsvファイルを結合するこのスクリプトは私のシステムでは実行できません: Mac OS X 10.10.5 + JMP Pro 12.1.0
Re: 複数のtxtまたはcsvファイルを結合するはい、負の ref は便利で、文字の位置を参照するほぼすべての関数だけでなく、小数点以下の桁数が -1 であると想像してみてください。
Re: 複数のtxtまたはcsvファイルを結合するブライオンさん、みなさん、こんにちは。
小さな更新を追加することができました。ソース列名から .csv や .txt などの末尾のファイル拡張子を削除しました。
したがって、最後のセクションでは次の代わりに:
各値を設定する(filenow)
追加した :
各値を設定 (削除 (filenow,-4,-1))
負の参照が機能することに驚きました。
Re: 複数のtxtまたはcsvファイルを結合するこんにちは、バイロン
素晴らしいスクリプトで、JMP 12 では魅力的に機能します。 特定の行からソース データ ファイルの読み取りを開始し、必要に応じてヘッダー情報を切り詰める良い方法を考えていました。たとえば、すべてのソース ファイルの形式が同じ場合、単語「CH」で始まる行から始めますか?
Re: 複数のtxtまたはcsvファイルを結合するこんにちは、バイロンさん
このスクリプト内でのみ発生します。 スクリプトの実行後、ログウィンドウに「NItem()」の空白エラーが表示されます。 したがって、スクリプト全体をコピーして新しいスクリプトウィンドウに貼り付けるだけで、正常に実行されます。
ありがとう
Re: 複数のtxtまたはcsvファイルを結合する質問がよくわかりません。 この動作は他のスクリプトでも再現されますか?
Re: 複数のtxtまたはcsvファイルを結合するこんにちは、バイロン
貴重なスクリプトをありがとうございました。 このスクリプトを使用して複数の .txt ファイルを追加しています。 ただし、同じスクリプトを新しいスクリプトにコピーした後は実行されます。 最初に同じスクリプトを開いたときになぜ実行されないのかを尋ねたいと思います。 事前にご回答いただきありがとうございます。 このスクリプトは非常に役に立ちます。
Re: 複数のtxtまたはcsvファイルを結合するショーン、
MAC では、ディレクトリを選択するダイアログ ウィンドウとファイルを選択するダイアログ ウィンドウは同じです。 このスクリプトは、csv ファイルや txt ファイルが含まれるディレクトリを特定することを求めています。 現在、スクリプトでは、ファイルのリスト内の csv ファイルと txt ファイルの両方を連結できます。 より制限を厳しくしたい場合は、スクリプトのこの部分から除外したいファイルの種類を編集してください。
//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)
)
);
スクリプトが選択したディレクトリ内のファイル拡張子のリストを返し、ユーザーが filelist 変数に追加するファイルの種類にチェックを入れられるようになれば、素晴らしいでしょう。
スクリプトを作成する時間があれば、アップグレードされたスクリプトを投稿してください。
よろしくお願いします、
バイロン
Re: 複数のtxtまたはcsvファイルを結合するブライアン、
OS X 10.10.2 で JMP 10.0.0 を使用しています。 ファイルを選択するスクリプトを実行すると、ウィンドウが起動します。 しかし、起動したウィンドウでは .txt または .csv ファイルを選択できません。 JMP (OS X バージョン) 用にスクリプトをさらに修正する必要があるかどうかはわかりません。 この問題の解決を手伝ってもらえますか? ありがとう。
ショーン
Re: 複数のtxtまたはcsvファイルを結合するありがとう、わかりました。
Re: 複数のtxtまたはcsvファイルを結合するデール
添付ファイルをもう一度確認していただけますか?
付け直しました。
-バイロン
Re: 複数のtxtまたはcsvファイルを結合するスクリプトはどこにありますか?どこにも見つからないようです。