1

我有一个包含重复字符串的文件。文件很大,我举个简单的例子:

a    b    c
w    a    g
b    v    f

我想提取a b到一个数组。如何在 MATLAB 中做到这一点?

4

2 回答 2

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

然后,如果有您想要的特定模式,您可以遍历 cellmatrix。假设您想要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

您可以更改检查以从矩阵中找到您想要的任何模式。

这假设您的文件将适合内存 - 如果它太大而无法容纳一半的内存,您将需要通过增量传递和文件写入来做一些更棘手的事情。

于 2013-05-14T18:00:22.447 回答
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);
于 2013-05-14T18:15:11.093 回答