基于MATLAB中的字符串值读取excel文件的特定部分

基于MATLAB中的字符串值读取excel文件的特定部分,matlab,strcmp,xlsread,Matlab,Strcmp,Xlsread,我有一个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{

我有一个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=lengthzn'个矩阵,这些矩阵表示第4列中不同字符串的数据,因此我可能需要一个结构;我只是不知道该怎么做。有没有办法解决这个问题?谢谢

没有测试它,但这应该有助于您继续:

编辑:更正了对原始向量的错误索引。此外,根据您可能希望限制原始矩阵行的格式。根据你的问题,我假设选择器=raw3:end,4;数据=raw3: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函数的setOrderparameter并将其设置为“稳定”