0

特定の行を読み取り、そこから特定の情報を収集したい cvs ファイルがいくつかあります。手動で行を削除すると、これらのファイルをすべて適切に読み取ることができることがわかりましたが、これらの各ファイルを通過してこの行を手動で削除することを避けるために、いくつかのコードを使用してこの行をスキップできるようにしたいと考えています。

例: 私のファイルは次のようになります

  • ブラブラ
  • ブラブラ
  • ブラブラ
  • S>
  • ブラブラ
  • ブラブラ
  • nquan = 12
  • ブラブラ

matlab で次のコードを使用して、このファイルを読んでいます。

din = 'C:/example/';
CNVfiles = dir ([din '*.cnv']);
fid = fopen([din CNVfiles], 'r');

行「# nquan = 12」から数値「12」を取得できるようにしたい (これは、後で必要になる列 (Ncol) の数です)、

p = '           ';

while ~isequal(p(1:7),'* nquan')  

    p = fgets(fid);

end

Ncol = str2double(p(11:end));

fclose(fid);

しかし、'end' に 'Index esceed matrix dimension' というエラーが表示されます ....'p' を確認すると、'* S>' と表示されるため、問題があると推測しています。ファイルの「* S>」行を読み取るとき..

その行「* S>」を手動で削除すると、すべて正常に機能し、Ncol = 12 になります。ただし、そのような cnv ファイルがたくさんあるため、これを手動で行うことは避けたいと思います。

私はその行をスキップすることを考えていましたが、それを行う方法がわかりません...ここで何が間違っているのでしょうか? それを機能させるにはどうすればよいですか?

どうもありがとう、

ソフィー

4

1 に答える 1

1

ループがファイル内の「* S>」を含む行に到達すると、p の値が に等しくなるため、このエラーが発生します'* S>'。ご覧のとおり、p は長さ 4 の配列です。ここで を試すとp(1:7)、存在しない要素にアクセスしているため、Matlab からエラーが発生します。

于 2013-01-19T06:43:45.497 に答える