- ベストアンサー
matlabのエラー:座標データを読み込む際にエラーが発生
- matlabで座標データを読み込む際にエラーが発生します。
- テキストファイルから座標データを読み込むスクリプトを作成しましたが、エラーメッセージが表示されます。
- エラーメッセージは「Attempted to access (1); index out of bounds because numel(zahyou)=0」と表示されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>すべてのループに対してnumel(zahyou)=3となっていました. でも >確かにエラーにはnumel(zahyou)=0と出てくるのです. が出てくるということですね.変ですね. 代入文がないときには最初から最後まで行くということでしょうか. なんかそれも変ですね. 本当に空行列はないですか?あるいは,文字が入っているか,テキストデータが間違って全角で入っているとか. とりあえず難しいことはおいといて,エラーが出た時に変数"Line"の中身を確認してみるのがいいと思います.それと,どの行の読み込みの時にエラーが出るのか,iの値で確認できると思います.
その他の回答 (3)
- Kules
- ベストアンサー率47% (292/619)
そうですね…とりあえずコメントを。 先の回答者の方も書かれている通り、Matlabでループ変数にiやjを使うのは、 虚数と解釈されてしまう恐れがあるので、使わないのをクセにしといた方がいいでしょうね。 コメント終わります。 さて…エラーの原因ですが、なかなかやっかいですね。 とりあえず zahyou=sscanf(Line,'%f%f%f'); の後に if numel(zahyou)<3;continue;end; を入れればエラーなく動くようにはなりますが、 根本的な解決ではないですよね。 最初この質問を見た時は 「最後に余計な改行が入ってて、それを読んだ時に変になってるのかなあ」とか 「EOFの解釈が違って、ほんとはファイルの最後までいってるのに検出出来てないのかなあ」とか 思ってたんですが、numel(zahyou)が常に3なのならそんなこともなさそうですし… あとはデバッグとして while feof(fid)==0 Line=fgets(fid); zahyou=sscanf(Line,'%f%f%f'); fprintf('%s\t%d\n',Line,numel(zahyou)); x(i)=zahyou(1); y(i)=zahyou(2); z(i)=zahyou(3); end としてLineに入ってるものを確かめるとかかなあ… ちなみにですが、エラーが出る時のiの値は、実際のテキストファイルに入ってる数値の行数と比較してどうですかね? (行数よりも明らかに少ないか、行数+1か、行数か) その辺り補足していただければ何かわかるかも知れません。 参考になれば幸いです。
- ciel_bleu
- ベストアンサー率41% (66/160)
エラーの意味としては,変数"zahyou"が空行列になっているということです.なので,どこかでテキストデータに空の行が含まれているということではないかと思います. そして,もうひとつ気になるのは,iあるいはnやlがカウントアップする式がない点です. ですので,このスクリプトでは,テキストの読み込み行はどんどん進んでいるのにもかかわらず,x y zの変数はいつまでも1*1のままです. なので最初の1行を読むときはうまくいっているように見えても,テキストデータに空の行が入っているので,そこで止まってしまうということなのではないかと推測されますがいかがでしょう. まずは,while文の前にi=1;,endの前にi=i+1;を書き足してやってみてはどうでしょうか. すでにカウントアップされているようでしたらすみません. そして,カウントアップが不要の(x y z は1*1でよい)スクリプトでしたらお詫びします.
補足
i=i+1は書き忘れてました.すいません.エラーが出るx(i),y(i),z(i)に代入する文を削除して代わりにnumel(zahyou)をいれて実行したところ,すべてのループに対してnumel(zahyou)=3となっていました.なので,zahyouの中身はからでないはずなのですが,確かにエラーにはnumel(zahyou)=0と出てくるのです.
- ciel_bleu
- ベストアンサー率41% (66/160)
x(i)のところで,"i"が定義されていないので,虚数扱いになっているからではないでしょうか.
補足
lとかnとかでも試してますけど駄目の様です.
お礼
デバッグしてたらできました.アドバイスありがとうございました.