如何使用MATLAB在文件中查找字符串

时间:2013-05-14 17:38:09

标签: string file matlab

我有一个包含重复字符串的文件。文件非常大所以我举一个简单的例子:

a    b    c
w    a    g
b    v    f

我想将a b提取到数组中。我怎么能在MATLAB中做到这一点?

2 个答案:

答案 0 :(得分:2)

尝试使用TEXTSCAN。您可以按'\ n'拆分文件,然后使用带有cell2mat的空格拆分文件。

fid = fopen('your_string_file.ext');
input = textscan(fid, '%s', 'delimiter', '\n');
cellmatrix = cell2mat(input{1});


cellmatrix =
     a b c
     d f a
     b v f

然后,如果您想要一个特定的模式,您可以走单元矩阵。假设您想在单行中使用a b模式,则可以执行以下操作:

pattern = ['a', 'b'];
patindex = 1;
dims = size(cellmatrix);
for i=1:dims(1)
    patindex = 1;
    for j=1:dims(2)
        if strcmp(cellmatrix(i,j), ' ')
            continue
        end
        if strcmp(cellmatrix(i,j), pattern(patindex))
            patindex = patindex+1;
            if patindex > length(pattern)
                FOUND... store location/do what you want
                patindex = 1;
            end
        else
            patindex = 1;
        end
    end
end

您可以更改支票,以便从矩阵中找到您想要的任何图案。

这假设你的文件适合内存 - 如果它太大而无法容纳你的一半内存,那么你需要做一些更复杂的传递和文件编写的技巧。

答案 1 :(得分:2)

从答案1!获得cellmatrix后,您可以使用strcmp创建关于您的模式的真/落矩阵:

strcmp(cellmatrix,'a')

如果您的文件非常大,因此它不适合您的内存,请尝试使用fgets逐行读取文件:

fid = fopen('VERYBIGFILE');
tline = fgets(fid);
while ischar(tline)
    disp(tline)
    tline = fgets(fid);
    %% DO SOME STUF WITH THE LINE
end
fclose(fid);