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);

但是,它给我一个错误,指出“结束”处的“索引超出矩阵维度”......当我查看“p”是什么时,它告诉我“* S>”,因此我猜我有一个问题读取文件中的“* S>”行时..

当我手动删除该行'* S>'时,一切正常,我得到我的 Ncol = 12。但是,我想避免手动执行此操作,因为我有一堆这样的 cnv 文件。

我想跳过那条线,但不知道该怎么做……有什么想法吗?我该怎么做才能让它发挥作用?

非常感谢,

苏菲

4

1 回答 1

1

您收到此错误是因为当您的循环到达文件中包含“* S>”的行时,p 的值等于'* S>'. 如您所见, p 是一个长度为 4 的数组。当您现在 tryp(1:7)时,Matlab 会抱怨,因为您正在访问不存在的元素。

于 2013-01-19T06:43:45.497 回答