2013-01-19 143 views
0

我有幾個cvs文件,我想從中讀取特定的行,並從中收集特定的信息。 雖然我發現我能夠閱讀這些文件都很好,如果手動刪除一行,我希望能夠跳過這一行使用一些代碼,以避免通過這些文件中的每一個,並手動刪除此行。使用matlab讀取csv文件時,索引超過矩陣尺寸誤差?

示例: 我的文件看起來像這樣

  • 布拉布拉
  • 布拉布拉
  • 布拉布拉
  • S>
  • 布拉布拉
  • 布拉布拉
  • nquan = 12
  • 布拉布拉

我在MATLAB使用下面的代碼閱讀本文件:

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

我希望能夠得到來自行「#nquan = 12」數字「12」(其是 列點(NcoI),我將在以後需要)的數量,

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文件。

我想跳過那一行,但不知道該怎麼做......任何想法這裏有什麼錯誤?我能做些什麼才能使它成功?

非常感謝,

蘇菲

回答

1

您收到此錯誤,因爲當你的循環到達您的文件,其中包含「* S>」行,P的值等於'* S>'。正如你所看到的,p是一個長度爲4的數組。當你現在嘗試p(1:7)時,Matlab會抱怨你訪問的元素不存在。

+0

非常感謝!事實上,當我現在使用p(1:4)時,它的效果都很好。 – sophie