1

这个问题是关于dirmatlab 中的命令的。

前言

我有一组文件: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”命令级别指定所需的范围。有什么建议么?提前谢谢了!!

4

2 回答 2

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)
于 2013-09-09T19:55:00.223 回答
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);
于 2013-09-09T22:13:21.383 回答