Excel 而Matlab中的循环不会比较字符串

Excel 而Matlab中的循环不会比较字符串,excel,matlab,while-loop,increment,Excel,Matlab,While Loop,Increment,我在Matlab中设计了一个while循环来完成一个特定的任务。首先,我要导入excel电子表格中几列的标题 'student #' ' assn1' ' assn2' ' assn3' ' assn4' ' assn5' ' lab1' ' lab2' ' lab3' ' lab4' ' midterm' ' final exam' 这些数据存储在一个名为“txt”的矩阵中。当我的计数器变量“i”未达到等于“txt”大小的数值时,请输入循环。我将向量的当前值存

我在Matlab中设计了一个while循环来完成一个特定的任务。首先,我要导入excel电子表格中几列的标题

'student #' ' assn1'    ' assn2'    ' assn3'    ' assn4'    ' assn5'    ' lab1' ' lab2' ' lab3' ' lab4' ' midterm'  ' final exam'
这些数据存储在一个名为“txt”的矩阵中。当我的计数器变量“i”未达到等于“txt”大小的数值时,请输入循环。我将向量的当前值存储在变量j中。如果该值的前4个字母等于“assn”,则将assignmentCounter增加1。如果不是,什么也不要做。然后,在退出循环之前,将计数器变量“i”增加1。理想情况下,这个程序应该告诉我assn在矩阵“txt”中出现了多少次。但是,我的最终结果是assignmentCounter为0。我不知道该怎么办。任何帮助都将不胜感激,谢谢! 代码:

%4
清楚的
clc;
文件名='marksdata.xlsx';
[num,txt,raw]=xlsread(文件名);
%循环浏览类别
assignmentCounter=0;
categorySize=大小(txt);
i=1;
循环计数=0;
当我分类时
j=txt(i,分类);
如果是strncmpi('assn',j,4)
assignmentCounter=assignmentCounter+1;
终止
i=i+1;
终止
理想情况下,这个程序应该告诉我一个ASN在系统中出现了多少次 矩阵“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次。

一个关键点是size()返回一个向量[rows,cols]。根据您是否希望
categorySize
成为
txt
中的行数或列数,您应该分别执行
[categorySize,~]=size(txt)
[~,categorySize]=size(txt)
。您应该真正学会在Matlab中使用调试器。只需设置一个断点,就可以看到变量的值。这将帮助您快速调试此类问题。此外,问题顶部的示例字符串包含前导空格。在您的实际数据中是否如此?如果是,那么很明显,为什么将前4个字符与
'assn'
进行比较不会匹配任何内容。很好。当然,如果OP只想检查字符串开头的出现情况,那么
c=regexpi(txt,^assn')
将起作用(考虑前导空格)。在这种情况下,
cellfun
可以替换为
sum([c{:}])
,但可读性可能会降低。
txt={'student #' ' assn1'    ' assn2'    ' assn3'    ' assn4'    ' assn5'    ' lab1' ' lab2' ' lab3' ' lab4' ' midterm'  ' final exam'}
c=strfind(txt,'assn');
sum(~cellfun(@isempty,c))
%  5