String 如何使用MATLAB查找文件中的字符串
我有一个包含重复字符串的文件。文件非常大,因此我给出一个简单的示例:String 如何使用MATLAB查找文件中的字符串,string,file,matlab,String,File,Matlab,我有一个包含重复字符串的文件。文件非常大,因此我给出一个简单的示例: a b c w a g b v f 我想将ab提取到数组中。如何在MATLAB中执行此操作?尝试使用。您可以先按“\n”分割文件,然后用cell2mat按空格分割文件 fid = fopen('your_string_file.ext'); input = textscan(fid, '%s', 'delimiter', '\n'); cellmatrix = cell2mat(input
a b c
w a g
b v f
我想将ab
提取到数组中。如何在MATLAB中执行此操作?尝试使用。您可以先按“\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
您可以更改支票,从矩阵中找到您想要的任何图案
这假设您的文件可以放入内存中——如果文件太大,无法放入一半内存,则需要通过增量传递和文件写入来执行更为复杂的操作。尝试使用。您可以先按“\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
您可以更改支票,从矩阵中找到您想要的任何图案
这假设您的文件可以放入内存中——如果文件太大,无法放入一半内存,则需要通过增量传递和文件写入来执行更为复杂的操作。从答案中获取cellmatrix之后!,您可以使用strcmp创建关于您的模式的真实/下降矩阵:
strcmp(cellmatrix,'a')
如果您的文件非常大,因此无法放入内存,请尝试使用FGET逐行读取文件:
fid = fopen('VERYBIGFILE');
tline = fgets(fid);
while ischar(tline)
disp(tline)
tline = fgets(fid);
%% DO SOME STUF WITH THE LINE
end
fclose(fid);
在你得到答案中的细胞矩阵之后!,您可以使用strcmp创建关于您的模式的真实/下降矩阵:
strcmp(cellmatrix,'a')
如果您的文件非常大,因此无法放入内存,请尝试使用FGET逐行读取文件:
fid = fopen('VERYBIGFILE');
tline = fgets(fid);
while ischar(tline)
disp(tline)
tline = fgets(fid);
%% DO SOME STUF WITH THE LINE
end
fclose(fid);
您想要提取的字符串(
ab
)与文档中的重复字符串之间的关系是否有原因/模式?因此,基本上,您是在文件中寻找一个特定的字符串,该字符串将作为输入。这样做对你有好处吗?你想提取的字符串(ab
)与文档中的重复字符串之间的关系有什么原因/模式吗?因此,基本上,你是在文件中寻找一个特定的字符串,作为输入。这是为你做的吗?但这只是读取文件-我想@newzad想在该文件中找到一个字符串。他没有指定他想要的模式,所以我将其解释为他想将文本转换为数组。我将添加如何从这篇文章中获取模式。for循环在这里有点过分了。“strcmp”可以在本机上工作。如果他想检查单个字符/简单模式,则为True。但由于他没有很好地指定模式,我认为这并不是太过分。但这只是读取文件-我认为@newzad想在该文件中找到一个字符串。他没有指定他想要的模式,所以我将其解释为他想将文本转换为数组。我将添加如何从这篇文章中获取模式。for循环在这里有点过分了。“strcmp”可以在本机上工作。如果他想检查单个字符/简单模式,则为True。但是,由于他没有很好地指定模式,我认为这并不是太过分。