如何在MATLAB中选择不包含某个字符串的文件?

时间:2018-04-16 10:03:39

标签: matlab string-comparison

我有一个包含10000个文件的目录。我想选择那些不包含字符串" _B"的文件进行处理。还有其他带有字符B的文件,我不想排除。

我尝试执行以下操作:

for k=1:n
    if(~contains(files(k).name, '*_B*.png'))
    ...
end

但是这只是用" _B"选择所有文件。代替。如果我删除"包含"前面的波形符号,则没有选择任何文件。我该如何更改线路以获得所需的结果?

3 个答案:

答案 0 :(得分:3)

模式语句中的通配符可能是导致问题的原因; contains不需要它们。正如函数的名称所暗示的那样,如果字符串'包含'模式字符串,则它将返回true,不管其周围是什么。

所以 对于contains(files(k).name, '_B')_B.png123_B.png

randomfilename_Bahaha.whatever将返回true

因此,您需要对现有代码进行的唯一更改是从模式字符串中删除通配符,然后离开'_B'

答案 1 :(得分:1)

正如@Adriaan所提到的那样是他的评论,你可以使用比较字符串的strcmp。在你的情况下,你想做类似的事情:

for k=1:n
    if strcmp(files(k).name,'_B') %compare your filename with '_B', strcmp returns 1 if it finds the string '_B' in it, 0 otherwise
    %process _B files
    end
end

答案 2 :(得分:1)

您可以通过应用单元格函数来避免for循环。首先列出文件。在这里,我列出所有以'.png'结尾的文件。然后看看哪些包含字符串'_B',然后选择没有它的文件名。

DIR=dir('*.png');
fName={DIR(:).name}';
searchResult=cellfun(@findstr,fName,repmat({'_B'},length(fName),1),'UniformOutput',false);
chosen=fName(cellfun(@isempty,searchResult));