2015-11-28 60 views
-1

我已經在Matlab中設計了一個while循環來完成特定的任務。首先,我正在導入excel電子表格的幾列標題。雖然Matlab中的循環不會比較字符串

'student #' ' assn1' ' assn2' ' assn3' ' assn4' ' assn5' ' lab1' ' lab2' ' lab3' ' lab4' ' midterm' ' final exam' 

這些存儲在一個名爲'txt'的矩陣中。雖然我的計數器變量'i'尚未達到等於'txt'大小的數值,請輸入循環。我將矢量的當前值存儲在變量j中。如果此值的前4個字母等於「assn」,則將assignCounter增加1.如果不是,則不執行任何操作。然後,在退出循環之前,將計數器變量'i'加1。理想情況下,該程序應該告訴我一個assn在矩陣'txt'中出現了多少次。但是,我的最終結果是assignCounter是0.我不知道該怎麼做。任何幫助將不勝感激,謝謝! 代碼:

%Assignment 4 
clear; 
clc; 
filename = 'marksdata.xlsx'; 
[num, txt, raw] = xlsread(filename); 

%Loop through the categories 
assignmentCounter = 0; 
categorySize = size(txt); 
i = 1; 
loopCount = 0; 
while i < categorySize 
     j = txt(i, categorySize); 
     if strncmpi('assn',j, 4) 
      assignmentCounter = assignmentCounter + 1; 
     end 
     i = i + 1; 
end 
+0

一件事就是size()返回一個矢量[rows,cols]。取決於你希望'categorySize'是'txt'中的行數還是列數,你應該分別使用'[categorySize,〜] = size(txt)'或'[〜,categorySize] = size(txt)' 。 –

+0

你應該真的學會在Matlab中使用調試器。只需設置一個斷點,然後您就可以看到變量的值。這將幫助您快速調試此類問題。 – zelanix

+0

另外,您問題頂部的示例字符串包含前導空格。你的實際數據是這種情況嗎?如果是,那麼它應該很明顯,爲什麼將前4個字符與'assn''比較將不會匹配任何內容。 – zelanix

回答

2

理想的情況下,這個程序應該的ASSN在 出現了多少次矩陣 'TXT' 告訴我。

如果這是你想要的東西,這何樂而不爲:

txt={'student #' ' assn1' ' assn2' ' assn3' ' assn4' ' assn5' ' lab1' ' lab2' ' lab3' ' lab4' ' midterm' ' final exam'} 
c=strfind(txt,'assn'); 
sum(~cellfun(@isempty,c)) 
% 5 

所以assn顯示了5倍。

+0

不錯。當然,如果OP只想檢查字符串開頭的出現,那麼'c = regexpi(txt,'^ assn')'會起作用(佔領先空間)。在這種情況下,'cellfun'可以用sum([c {:}])替換,但可能不太可讀。 – zelanix