【问题标题】:Read specific portions of an excel file based on string values in MATLAB根据 MA​​TLAB 中的字符串值读取 excel 文件的特定部分
【发布时间】:2017-04-14 23:46:16
【问题描述】:

我有一个 excel 文件,我需要根据第 4 列中的字符串值来读取它。我写了以下,但它不能正常工作:

[num,txt,raw] = xlsread('Coordinates','Centerville');

zn={};
ctr=0;
for i = 3:size(raw,1)
    tf = strcmp(char(raw{i,4}),char(raw{i-1,4}));
    if tf == 0
        ctr = ctr+1;
    end
    zn{ctr}=raw{i,4};
end

data=zeros(1,10); % 10 corresponds to the number of columns I want to read (herein, columns 'J' to 'S')
ctr=0;
for j = 1:length(zn)
    for i=3:size(raw,1)
        tf=strcmp(char(raw{i,4}),char(zn{j}));
        if tf==1
            ctr=ctr+1;
            data(ctr,:,j)=num(i-2,10:19);
        end
    end
end

它给了我一个“15129x10x22 双倍”的东西,当我尝试打开它时,我收到消息“无法显示超过 524288 个元素的变量摘要”。这可能很明显,但我想要得到的输出是'N = length(zn)'矩阵的数量,它们代表第 4 列中不同字符串的数据(所以我可能需要一个结构;我只是不知道如何使它工作)。关于如何解决这个问题的任何想法?谢谢!

【问题讨论】:

    标签: matlab strcmp xlsread


    【解决方案1】:

    没有测试它,但这应该可以帮助你开始:

    编辑:更正了原始向量的错误索引。此外,根据格式,您可能还想限制原始矩阵的行。根据您的问题,我认为 selector = raw(3:end,4);data = raw(3:end,10:19); 之类的内容应该是正确的。

    [~,~,raw] = xlsread('Coordinates','Centerville');
    
    selector = raw(:,4);
    data     = raw(:,10:19);
    
    [selector,~,grpidx] = unique(selector);
    
    nGrp = numel(selector);
    
    out  = cell(nGrp,1);
    for i=1:nGrp
        idx      = grpidx==i;
        out{i}   = cell2mat(data(idx,:));
    end
    

    out 是输出变量。这里的关键是变量grpidx,它是unique 函数的输出,允许您将唯一值追溯到它们在原始向量中的位置。请注意,我使用的unique 可能会更改字符串值的顺序。如果这对您来说是个问题,请使用unique 函数的setOrder参数并将其设置为'stable'

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2012-11-21
      • 1970-01-01
      相关资源
      最近更新 更多