首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MATLAB中根据字符串值读取excel文件的特定部分

在MATLAB中根据字符串值读取excel文件的特定部分
EN

Stack Overflow用户
提问于 2017-04-14 23:46:16
回答 1查看 81关注 0票数 0

我有一个excel文件,我需要根据第4列中的字符串值来读取它。我写了以下几篇文章,但并没有正确地发挥作用:

代码语言:javascript
复制
[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列中不同字符串的数据(所以我可能需要一个结构;我只是不知道如何使它工作)。我有什么办法解决这个问题吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-15 05:37:27

没有对其进行测试,但这将帮助您开始工作:

编辑:将错误的索引更正为原始向量。此外,取决于您可能希望限制原始矩阵的行的格式。从你的问题中,我认为像selector = raw(3:end,4);data = raw(3:end,10:19);这样的东西应该是正确的。

代码语言:javascript
复制
[~,~,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函数的unique参数并将其设置为'stable'

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43420619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档