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

Matlab 将多个结构字段保存为单独的mat文件,并创建不存在的目录,matlab,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\' fi

我的问题有两部分 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命令来实现我的目的,而不必为保存每个字段创建临时变量

第二部分:

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
我有大量需要存储在目录结构中的文件。我想工作

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命令创建它们。通过使用exist命令检查目录是否存在,然后使用mkdir创建目录,我可以让这部分工作。我想知道是否有某种方法可以强制save命令使用我不知道的参数来完成工作。

您的
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
生成中间目录。首先检查保存路径是否存在,必要时创建它。

保存的字段输入参数错误。根据文件,格式为:

'-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
生成中间目录。首先检查是否存在保存路径,必要时创建保存路径。

如果您有两个完全无关的问题,请提出两个问题。如果您有两个完全无关的问题,请提出两个问题。