複数の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は使用できませんでした。
宜しくお願いします。

 Akzeptierte Antwort

Shojiro SHIBAYAMA
Shojiro SHIBAYAMA am 3 Jun. 2020

4 Stimmen

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 Kommentar

愛可里 熊田
愛可里 熊田 am 3 Jun. 2020
ありがとうございます!解決しました!
別階層にある場合も併記していただき感謝です。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Atsushi Ueno
Atsushi Ueno am 3 Jun. 2020

2 Stimmen

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

1 Kommentar

愛可里 熊田
愛可里 熊田 am 3 Jun. 2020
ありがとうございます!解決しました!

Melden Sie sich an, um zu kommentieren.

Produkte

Version

R2020a

Community Treasure Hunt

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

Start Hunting!