MATLABで多数のファイルの一括読み込み方法とは?

このQ&Aのポイント
  • MATLABで多数のファイルを一度に読み込む方法について困っています。
  • ファイルの名前は「a_1」や「b_1」のようにアルファベットと番号で構成されており、アルファベットによってファイルの数が異なります。
  • この場合、forループで読み込もうとすると存在しないファイルがあるためエラーが出てしまいます。どのようにすればうまく読み込むことができるでしょうか?
回答を見る
  • ベストアンサー

MATLABで多数のファイルの読み込み

MATLABで多数のファイルを1度に読み込みたいのですが, ちょっと困っています. ファイルの名前は, 「a_1」 といった感じで 「アルファベット_ファイルの番号」 となっていて,アルファベットもファイルの番号も小さい方から 順番になっているためfor文で読み込めるかと思ったんですが, 「a_?」は ?=1~20 まで 「b_?」は ?=1~15 まで というかんじでアルファベットによってファイルの数が 違うため, for アルファベット == aからcまで  for ファイルの数字 == 1から20まで x = sprintf ( アルファベット_ファイルの数字 ) といった感じで読み込むとb_16が存在しなくてエラーが出てしまいます. この場合どうすればうまく読み込めるでしょうか. どなたかお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

言語の知識がないので、考え方のみですが… (1) a、b・・・で始まるファイル数を配列に入れておいて、内側のループ   回数をそれで制御する。 (2) エラー処理で、ファイルが存在しないエラーであればそこでループ   を打ち切る。 (ただし、何らかの事故などで途中のファイルがない場合にもエラーとならず、残りのファイルは処理されないというようなことも起こりうるので、お勧めはいたしません)

semento777
質問者

お礼

ありがとうございます. エラー処理なんてものがあるんですね. 僕はまだまだです.とりあえずそれで調べてみます.

