这个问题与matlab中的dir
命令有关。
PREAMBLE
我有一组文件: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”命令级别指定所需的范围。
有什么建议?非常感谢提前!!
答案 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)
答案 1 :(得分: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);