適切でないインデック​ス行列を参照していま​す。 エラーについて

DebugFiles='C:\MATLAB';
D = dir(DebugFiles);
for i=1:length(D)
% ファイルオープン
fid=fopen(D(i).name);
end
plot(X,Y)
xlabel('a')
ylabel('b')
title('sample')
legend('n')
で「MATLAB」ファイルをリスト化して,そのファイル一つずつに処理を行うプログラムを組んだのですが、
適切でないインデックス行列を参照しています。
エラーの発生場所 T2 (line 67)
fid=fopen(D(i).name);
というエラーが出て、図は表示されるのですが、
軸名やタイトル、凡例が表示されません。 どのような原因が考えられるでしょうか。

回答 (1 件)

mizuki
mizuki 2017 年 12 月 15 日

2 投票

エラーが生じた場合は、まずは課題を分割して原因を突き止めてみてください。
今回の場合、エラーメッセージは「適切でないインデクス行列の参照」になります。インデクスらしきものは、このエラーメッセージの中では
D(i)
の部分になります。 まずは fopen の行にブレークポイントを置いて、ループのインデクス i が何のときにエラーが起こっているか調べてみてください。
ブレークポイントの置き方については以下のドキュメントをご参考にしてください。
  • MATLAB プログラムのデバッグ
なお、予想ですが、dir 関数の出力は . や .. が含まれます。これらを fopen しようとするとエラーが生じるのではないかと思います。この場合、for ループのインデクスの開始数値を3にすれば問題を回避することができます。

4 件のコメント

nknknknk
nknknknk 2017 年 12 月 15 日
ご回答ありがとうございます。 ブレークポイントでiが何のときにエラーが起こっているか調べたところ、 i=3.6.11.12.14.16.18・・の時に
適切でないインデックス行列を参照しています。
エラーの発生場所 T2 (line 71)
fid=fopen(D(i).name);
となるのですが、ファイルに問題があるとしか考えられないでしょうか。
mizuki
mizuki 2017 年 12 月 15 日
その時の出力を見てみましょう。 例えば
D(3)
D(3).name
の出力を見て、何かおかしなところはないでしょうか。
nknknknk
nknknknk 2017 年 12 月 15 日
D(3),D(3).name
の出力を見ると、どちらも正しい出力でした..。
mizuki
mizuki 2017 年 12 月 28 日
エラーが起こっているのは i が何のときですか? エラーメッセージから、D(i) あるいは D(i).name でエラーが起こっていると予想できるのですが、3ではなく i のときは試されましたか?

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

カテゴリ

ヘルプ センター および File ExchangeMatrix Indexing についてさらに検索

質問済み:

2017 年 12 月 15 日

コメント済み:

2017 年 12 月 28 日

Community Treasure Hunt

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

Start Hunting!