2014-10-10 4 views
0

컴퓨터의 지정된 HDD에있는 모든 .mat 파일을 재귀 적으로 찾는 matlab에 함수가 있습니다 (실제로 함수를 호출하는 래퍼가 있음). 매번 반환 할 때 특정 폴더에있는 파일을 제공하므로 드라이브에있는 수백 개의 폴더 (날짜순으로 구성)에 수백 개의 반환이 있기 때문에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이 너무 짧으면 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

관련 문제