将多个结构字段保存为单独的mat文件并创建目录不存在的目录

时间:2017-11-30 15:29:50

标签: matlab

我的查询分为两部分 1)如何将不同的结构字段保存为单独的文件(每个文件只包含命名的结构字段)? 2)当中间目录不存在时,强制save命令在保存路径中创建目录?

第一部分:

data.a.name='a';
data.a.age=5;
data.b.name='b';
data.b.age=6;
data.c.name='c';
data.c.age=7;
fields=fieldnames(data);
for i=1:length(fields)
    save(['E:\data\' fields{i} '.mat'],'-struct','data');
end

我想将struct数据的每个字段保存为单独的.mat文件。因此,在执行循环后,我应该在E:\ data viz中有3个文件。 a.mat,b.mat和c.mat和a.mat只包含字段' a的数据,b.mat只包含字段' b'的数据。等等。

当我执行上面的代码时,我在目录中得到三个文件,但每个文件包含所有三个变量a,b和c的相同内容,而不是每个文件中的单个变量。

以下命令不起作用:

for i=1:length(fields)
    save(['E:\data\' fields{i} '.mat'],'-struct',['data.' fields{i} ]);
end

Error using save
The argument to -STRUCT must be the name of a scalar structure variable.

有没有办法使用save命令来实现我的目的,而不必创建临时的vaiables来保存每个字段?

第二部分:

我有大量需要存储在目录结构中的文件。我想继续工作。

test='abcdefgh';
save(['E:\data\' test(1:2) '\' test(3:4) '\' test(5:6) '\result.mat'])

但它显示以下错误

Error using save
Cannot create 'result.mat' because 'E:\data\ab\cd\ef' does not exist.

如果没有任何中间目录,则应通过save命令创建它们。我可以使用exists命令检查目录是否存在,然后使用mkdir创建目录,从而使这部分工作。我想知道是否有某种方法强制保存命令使用我不知道的一些参数来完成工作。

1 个答案:

答案 0 :(得分:2)

save的字段输入参数错误。根据文档,格式为:

'-struct',structName,field1,...,fieldN

所以适当的save语法是:

data.a.name='a';
data.a.age=5;
data.b.name='b';
data.b.age=6;
data.c.name='c';
data.c.age=7;

fields = fieldnames(data);
for ii = 1:length(fields)
    save(['E:\data\' fields{ii} '.mat'], '-struct', 'data', fields{ii});
end

不,你不能强迫save生成中间目录。首先检查是否存在保存路径,并在必要时创建它。