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

44 ビュー (過去 30 日間)
愛可里 熊田
愛可里 熊田 2020 年 6 月 3 日
コメント済み: 愛可里 熊田 2020 年 6 月 3 日
フォルダ内に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は使用できませんでした。
宜しくお願いします。

採用された回答

Shojiro SHIBAYAMA
Shojiro SHIBAYAMA 2020 年 6 月 3 日
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 件のコメント
愛可里 熊田
愛可里 熊田 2020 年 6 月 3 日
ありがとうございます!解決しました!
別階層にある場合も併記していただき感謝です。

サインインしてコメントする。

その他の回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2020 年 6 月 3 日
dir関数の戻り値は n×1 の struct 配列で、今欲しい情報(ファイル名)はフィールド"name"です。
data=readmatrix() %←この行をどう書けばよいのかがわかりません
% ↓ ↓ ↓
data=readmatrix(list(n).name)
でうまくいくと思います。
  1 件のコメント
愛可里 熊田
愛可里 熊田 2020 年 6 月 3 日
ありがとうございます!解決しました!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMATLAB 入門 についてさらに検索

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!