我有一个包含重复字符串的文件。文件很大,我举个简单的例子:
a b c
w a g
b v f
我想提取a b
到一个数组。如何在 MATLAB 中做到这一点?
尝试使用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
您可以更改检查以从矩阵中找到您想要的任何模式。
这假设您的文件将适合内存 - 如果它太大而无法容纳一半的内存,您将需要通过增量传递和文件写入来做一些更棘手的事情。
从答案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);