複数あるdatファイルの読み込みエラーについて
Show older comments
複数ある7行4列のdatファイルを読み込みたいと思っています。 下記のようなコードを実行すると,「ファイルが見つかりません。」とエラーが出ます。 listで確認してもdatファイルはすべてリストアップされています。 どのように書き換えれば正常に読み込みができるでしょうか?
list= dir ('*.dat');
data = cell(1,length(list));
for k = 1:length(list)
data{k} = csvread(list(k).name);
end
6 Comments
michio
on 13 Jun 2017
コードを見る限り特に問題になりそうな部分は見当たりませんね・・。
a = csvread('filename.dat');
と存在するファイル名を明示的に1個だけ指定した場合は正しく読み込まれますか? 下記のスクリプトでは exist 関数でファイルの存在を改めて確認していますが、実行結果(エラーメッセージ)をそのままコピペで教えて頂けますか?
list= dir('*.dat');
data = cell(1,length(list));
for k = 1:length(list)
list(k).name
exist(list(k).name)
data{k} = csvread(list(k).name);
end
Shotaro Suzuki
on 14 Jun 2017
Kojiro Saito
on 14 Jun 2017
csvreadの34行目でファイルの存在をチェックするのですが、ここでエラーが出ているようですね。
Michioさんのコメントで書いたコードで、
exist(list(k).name)
でファイルが存在しているか確かめられます。念のためですが、このリターン値が2になっているか確かめてみてはいかがでしょうか。
Shotaro Suzuki
on 14 Jun 2017
michio
on 14 Jun 2017
list = dir('*.dat');
で認識される dat ファイルであるにも関わらず
exist(list(2).name)
の戻り値が 0 と出力されてファイルが見つからなかったということですね・・。
参考までですが、、どういった形でファイルを保存されてたのかだけ簡単に教えて頂けますか?
Shotaro Suzuki
on 15 Jun 2017
Answers (1)
なるほど、全部では無いですが状況がわかりました。詳細ありがとうございます。
dir の結果 list(k).name にどんな情報が入っているかを確認すると、ファイルの名前しか含まれていないことがわかるかと思います。
スクリプトが保存されているディレクトリとは別の場所にあるファイルを読み込む場合に、csvread 関数にファイル名を与えるだけでは不十分です。関数はファイルがどこにあるかわからないので。
例えば for ループ内で fullfile https://jp.mathworks.com/help/matlab/ref/fullfile.html 関数を使ってファイル名とディレクトリパス名を結合した上で、csvread 関数に入力すれば読み込めるはずですよ。 トライしてみてください。
もし余裕があれば、、下記で紹介している datastore 関数も便利ですよ。 https://jp.mathworks.com/matlabcentral/answers/309715-datastore
1 Comment
Shotaro Suzuki
on 15 Jun 2017
Categories
Find more on ファイルの操作 in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!