ループ処理の中で、繰​​り返し番号つきのフ​ァ​イル名(csv, mat)のデータを読​み込むにはどうしたら​よ​いですか?

37 views (last 30 days)
kanako machii
kanako machii on 1 Jul 2020
ループ処理の中で、繰り返し番号つきのファイル名(csvまたはmat)のデータを読み込む方法を教えてください。
例えば、保存されたfile1~file20のcsv,matデータをループ処理で読み込みたいです。
ご指導宜しくお願い致します。

Accepted Answer

Hiroyuki Hishida
Hiroyuki Hishida on 1 Jul 2020
Edited: Hiroyuki Hishida on 1 Jul 2020
こんにんちは
ポイントは文字列処理になります。読み込みたいファイルが、相対パスでhogeというフォルダの下にあるとしましょう。そこにはfname1.csv~fname99.csvというfileがあるとします。そんなとき、例えばこれでいけます。
f_name_base = fullfile(pwd, '\hoge\');
for id=1:99
str_id = num2str(id, '%i');
f_path=strcat(f_name_base, 'fname', str_id, '.csv');
%disp(f_path);
end
もしファイル名がfname001.csvなどと数字が3桁指定されているのであれば、
str_id = num2str(id, '%03i');
とすれば0でパディング可能です。なお、%iでなく%dとかの方が良いかもしれません。
よろしくおねがいします。
菱田
  2 Comments
kanako machii
kanako machii on 2 Jul 2020
ご回答ありがとうございます。
例えば、fname1.csv~fname99.csvをf1~f99という名前の行列として各々ワークスペースに読み込みたい時、
この方法で可能でしょうか。(for loopでfname1.csv~fname99.csvを読み込み、99個の行列がワークスペースに残る)
教えて頂いた方法では、fname1.csv~fname99.csvを上書きして読み込んでいるように思えるのですが、
正しいでしょうか。
お忙しいところ恐縮ですがよろしくお願いいたします。
Hiroyuki Hishida
Hiroyuki Hishida on 2 Jul 2020
こんにちは
変数を99個つくらず、まとめる方法(配列に入れる方法)でもよろしいでしょうか?であればたとえばこういう方法があります。
f_name_base = fullfile(pwd, '\hoge\');
f_cell = cell(99,1);
for id=1:99
str_id = num2str(id, '%i');
f_path=strcat(f_name_base, 'f', str_id, '.csv');
f_cell{id} = f_path;
%disp(f_path);
end
f_cell(1)
f_cell{1}
ここではcell配列にファイルパスを取り込んでいますが、readtableなどにより取り込んだ行列であっても格納することは可能です。
いかがでしょうか?
菱田

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!