2014-10-10 3 views
0

У меня есть функция в matlab (с оберткой, которая фактически вызывает функцию), которая рекурсивно находит все файлы .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

Просьба уточнить, в чем ваш вопрос, и опубликовать соответствующий код, который вы используете. Для этого измените ваш вопрос –

+0

Спасибо, я новичок в этом. – jdrudds

+1

Возможно, вы ищете что-то вроде [этого] (http://stackoverflow.com/a/2654459/1586200). Его можно легко изменить для определенного типа файла, в вашем случае '.mat'. –

ответ

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.

+0

Это работает так хорошо. Большое спасибо! – jdrudds

Смежные вопросы