関連するQ&A

  • MATLABでのwhile文の条件について

    MATLABでのwhile文の条件について いつもお世話になっております。 MATLABでwhile文を用いる際、その条件として行列中の特定の次元の値が存在するかどうかという条件を用いたいと考えています。 例えばsize(a)=(10 10 50)のaという画像データを読む際に、a(:,:,1)から順番に読み込んでいって a(:,:,50)で自動に止まるようなwhile文を作りたいと考えています。 つまりこの場合は順番に読み込んでいって、a(:,:,51)が存在しないならばwhile文が終了するようなプログラムを行いたいと考えております。 for文を用いればすぐだとは思いますが、どのようなデータにも入力引数なしで応用が出来ないかと思いましてご質問させていただきました。 もし以上の条件を満たす適当な関数などございましたら、ご一報いただけたらと存じます。

  • [MATLAB]同一階層にファイルがあるかどうか

    MATLABで同一階層内にあるファイルがあるかどうかを見つけるには どうすればいいでしょうか? 例えばファイルsample.txtがあるかどうかを探し If文で分岐してあればAを実行、なければBを実行などを作成したいです。

  • MATLABのファイル読み込みに関して

    こんにちは,今回MATLABでのファイル読み込みに関して質問したいことがあり書き込みました 現在in_1-C110.txt,in_1-C120.txt,......in_1-C190.txt'というファイルがあり,これらのファイルをまとめて読み込もうとして以下のようなコードを記述しました for a=1:9 %ファイルを読む fin=fopen(['in_1-C1' a '0.txt'],'r');     %a A=fscanf(fin,'%f %f %f %f %f %f %f',[7 inf]); fclose(fin); (略) end このように,ファイル名の最初と最後は共通なので,異なる部分のみをループさせて連続して読もうとしています ところが,この方法だとInvalid fid.と出てしまいます 調べてみると、意図したものでは%aのところが in_1-C110.txt in_1-C120.txt となるはずだったのですが,fscanfを抜いてこのファイル名のところだけ書き出すようにしてみると in_1-C1(変な文字)0.txt in_1-C1(変な文字)0.txt といったような変数の部分が文字化けを起こしていることがわかりました. したがって,ファイルが読めない原因がこれにあるのだと推察したのですが,解決方法がまったくわからない状態です この問題を解決する方法がわかる方がおられましたら,教えていただけないでしょうか?

  • MATLABで取得ファイル名の扱い

    ファイル名を取得する時、 例えば、 ファイル名が1,2,3,4,5,6,7,・・・,100 のファイルがあり、 それらを順番に取得し、処理するには、 for k = 1:100 myfilename = sprintf('%d',k) (処理) end と表記すると思いますが、 ファイル名が、001,002,003,004,005,・・・・100 の場合、 sprintfの'%d'の部分はどう表記すればよいでしょうか。

  • 多数のファイルの名前の変更を簡単にしたい

    ファイルが多数ある時,いくつかのファイル名の頭に同じ文字列をすべて貼り付けて,あとでグループ化しやすくしたい.また,すこし違ったシチュエーションですが,多数のファイル名に順番に数字をふっていくのを,簡略にしたい.こんな時にいい方法はあるでしょうか.

    • ベストアンサー
    • Mac
  • MATLABのコンパイルについて

    MATLABのR14SP3を使っているのですが、 コンパイルをしようとするとエラーが発生します。 どうやら使っているmexファイルが旧式のために使えないようです。 書き換えはどのようにしたら良いでしょうか? 以下がエラー文です よろしくお願いします *************************************************************************** Warning: The file extension of 32-bit Windows MEX-files was changed from ".dll" to ".mexw32" in MATLAB 7.1 (R14SP3). The generated MEX-file will not be found by MATLAB versions prior to 7.1. Use the -output option with the ".dll" file extension to generate a MEX-file that can be called in previous versions. For more information see: MATLAB 7.1 Release Notes, New File Extension for MEX-Files on Windows ***************************************************************************

  • matlabのfor文でのデータ取り込み

    matlabを使って.xlsxファイルの要素を抜き出して配列にしたいと思っています。 例えば、 [S1, header]=xlsread('sample.xlsx','A1001:A1100') ここでS1にA3000からA3100まで取り込めますが、これをS2にはA1101からA1200と同様に S3,S4とfor文で取り込み最終的にS10まで行いたいです。そして、 P=[S10; S9; ・・・・S1] として一つの行列にしたいのですが、for文を使って簡単にできないでしょうか? 取り込みと、一つの行列にする部分の二つをfor文で書き表したいです。 よろしくお願いします。

  • MATLABのグラフ

    MATLAB という汎用数値解析プログラムを使っています。 現在、100×100の配列の中にランダムな数字(0~40)が入ったデータを扱っています。 その中にある数値を棒グラフで表現したいのですが、どうしたら良いでしょうか。 ヒストグラムの表現はできたのですが、私が行いたいのは1行目の1には数字A,1行目の2には数字B・・・と言ったようなグラフを作りたいです。 周囲にMATLABに詳しい人も居なく、独学では限界を感じて質問しました。 ご回答よろしくお願いいたします。

  • matlabにおいて、

    matlabにおいて、 [(-Q*A) (Q*A) (-Q*A^2) (Q*A^2) ....(Q*A^29)]のような行列を、 for i = 1:29 のみたいな感じのもので表現できますでしょうか。 それかほかにもっといい表現の仕方はありますか? ちなみにQもAも2行2列の行列です。

  • MATLABで次のようなプログラムをfor文で回したいです。

    MATLABで次のようなプログラムをfor文で回したいです。 Y = wavread('aaa.wav'); for N = 0:5:360 load(sprintf('SP%03d.dat',N)); eval(sprintf('F%d = SP%03d',N,N)); C = conv((sprintf('F%d',N)),Y); CNAME = sprintf('C%03d.wav',N); wavwrite(C,32000,16,CNAME); end このプログラムだと SP000~SP360をF0~F360へとすることはできるのですが、 そのF0~F360をそれぞれY(aaa.wav)と畳みこむことができません。 どうしたらいいか教えてください。

専門家に質問してみよう