2016-06-09 26 views
0

我正在处理一个小型项目,这需要将大量数据导入到matlab中进行进一步处理。我目前有15个excel文件,每个文件有8张。我想要的是制作一个父结构,我要将每个excel文件加载为一个结构,例如在结构中加载excel文件

parentstructure.filename.value{} 

凡parentstructure是主要结构和文件名是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将不胜感激。谢谢

回答

1

在你发布的代码中,你并没有真正创建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 
+0

它的工作和数据加载。但现在的问题是文件没有按顺序加载。这是因为文件名称以数字编号开始,例如1.xls,2.xls等等。但在结构matlab安排是像1.xls,10.xls,11.xls ... 2.xls,3.xls的方式.....有没有什么办法使matlab顺序读取文件,而不是调整它们?这点很重要,因为我的代码的其余部分依赖于此。 – Muhammad

+0

@Muhammad我已将排序部分添加到上面的代码 – Suever

+0

thanx @Suever它现在好了 – Muhammad