Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何使用MATLAB查找文件中的字符串_String_File_Matlab - Fatal编程技术网

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。但是,由于他没有很好地指定模式,我认为这并不是太过分。