比较从Matlab中的文件逐行读取的字符串

时间:2016-05-23 15:57:33

标签: matlab

我有一个非常基本的问题。我正在阅读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);

1 个答案:

答案 0 :(得分:1)

编辑器中的M-Lint消息说明:

  

代码使用等于(==)的两个字符串来比较两个字符串   等于(~=)关系运算符。 MATLAB软件返回错误   如果被比较的字符串是不同的长度,则运行时间。即使   MATLAB在代码运行时不会返回错误,很可能就是这样   这段代码效率很低。

MATLAB的==返回AB相等的逻辑数组。根据文档,==的输入必须是相同的大小,除非一个是标量(然后扩展到与另一个数组相同的大小)。由于您的行长度不同,因此遇到字符长度与'occurence1'不同的行时,相等性检查将失败。由于您的算法会跳过第一行(您在比较循环之外调用fgetl)而第二行是'occurence1',因此在到达第三行之前,您不会看到错误。

不使用==,而是使用MATLAB内置的字符串比较函数(如strcmpstrcmpi)来执行逻辑检查。

此外,虽然MATLAB不是静态类型,但内置函数的输出通常都有很好的记录。在这种情况下,fgetl的文档说明输出是一个字符串,除非该行仅包含文件结束标记。因此,此处不需要num2str来电。