複数のCSVファイル​をfor文を用いてr​eadmatrixで​読み込む

フォルダ内にcsvファイルが複数あります。csvファイルの中身は数値が複数入っています。
(例)1st.csv, 2nd.csv, 3rd.csv.........
これらを1つずつ読み込み、その内部の数値(data)の平均(ave)を1つの配列内(result)に保存していく場合は
data=readmatrix("1st.csv")
ave=mean(data)
result(1,1)=ave
data=readmatrix("2nd.csv")
ave=mean(data)
result(2,1)=ave
と一つずづ書くことで可能ですが、
今回はこれをfor文を用いて一気に処理したいです。
そのためにはreadmatrixのカッコ内をどう書けば良いのかわかりません。
%フォルダ内のcsvファイルをリストアップ
list=dir('*.csv');
for n = 1:length(list)
%list(n,1)に書いてある名前(n=1のとき1st.csv)のcsvファイルをreadmatrixで読み込みたい
data=readmatrix() %←この行をどう書けばよいのかがわかりません
% dataの平均をとる
ave=mean(data);
%配列result内のn行1列目に値を保存
result(n,1)=ave;
end
csvreadを使用する方法などが見つかったのですが、verR2020aのためcsvreadは使用できませんでした。
宜しくお願いします。

 采纳的回答

dirを使うとarrayが返されます。
arrayは括弧で番号付けされるので、
list( 1 )
などと書くと要素が取り出せます。list(1)などは構造体を持っているので、
.name あるいは .folder を駆使してファイルまでのパスを作れば良いです。 
%フォルダ内のcsvファイルをリストアップ
list=dir('*.csv');
for n = 1:length(list)
%list(n,1)に書いてある名前(n=1のとき1st.csv)のcsvファイルをreadmatrixで読み込みたい
data=readmatrix(list(n).name)% 同じ階層にcsvがある場合
data=readmatrix([list(n).folder '¥' list(n).name])% 同じ階層にcsvがない場合(Windows)
% dataの平均をとる
ave=mean(data);
%配列result内のn行1列目に値を保存
result(n,1)=ave;
end

1 个评论

ありがとうございます!解決しました!
別階層にある場合も併記していただき感謝です。

请先登录,再进行评论。

更多回答(1 个)

dir関数の戻り値は n×1 の struct 配列で、今欲しい情報(ファイル名)はフィールド"name"です。
data=readmatrix() %←この行をどう書けばよいのかがわかりません
% ↓ ↓ ↓
data=readmatrix(list(n).name)
でうまくいくと思います。

1 个评论

ありがとうございます!解決しました!

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 ファイルの操作 的更多信息

产品

版本

R2020a

Community Treasure Hunt

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

Start Hunting!