2013-09-09 2 views
1

Этот вопрос относится к команде dir в matlab.Список конкретных файлов в каталоге с использованием команды `dir` в matlab

Преамбула

У меня есть набор файлов: 01.dat, 02.dat, 03.dat, ..., 20.dat. Когда я ввожу в командной строке: dir('*.dat'), я увижу все мои файлы. Если я хочу выбрать только определенные файлы в диапазоне [01-09], я наберу dir('0*.dat').

ВОПРОС

Предположим, мне нужно выбрать только те файлы, которые находятся в определенном диапазоне, а именно: 03.dat, 04.dat, 05.dat, 06.dat. Как это сделать с помощью dir?

Мне нужно что-то наподобие dir('0[3:6].dat'). Я хочу избежать использования a=dir('*.dat'); a(3:6).name; по некоторым причинам, связанным с набором данных. Итак, я хочу указать желаемый диапазон только на уровне команды «dir». Любые предложения? Спасибо заранее!!

ответ

2

Функция dir может быть связано с arrayfun: он будет применять команду dir к каждый элемент вектора, например 3:6. Здесь имена файлов будут относиться к четырем файлам от 03.dat до 06.dat.

Псевдо-код dir('0[3:6].dat') может быть переведено:

filenames = arrayfun(@(x) dir(['0' num2str(x) '.dat']), 3:6); 
+0

Идеальное решение !!! Спасибо !!! :) –

4

Вы можете использовать регулярные выражения в MATLAB, чтобы отфильтровать то, что вы хотите. Это не идеально, но дает достойные результаты.

Следующий код вытаскивает 03.dat, 04.dat, 05.dat, 06.dat файлы:

listing = dir('*.dat'); 
pattern = '0[3-6].dat'; 

% this is kind of crude, but works: use regexp then pull out all the 
% non-matching ones with a call to isempty(...) 
notMatching = cellfun(@isempty, regexp({listing.name}, pattern)) 

% Pull out the the ones that match: 
betterListing = listing(~notMatching) 
+0

Отличная идея! Мне интересно, почему Matlab не имеет встроенной функции, которая делает это. Спасибо, в любом случае! P.S. Я бы отредактировал: pattern = '0 [3: 6] .dat'; –

+0

Ну, мое необязательное решение: a = dir ('01 .dat '); % временная запись для i = 3: 6 a (i-2) = dir (sprintf ('0% d.dat', i)); конец; Результирующий массив - это то, что я хотел. Но это также не идеально :( –