本周文件交换精选

我们最好的用户提交

MATLAB中的Glob文件搜索

内容

MATLAB中的Glob文件搜索

格雷格的本周是展开文件和目录名称的通配符通过彼得·范·登·比格拉尔

您希望列出文件夹中的所有文件,包括子文件夹中的文件。你们可以阅读MATLAB文档DIRLS

属性可以进行名称模式匹配'*'的性格。但您很快就会发现,为了在子文件夹中包含文件,必须递归地调用这些函数。

操作系统有这种能力的命令,为什么不MATLAB***

我不确定我能回答这个问题“为什么不是MATLAB?”,但彼得分享了一个极好的解决方案。我在自己的开发项目中使用过这种方法。

下面是一个在我的一个大型项目中找到所有matlab文件的例子:

一团(' C: \ X项目\ \永磁同步电动机\ Demo \ * * m’
C: \ X \ \永磁同步电动机\ Demo \ startDemo项目。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t0_initWorkFolder +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t1_openTestBench +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t2_importEnums +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t3_partitionData +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t4_multipleDictionaries +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + mac2015 \ t1_openTestBench +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + mac2015 \ t2_generateCodeAndCopyToParentProject +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + pcgF28035 \ t1_openTestBench +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + pcgF28035 \ t2_generateCodeAndCopyToParentProject +任务。米……

注意:* * *作为R2016b,DIR函数支持递归搜索。金宝app

什么是水珠?

glob是一种模式,它包括表示其他字符集的通配符。最著名的是“*”表示任意数量的任意字符。这是一个很好的定义这里下面是一些例子。

这是如何使用MATLAB中的DIR功能有什么不同?

在R2016b之前,DIR函数只能返回在搜索文件夹的根目录中找到的元素,而不能返回在子目录或子目录中找到的元素。

结果来自DIR在R2016a

现在,随着的R2016b,可以使用通配符在MATLAB中使用DIR函数执行递归搜索。

dir (' C: \ X项目\ \永磁同步电动机\ Demo \ * \ * m '
C:\X\Project\PMSM\Demo\+test runAllm runOnlyPcg。m runAllForBaselineF28035。m runShort。m runAllForBaselineF28069。C:\X\Project\PMSM\Demo\Common addCommonPath. m文件m removeCommonPath。m getCommonPath。启动。米……

然而,即使在R2016b中,DIR也不支持额外的glob特殊字符,如金宝app或者使用的字符集[]{}

查找所有以t开头,后跟一个字符和一个下划线的matlab文件。一团(' C: \ X项目\ \永磁同步电动机\ Demo \ * * \ t ? _ * m’查找所有以“t1_”,“t2_”或“t3_”开头的matlab文件一团(' C: \ X项目\ \永磁同步电动机\ Demo \ * * \ t[123] _ *打烊的
C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t0_initWorkFolder.m C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t1_openTestBench.m C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t2_importEnums.m C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t3_partitionData.m C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t4_multipleDictionaries.mC:\ X \项目\ PMSM \演示\ +任务\ + mac2015 \ t1_openTestBench.m C:\ X \项目\ PMSM \演示\ +任务\ + mac2015 \ t2_generateCodeAndCopyToParentProject.m C:\ X \项目\ PMSM \演示\ +任务\ + pcgF28035 \ t1_openTestBench.m C:\ X \项目\ PMSM \演示\ +任务\ + pcgF28035 \ t2_generateCodeAndCopyToParentProject.m C:\ X \项目\ PMSM \演示\ +任务\ + pcgF28035 \ t3_loadAndPlotHwData.m...

在R2016b中使用新的String类增强GLOB函数。

字符串已经成为MATLAB语言的一流公民。在R2016b之前,如果你想表示一组字符串,你必须使用a单元阵列字符数组(参见:cellstr).

GLOB函数返回一个cellstr(字符数组的单元格数组):

文件=一团(' C: \ X项目\ \永磁同步电动机\ Demo \ * * m’);文件(1:3)类(文件)类(文件{1})
C:\X\Project\PMSM\Demo\startDemoX m的C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t0_initWorkFolder +任务。X m的C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t1_openTestBench +任务。米的…

记住你必须使用{}提取单元格数组的元素时。

String类来拯救我们!

string(文件)class(文件)
"C:\X\Project\PMSM\Demo\startDemo. "X m " C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t0_initWorkFolder +任务。X m " C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t1_openTestBench +任务。X m " C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t2_importEnums +任务。X m " C: \ \项目\永磁同步电动机\ Demo \ \ + dataDictionary \ t3_partitionData +任务。m”……

我最喜欢的字符串功能是它可以字符阵列的单元阵列转换成字符串的数组。

现在可以开始应用常见的字符串方法了,比如包含endsWithbeginsWithextractBetween过滤和分析结果

hasF28035 =包含(文件,“F28035”);文件(hasF28035)
ans = 59×1 string array "C:\X\Project\PMSM\Demo\+task\+pcgF28035\t1_openTestBench. "项目X m " C: \ \ \永磁同步电动机\ Demo \ +任务\ + pcgF28035 \ t2_generateCodeAndCopyToParent……”项目“X C: \ \ \永磁同步电动机\ Demo \ \ + pcgF28035 \ t3_loadAndPlotHwData +任务。X m " C: \ \项目\永磁同步电动机\ Demo \ \ + pcgF28035 \ t4_openFloatingPointTestBench +任务。X m " C: \ \项目\永磁同步电动机\ Demo \ \ + prototypeF28035 \ t1_openTestBench +任务。m”……

可能的替代方法:使用操作系统命令

这并不一定会重现GLOB函数提供的所有功能。但它是我用来执行与GLOB类似功能的一种机制。

控件可以从MATLAB中应用操作系统命令系统函数。在Windows系统上,可以执行递归目录搜索下面是一个例子。

[~, files] = system(“dir / s / B C: \ X项目\ \永磁同步电动机\ Demo \ *打烊的
项目X文件= C: \ \ \永磁同步电动机\ Demo \ startDemo。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t0_initWorkFolder +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t1_openTestBench +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t2_importEnums +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t3_partitionData +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + dataDictionary \ t4_multipleDictionaries +任务。项目X m C: \ \ \永磁同步电动机\ Demo \ \ + mac2015 \ t1_openTestBench +任务。米……

的变量文件是单字符数组吗

S = size(files) c = class(files)
S = 1 129792 c = 1

你可以用STRSPLIT函数

文件= strsplit(字符串(文件))”
文件= 1513×1字符串数组 “C:\ X \项目\ PMSM \演示\ startDemo.m” “C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t0_initWorkFolder.m”“C:\ X\项目\ PMSM \演示\ +任务\ +数据字典\ t1_openTestBench.m “ ”C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t2_importEnums.m“” C:\ X \项目\ PMSM \演示\ +任务\ +数据字典\ t3_partitionData.m” ...

对这个条目有什么想法吗?

让我们知道这里

MATLAB®9.1发布

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。