Matlab中的递归函数返回列表

时间:2014-10-10 19:33:05

标签: matlab recursion

我在matlab中有一个函数(带有一个实际调用函数的包装器),递归地找到计算机上给定HDD中的所有.mat文件。在每次返回时,它都会提供特定文件夹中的文件,因此,由于驱动器上有数百个文件夹(按日期组织),因此有数百个返回。

我试图制作这些文件的一个列表(或矩阵),以便另一个脚本可以使用此列表来完成它的工作。

实际返回是结构列表(包含文件信息的字段)。 返回总是一个宽,一个长度取决于文件夹中的文件数。

简而言之,我想知道如何获取递归函数的所有返回值并将它们放入一个列表/矩阵中。

任何提示将不胜感激! 谢谢

function direc = findDir(currentDir)

dirList = dir(currentDir);
if 2 == length(dirList)
    direc = currentDir
    files = dir([currentDir '*.mat'])


    return 
end

dirList = dirList(3:length(dirList));
fileListA = dir([currentDir '*.mat']);

if 0==isempty(fileListA)
    direc = currentDir
    files = dir([currentDir '*.mat'])


    return 

end

for i=1:length(dirList)
    if dirList(i).isdir == 1

        [currentDir dirList(i).name '\'];

        findDir([currentDir  dirList(i).name '\']);

end

end


end

1 个答案:

答案 0 :(得分:0)

您可以使用filesttrib,它以递归方式搜索所有文件,并输出一个结构数组,其中包含有关这些文件的信息。然后删除文件夹,并仅保留名称以'.mat'结尾的文件。

要检查文件名是否以'.mat'结尾,请使用regexp。请注意,如果字符串name(end-3:end)=='.mat'太短,则name之类的直接比较将失败。

currentDir = 'C:\Users\Luis\Desktop'; %// define folder. It will be recursively 
%// searched for .mat files
[~, f] = fileattrib([currentDir '\*']); %// returns a structure with information about
%// all files and folders within currentDir, recursively
fileNames = {f(~[f.directory]).Name}; %// remove folders, and keep only name field
isMatFile = cellfun(@(s) ~isempty(regexp(s, '\.mat$')), fileNames); %// logical index
%// for mat files
matFileNames = fileNames(isMatFile);

变量matFileNames是字符串的单元格数组,其中每个字符串都是.mat文件的全名。