我有一个非常基本的问题。我正在阅读Matlab中的一个文件,我想检测一行是否显示“occurence1”。但我得到“矩阵”维度错误。我猜matlab读取某些行作为数字矩阵左右?
我的数据如下:
String2
occurence1
3.2 1.2
string3
occurence1
我应该将tline转换为字符串或其他东西吗?我精通Java,但是我对matlab没有定义变量有些麻烦......
%open file with patterns
fid = fopen('filename.txt');
tline = fgetl(fid);
disp(tline);
while ischar(tline)
disp(tline)
tline = fgetl(fid);
if (num2str(tline)=='occurence1')
disp(tline)
end
end
fclose(fid);
答案 0 :(得分:1)
编辑器中的M-Lint消息说明:
代码使用等于(
==
)的两个字符串来比较两个字符串 等于(~=
)关系运算符。 MATLAB软件返回错误 如果被比较的字符串是不同的长度,则运行时间。即使 MATLAB在代码运行时不会返回错误,很可能就是这样 这段代码效率很低。
MATLAB的==
返回A
和B
相等的逻辑数组。根据文档,==
的输入必须是相同的大小,除非一个是标量(然后扩展到与另一个数组相同的大小)。由于您的行长度不同,因此遇到字符长度与'occurence1'
不同的行时,相等性检查将失败。由于您的算法会跳过第一行(您在比较循环之外调用fgetl
)而第二行是'occurence1'
,因此在到达第三行之前,您不会看到错误。
不使用==
,而是使用MATLAB内置的字符串比较函数(如strcmp
或strcmpi
)来执行逻辑检查。
此外,虽然MATLAB不是静态类型,但内置函数的输出通常都有很好的记录。在这种情况下,fgetl
的文档说明输出是一个字符串,除非该行仅包含文件结束标记。因此,此处不需要num2str
来电。