複数あるdatファイルの読み込みエラーについて

複数ある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 Commenti

michio
michio il 13 Giu 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
Shotaro Suzuki il 14 Giu 2017
回答いただきありがとうございます。
一つだけ指定し,読み込むことはできています。
また,listから読み込もうとすると,list(1)は読み込むことはできます。
しかしlist(2)から読み込むことができません。
実行結果については下記のとおりです。
>> list= dir (filename);
data = cell(1,length(list));
for k = 1:length(list)
data{k} = csvread(list(k).name);
end
エラー: csvread (line 34)
ファイルが見つかりません。
Kojiro Saito
Kojiro Saito il 14 Giu 2017
csvreadの34行目でファイルの存在をチェックするのですが、ここでエラーが出ているようですね。
Michioさんのコメントで書いたコードで、
exist(list(k).name)
でファイルが存在しているか確かめられます。念のためですが、このリターン値が2になっているか確かめてみてはいかがでしょうか。
Shotaro Suzuki
Shotaro Suzuki il 14 Giu 2017
ご指摘ありがとうございます。
確認してみたところ,返り値が0でした。
そこでファイルの保存場所を少し変えてみたところ,読み込むことができました。 ご回答いただきましたお二方,大変ありがとうございました。
michio
michio il 14 Giu 2017
list = dir('*.dat');
で認識される dat ファイルであるにも関わらず
exist(list(2).name)
の戻り値が 0 と出力されてファイルが見つからなかったということですね・・。
参考までですが、、どういった形でファイルを保存されてたのかだけ簡単に教えて頂けますか?
Shotaro Suzuki
Shotaro Suzuki il 15 Giu 2017
デスクトップ上のフォルダ内に.datファイルとして保存
という形で,いわゆる普通の保存の仕方をしていました。
エラーが出ていた時は,プログラムのあるディレクトリと,.datファイルを保存しているディレクトリが場所が異なっていました。(上記のプログラムでは便宜上,'*.dat'としか書いていませんが,実際には,実行時,'c¥ディレクトリ名¥*.dat'と絶対パスで指定していました)
そこで.datファイルを保存しているディレクトリにプログラムファイルを移動させて,実行したところ読み込むことができました。
ディレクトリの指定も間違ってはいなかったので,なぜファイルが見つからなかったのかはわからずじまいです...
.datファイルの出力の都合上,ディレクトリを指定してすべてのファイルを読み込みたいので,もし何かご指摘があればお願いいたします。

Accedi per commentare.

Risposte (1)

michio
michio il 15 Giu 2017
Modificato: michio il 15 Giu 2017

1 voto

なるほど、全部では無いですが状況がわかりました。詳細ありがとうございます。
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 Commento

Shotaro Suzuki
Shotaro Suzuki il 15 Giu 2017
ご丁寧にお応えいただき大変助かりました。
無事,読み込むことができました。 datastore関数についても活用していきたいと思います。

Accedi per commentare.

Prodotti

Richiesto:

il 13 Giu 2017

Commentato:

il 15 Giu 2017

Community Treasure Hunt

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

Start Hunting!