【问题标题】:Loading excel files in structures在结构中加载 excel 文件
【发布时间】:2017-03-30 03:44:42
【问题描述】:

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

parentstructure.filename.value{} 

其中 parentstructure 是一个主要结构,filename 是一个 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 中,但不是我想要的结构形式。我尝试了其他几种组合和调整,但出现错误。任何帮助或指导将不胜感激。谢谢

【问题讨论】:

    标签: excel matlab matlab-deployment matlab-struct


    【解决方案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
    

    【讨论】:

    • 它工作并加载了数据。但现在的问题是文件没有按顺序加载。这是因为文件名以数字开头,例如1.xls、2.xls 等。但是在一个结构中,matlab 的排列方式就像 1.xls,10.xls,11.xls... 2.xls,3.xls ..... 有什么方法可以让 matlab 按顺序读取文件而不是调整它们?这很重要,因为我的其余代码都依赖于此。
    • @Muhammad 我在上面的代码中添加了排序部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-02
    相关资源
    最近更新 更多