2014-10-10 36 views
0

我在matlab中有函數(帶有一個實際調用函數的包裝),遞歸地查找計算機上給定HDD中的所有.mat文件。在每次返回時,它都會給出特定文件夾中的文件,因爲驅動器上的數百個文件夾(按日期組織)有數百個返回。在Matlab中遞歸函數的返回列表

我想使這些文件的一個列表(或矩陣),以便另一個腳本可以使用此列表來完成它的工作。

實際返回結構列表(包含文件信息的字段)。 返回值總是一個寬度和一個長度,具體取決於文件夾中有多少個文件。

總之,我想知道如何獲取遞歸函數的所有返回並將它們放入一個列表/矩陣。

任何提示將不勝感激! 謝謝

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 
+0

請澄清你的問題是什麼,併發布你使用的相關代碼。要做到這一點,編輯您的問題 – 2014-10-10 19:48:14

+0

謝謝,我是新手。 – jdrudds 2014-10-10 20:11:10

+1

也許您在尋找[this](http://stackoverflow.com/a/2654459/1586200)。修改特定類型的文件很容易,在你的情況下,'.mat'。 – 2014-10-10 20:17:26

回答

0

您可以使用​​,其搜索遞歸所有文件和輸出以及有關這些文件信息的結構數組。然後刪除文件夾,並只保留名稱以'.mat'結尾的文件。

要檢查文件名是否以'.mat'結尾,請使用regexp。請注意,如果字符串name太短,則直接比較name(end-3:end)=='.mat'將會失敗。

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文件的全名。

+0

這工作得很好。非常感謝你! – jdrudds 2014-10-13 14:37:28