我有几个cvs文件,我想从中读取特定行,以便从中收集特定信息。 虽然我发现如果手动删除一行我能够很好地阅读这些文件,但我希望能够使用一些代码跳过这一行,以避免浏览这些文件并手动删除这一行。
实施例: 我的文件看起来像这样
我正在使用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);
然而,它给我一个错误,在'结束'说明'索引esceed矩阵维'....当我看'p'是什么时,它告诉我'* S>'因此我猜测我在阅读'* S>'时遇到了问题文件中的行..
当我手动删除该行'* S>'时,它运行良好,我得到我的Ncol = 12.但是,我想避免手动执行此操作,因为我有一堆像这样的cnv文件。 / p>
我想跳过那条线,但不知道怎么做......任何想法在这里有什么不对?我该怎么做才能使它有效?
非常感谢,
柔
答案 0 :(得分:1)
您收到此错误是因为当您的循环到达文件中包含“* S>”的行时,p的值等于'* S>'
。如您所见,p是一个长度为4的数组。当您现在尝试p(1:7)
时,Matlab会因为您访问不存在的元素而抱怨。