2012-04-28 21 views
3

私はたくさんのファイルを持っています。すべてにデータが含まれています。 Mathematicaに1つのファイルをインポートするのは楽しいことです。しかし、500以上のファイルがあります。 私はそれを行う:Wolfram Mathematicaは複数のファイルからデータをインポートします

Import["~/math/third_ks/mixed_matrices/1.dat", "Table"]; 
aaaa = % 
    (*OUTPUT - some data, I can access them!*) 

私が欲しいものすべてがちょうど(私はそれを行うことができます)サークルを作ることですが、私は、ファイルの名前を変更することはできません - 1。DATを。私はそれを変更したい。

私はそのような解決策を作りました。私は可能な名前の一部を生成し、それらを別々のファイルに書きました。

Import["~/math/third_ks/mixed_matrices/generate_name_of_files.dat", "Table"]; 
aaaa = % 

は出力:{{"~/math/third_ks/mixed_matrices/0.dat"}, \
{"~/math/third_ks/mixed_matrices/1.dat"}, ......

私がやりたいことのすべては、Table[a=Import[aaaa[[i]] ,{i,1,500}]

である。しかし機能Importは "" ファイル名/パスなどのオブジェクトをのみStringを受け付けます。

+0

ところで、http://mathematica.stackexchange.com/にMathematica固有のStackExchangeサイトがあります。あなたの質問はそこではもっと早く答えられるでしょう、そしておそらくあなたはより多くのupvotesを得るでしょう! – Verbeia

答えて

4

FileNamesを使用して、インポートするデータファイルの名前を通常のワイルドカードで収集できます。

そして、Importステートメントをファイル名のリストにマップしてください。

dataは、各ファイルからのデータを別々の要素として含むリストを含みます。

data = Import[#,"Table"]& /@ FileNames["~/math/third_ks/mixed_matrices/*.dat"]; 
2

ファイル名のファイルがなければ何が起こっているのか分かりにくいです。しかし、ファイル名のリストにFlattenを使用して、に渡すことができるStringオブジェクトのベクトルにすることで、問題を解決できると思います。現在、リストはn * 1の行列です。各行は、Stringのベクトルではなく、Stringを含むListです。

この場合、Tableの代わりにMap/@)を使用できます。

0

ありがとうございました。
私は同じように2つの解決策を得ました。
第2の方法を忘れるのは公正ではないと思います。

aaaa = "~/math/third_ks/mixed_matrices/" <> ToString[#] <> ".dat" & /@ Range[0, 116]; 
    (*This thing generates list of lines 
    Output: 
     {"~/math/third_ks/mixed_matrices/0.dat", \ 
     "~/math/third_ks/mixed_matrices/1.dat", \ 
     "~/math/third_ks/mixed_matrices/2.dat", .....etc, until 116 

    Table[Import[aaaa[[i]], "Table"], {i, 1, 117}]; 
    (*and it just imports data from file*) 

    bbbb = %; (*here we have all data, voila!*) 

ちなみに、私の解決策ではありません。 これは私の友人が1人で推測していました。 https://stackoverflow.com/users/1243244/light-keeper

+0

うれしいことに、あなたの問題を解決しました:)上記のソリューションでは、インデックス変数を持つテーブルを作成する必要はありません。あなたがする必要があるのは、Import文をリストaaaaにマップすることだけです(名前のリストをマップするだけで、文字列のリストをaaaaに割り当てる必要はありません)。それは手続き型プログラミングに比べて関数型プログラミングの優れた利点です。どのように大きなものがあるかを追跡する必要はありません。あなたは、あなたが望む機能をリストにマップするだけで、どれくらいの時間がかかるのでしょうか:) –

関連する問題