maanantai 25. elokuuta 2008

Rekursiivinen hakemistolistaus MATLABissa

Kotikutoinen rekursiivinen hakemistolistaus MATLABissa. Esimerkki käytöstä:
>> pwd

ans =

D:\Ohjelmistot\MATLAB\R2008a\bin

>> s = rlsdir('.');
>> s.name

ans =

.\registry


ans =

.\util


ans =

.\win32


ans =

.\util\mex


ans =

.\win32\accessible


ans =

.\win32\codecs


ans =

.\win32\imageformats


ans =

.\win32\ipp20


ans =

.\win32\mbuildopts


ans =

.\win32\mexopts

>> s = rlsdir('registry');
>> s.name
>> s = rlsdir('util');
>> s.name

ans =

util\mex

>>

Toiminta perustuu oletukseen, että hakemistot . ja .. ovat ensimmäisenä listassa. Tämä ei toteudu ainakaan silloin, jos hakemisto(i)ssa on tiedostoja, jotka alkavat #:lla. Esimerkiksi Emacs jättää jälkeensä tällaisia tiedostoja.

Koodi (jota saa käyttää vapaasti):

function dirs = rlsdir(root)

% DIRS = RLSDIR(ROOT)
% Returns a recursive listing of subdirectories of ROOT in structure DIRS
% similar to that returned by the built-in function DIR. The pathname of
% the NAME field of the structure DIRS is given relative to ROOT.

temp = dir(root); % List the root dir
temp(1:2)=[]; % Remove this directory (.) and upper level (..)
n = 1;
for n = 1:length(temp) % Loop through directories and files
if temp(n).isdir == 1 % If a directory is found ...
temp(n).name = [root '\' temp(n).name]; % concatenate the root level
temp = [temp; rlsdir(temp(n).name)]; % directory name and the newly
end % found directory to a
end % temporary variable and list
m = []; % the contents of the new dir.
for n = 1:length(temp) % Remove all non-directories from the temporary
if temp(n).isdir == 0 % variable.
m = [m ; n];
end
end
temp(m) = [];
dirs = temp; % Return the temporary variable.

end

Ei kommentteja: