我正在开发一个小项目,需要将大量数据导入到matlab中进行进一步处理。我目前有15个excel文件,每个文件有8张。我想要的是创建一个父结构,我希望将每个excel文件加载为一个结构,例如。
parentstructure.filename.value{}
其中parents结构是主结构,文件名是excel文件,它是父结构中的另一个结构,每个excel文件在单元格中有8个。
我写了一个小代码来将数据读入matlab。代码如下
srcdir = ''; %%% where all the files are placed
srcfiles = dir(fullfile(srcdir, '*.xls'));
for p = 1:numel(srcfiles)
filename = fullfile(srcdir, srcfiles(p).name);
[~,sheets] = xlsfinfo(srcfiles(p).name);
for i = 1:8
Sheet = char(sheets(1,i)) ;
value{p,i} = xlsread(filename,Sheet);
end
end
此代码工作正常并将数据加载到matlab中,但不是以我想要的结构形式加载。我尝试了其他几种组合和调整但却出错了。任何帮助或guuide将不胜感激。谢谢
答案 0 :(得分:2)
在您发布的代码中,您实际上尚未创建struct
。您可以使用struct
关键字执行此操作。然后,为了将每个文件分配到filename
字段,您需要使用genvarname
(或matlab.lang.makeValidName
)将文件名转换为有效字段名称并指定结构到此。
% Initialize Parent Structure
parentStructure = struct();
srcdir = ''; %%% where all the files are placed
srcfiles = dir(fullfile(srcdir, '*.xls'));
% Sort the files by numbers in their names
numbers = regexp({srcfiles.name}, '\d+', 'match');
numbers = str2double(cat(1, numbers{:}));
[~, sortind] = sort(numbers);
srcfiles = srcfiles(sortind);
for p = 1:numel(srcfiles)
% Convert filename to a valid field name
fieldname = matlab.lab.makeValidName(srcfiles(p).name);
filename = fullfile(srcdir, srcfiles(p).name);
[~,sheets] = xlsfinfo(filename);
value = cell(1,8);
for k = 1:8
Sheet = char(sheets(1,k)) ;
value{k} = xlsread(filename,Sheet);
end
% Now assign this struct of sheets to your parentStructure
parentStructure.(fieldname) = value;
end