如何从MATLAB上的单元格数组中访问特定文件扩展名的文件

如何从MATLAB上的单元格数组中访问特定文件扩展名的文件,matlab,file,cell-array,file-extension,Matlab,File,Cell Array,File Extension,我试图从我在MATLAB上创建的单元格数组中访问所有具有特定文件扩展名的文件,但我不确定如何做到这一点。此外,我需要能够使它成为一个变量输入。因此,当我调用我的函数时,我可以输入不同的文件扩展名来访问与输入的文件扩展名对应的不同文件 任何帮助都将不胜感激 您只需使用查找文件名中感兴趣的扩展名,将其放入,然后使用此匿名函数在每个单元格数组元素上工作 请查看以下代码段: %文件单元数组 文件={ “text1.txt”, “text2.txt”, “image1.png”, ‘image2.jpg’

我试图从我在MATLAB上创建的单元格数组中访问所有具有特定文件扩展名的文件,但我不确定如何做到这一点。此外,我需要能够使它成为一个变量输入。因此,当我调用我的函数时,我可以输入不同的文件扩展名来访问与输入的文件扩展名对应的不同文件

任何帮助都将不胜感激

您只需使用查找文件名中感兴趣的扩展名,将其放入,然后使用此匿名函数在每个单元格数组元素上工作

请查看以下代码段:

%文件单元数组 文件={ “text1.txt”, “text2.txt”, “image1.png”, ‘image2.jpg’, "audio1.mp3",, “audio2.mp3” } %利息延期 ext='txt'; %在cellfun中使用strfind操作 温度=cellfun@x~isemptystrfindx,['.'ext],文件,'UniformOutput',false %组合输出,并找到合适的索引 idx=find[temp{:}] %获取具有感兴趣扩展名的文件 filetext=filesidx %将感兴趣的扩展名作为一行程序获取文件 %对于倍频程用户,{:}的语法糖可用 filetext=filesfind[cellfun@x~isemptystrfindx,['.'ext],文件,'UniformOutput',false{:}] 这是输出:

档案= { [1,1]=text1.txt [2,1]=text2.txt [3,1]=image1.png [4,1]=image2.jpg [5,1]=audio1.mp3 [6,1]=音频2.mp3 } 临时工= { [1,1] = 1 [2,1] = 1 [3,1] = 0 [4,1] = 0 [5,1] = 0 [6,1] = 0 } idx= 1 2 文件文本= { [1,1]=text1.txt [2,1]=text2.txt } 文件文本= { [1,1]=text1.txt [2,1]=text2.txt } 由于我目前使用的是倍频程,我不能保证一行程序可以在MATLAB上工作。也许有人可以确认一下。无论如何,一步一步的解决方案应该按照预期的方式工作

希望有帮助

编辑:同样,使用这种方法时,双文件扩展名(如x.txt.png)可能会造成问题。

使用fileparts或regexp将是最简单的

% mock data
files = {'a.txt', 'b.png', 'c.txt', 'd.txt.pdf'}; % note d is actually a .pdf file
target = '.txt';
fileparts的第三个输出是文件扩展名,因此

% option 1 - fileparts
[~,~,ext] = cellfun( @fileparts, files, 'uni', 0 );
files = files( strcmp( target, ext ) );
regexp选项比strfind更健壮,因为您可以确保扩展位于字符串的末尾

% option 2 - regexp ('$' to specify end of string)
files = files( ~cellfun( @isempty, regexp( files, [target, '$'], 'once' ) ) );

你能提供一个例子,以及所需的输出吗?一个线性函数与MATLAB不兼容,你需要{:}运算符的中间变量。@Wolfie这正是我所想的,但我不确定是否已经添加到MATLAB中。如果重要的话,你可以使用一个线性函数