如何在 MATLAB 中 select 不包含特定字符串的文件?
How to select files that don't contain a certain string in MATLAB?
我有一个包含 10000 个文件的目录。我想 select 那些不包含字符串“_B”的文件进行处理。我不想排除其他带有字符 B 的文件。
我尝试了以下操作:
for k=1:n
if(~contains(files(k).name, '*_B*.png'))
...
end
但这只是 select 所有带有“_B”的文件。如果我删除 "contains" 前面的波浪号,none 的文件将被 selected。我该把这条线改成什么才能得到想要的结果?
正如@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
您可以通过应用单元格函数来避免循环。首先列出文件。在这里,我列出了所有以“.png”结尾的文件。然后查看哪些包含字符串 '_B',然后选择不带它的文件名。
DIR=dir('*.png');
fName={DIR(:).name}';
searchResult=cellfun(@findstr,fName,repmat({'_B'},length(fName),1),'UniformOutput',false);
chosen=fName(cellfun(@isempty,searchResult));
模式语句中的通配符可能是问题的原因; contains
不需要它们。正如函数名称所暗示的那样,如果字符串 'contains' 是模式字符串,它会 return 为真,不管它周围有什么。
所以
对于 _B.png
或 123_B.png
或 randomfilename_Bahaha.whatever
,contains(files(k).name, '_B')
将 return 为真
因此,您需要对现有代码进行的唯一更改是从模式字符串中删除通配符,只保留 '_B'
我有一个包含 10000 个文件的目录。我想 select 那些不包含字符串“_B”的文件进行处理。我不想排除其他带有字符 B 的文件。
我尝试了以下操作:
for k=1:n
if(~contains(files(k).name, '*_B*.png'))
...
end
但这只是 select 所有带有“_B”的文件。如果我删除 "contains" 前面的波浪号,none 的文件将被 selected。我该把这条线改成什么才能得到想要的结果?
正如@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
您可以通过应用单元格函数来避免循环。首先列出文件。在这里,我列出了所有以“.png”结尾的文件。然后查看哪些包含字符串 '_B',然后选择不带它的文件名。
DIR=dir('*.png');
fName={DIR(:).name}';
searchResult=cellfun(@findstr,fName,repmat({'_B'},length(fName),1),'UniformOutput',false);
chosen=fName(cellfun(@isempty,searchResult));
模式语句中的通配符可能是问题的原因; contains
不需要它们。正如函数名称所暗示的那样,如果字符串 'contains' 是模式字符串,它会 return 为真,不管它周围有什么。
所以
对于 _B.png
或 123_B.png
或 randomfilename_Bahaha.whatever
contains(files(k).name, '_B')
将 return 为真
因此,您需要对现有代码进行的唯一更改是从模式字符串中删除通配符,只保留 '_B'