2010-10-26 199 views
13

我在MAT文件中有一个大的结构。我想检查结构中是否存在特定的字段,而不是加载MAT文件,因为内容非常大,我想最大限度地减少内存使用。如何在不加载MATLAB的情况下检查MAT文件的内容?

这是可能的,或者我必须在下面的例子?:

load('test.mat');    %# Load the MAT-file 
tf = isfield(s,'fieldname'); %# Check if structure s has field 'fieldname' 

回答

22

要检查MAT文件的内容,而无需加载它,使用:

vars = whos('-file','test.mat') 
ismember('fieldname', {vars.name}) 
+0

确实为'test.mat'内部结构领域的工作? – Jonas 2010-10-26 18:43:52

+0

@Jonas:上面的代码只检查变量名称。所以就像你在回答中提到的那样,用户应该在保存到MAT文件时使用SAVE的'-struct'选项将结构字段拆分成单独的变量。 – Amro 2010-10-26 18:48:37

+2

@Jonas:否则,如果用户真的关心内存使用,我们可以简单地将字段名与实际的MAT文件一起写入单独的文本文件,然后在加载实际结构之前根据需要加载并检查文本文件数据 – Amro 2010-10-26 18:55:46

6

首先希望加载它,据我所知,你要加载的文件,以便能够检查是否保存结构包含特定的字段。

但是,如果使用'-struct'-option保存.mat文件,它会将字段拆分为.mat文件中的单独变量。你可以通过调用

myStructure = load('test.mat'); 

保存重新结构这种方式,您还可以测试使用@Amro的做法(这是比我之前建议清洁很多)的字段(变量)是否存在。

相关问题