フォルダー内の CSV ファイルを連結する際に再帰を使用するにはどうすればよいですか?こんにちは、誰かこのコードを修正するのを手伝ってくれませんか?フォルダーごとに CSV ファイルを連結しようとしています。 ユーザーはフォルダーを選択する必要があり、すべての修飾された CSV フォルダーが連結され、フォルダー名に従って保存されます。 この方法では、ユーザーはスクリプトの実行ごとに 1 つのフォルダーを選択します。
ただし、私が今やろうとしているのは、ユーザーにメインフォルダーを選択させてからスクリプトを実行させ、サブフォルダーごとにデータを連結することです(前の方法と同様に、フォルダー名をファイル名として個別に保存します)。
ただし、これらのコードでは、すべての csv ファイルが 1 つのファイルに連結されます。 再帰がどのように機能するかを変更して説明していただけますか? そして、メインフォルダーを開くだけで、このファイルを個別に保存(フォルダーごとにデータを連結)するにはどうすればよいですか。 JMP15を使用しています。 ありがとう
p = pick Directory("Select a Folder");<BR />//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
Dir = Word(-1, p, "/"); //get filename
saveDir = Substr( p, 1, Length( p ) - Length( Word( -1, p, "\/" ) ) - 1 ); //save file outside main folder
/* Removes the file names from the list f which are not CSV files */
for(j=1,j<=N Items(f),j++,
If (Substr(f[j],Length(f[j])-2,3)!= "CSV",
RemoveFrom(f,j,1);
j=j-1;
);
);
A = {}; /* creates a empty list for storing the names of each data table */
B = {};
C = {};
D = {};
k = {};
m = {};
/*Opens each one of the CSV files and deletes all unwanted rows */
for(j=1,j<=N Items(f),j++,
CSV = Open(Concat(p,f[j]), End of Field(comma), Strip Quotes(1), Labels(1),
Column Names Start(3), Data Starts(4), Columns(:MRR=Numeric));
colname = {};
colname = CSV<<GET column="" names="">20 & Contains(colname,"Weight")>50,
InsertInto(A,CSV);
CSV<<SELECT where="">1,
dt2 = dt1<<CONCATENATE>1,
dt3 = dt1<<CONCATENATE></CONCATENATE></CONCATENATE></SELECT></GET>自動化とスクリプト作成Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?recursive(1) オプションについて何を説明する必要がありますか?
Names Default To Here(1);
Files In Directory("$SAMPLE_DATA", recursive(1));
このオプションを使用しないと、フォルダー内の最初のレベルのファイルのみが取得され、再帰を使用すると、サブフォルダーとその中のファイルも取得されます。

ハイライト表示されているのは、recursive(1) が設定されているためです。
スクリプトについて: フォルダーは何レベルありますか?変わるかも? .csv ファイルが見つかるまでに複数のレベルがある場合、ファイル名は何にすればよいですか?
Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?以下は、すべての再帰的ファイルを読み取り、見つかったフォルダーに基づいてそれらを個別のデータ テーブルに連結するスターター スクリプトです。
個別のエラー チェックなどはすべて含めていません。私の例を変更して、その内容をコードに戻すことができるはずです。
このコードには構造の違いがあります。JSL はファイルを読み取り、それを連結してから次のファイルを読み取ります。できる限りチェックしましたが、まだ問題がある可能性があります。
names default to here(1);
p = pick Directory("Select a Folder");//f = Files In Directory(p);
f = Files In Directory(p, recursive(1));
for(i=nitems(f),i>=1,i--,
if(uppercase(word(-1,f[i],"."))!="CSV",
remove from(f,i,1)
)
);
// Create the Associative Array with all of the files, with their directories
// Place all data into a data table, and then move into an Associative Array which will give the
// folder(data table to concatenate to)
dt= new table("The Files", new column("File", character));
dt << add rows(nitems(f));
dt:file<<SET values=""></SET>Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?こんにちは。メイン フォルダーと CSV を含む複数のフォルダーの 2 レベルのフォルダーしかありません。 以下は、再帰を使用しない場合のスクリプトの出力例です。 私がやりたいのは、スクリプトを実行すると、メインフォルダーのみが選択され、スクリプトの出力が次のようになります。

Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?負のインデックスを指定した Word() を使用すると、フォルダー名を簡単に取得できます。 以下の例
Names Default To Here(1);
foldername = Word(-1, "F1/1.jmp", "/\"); //"1.jmp"
おそらく、キーがフォルダー名である連想配列を作成するでしょう。 次に、ファイルリストをループして、フォルダーが連想配列に存在していないかどうかを確認し、フォルダーをそこに追加して、その値を空のリストとして初期化します。 次に、insert into を使用してその連想配列にファイル パスを追加し、キーを修正します (ファイルを開きやすくするために完全なパスを使用します)。 ファイルリストを調べた後、連想配列に対して別のループを実行します。 今回はファイルを開いて、それらを連結します。
Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?こんにちは、私はまだ JMP 15 を使用しているので、このコード行に質問があります。 これを JMP 15 (for ループ形式) に変換するにはどうすればよいでしょうか。JMP 15 の for ループ形式の場合、{table} が何なのか少し混乱しています。 また、この CSV ファイルを適切に保存するにはどうすればよいですか? 私の例では、性別によるものです。 したがって、ファイル名は性別ごとに保存する必要があります ( Male.csv と Female.csv )。
For Each( {table}, theArray << get keys,
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);
Re: フォルダー内の CSV ファイルを連結する際に再帰的を使用するにはどうすればよいですか?これはうまくいくはずだと思います:
arrayKeys = theArray << get keys;
For(i=1, i <=nitems( arrayKeys), i++,
table = arrayKeys[i];
stable = theArray << get value( table );
stable = Substitute( stable, ":", "-" );
stable = Substitute( stable, "/", "-" );
If( Try( Data Table( stable ) << get name, "" ) == "",
dt = New Table( theArray << get value( table ) ),
dt = Data Table( stable )
);