我有一个包含重复字符串的文件。文件非常大所以我举一个简单的例子:
a b c
w a g
b v f
我想将a b
提取到数组中。我怎么能在MATLAB中做到这一点?
答案 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);