根据 MATLAB 中的字符串值读取 excel 文件的特定部分
Read specific portions of an excel file based on string values in MATLAB
我有一个 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 double”的东西,当我试图打开它时,我收到消息 "Cannot display summaries of variables with more than 524288 elements"。这可能很明显,但我试图获得的输出是 'N = length(zn)' 矩阵的数量,这些矩阵代表第 4 列中不同字符串的数据(所以我可能需要一个结构;我只是不知道如何让它起作用)。关于如何解决这个问题的任何想法?谢谢!
没有测试,但这应该可以帮助你开始:
编辑: 更正了对原始向量的错误索引。此外,根据格式,您可能还想限制原始矩阵的行。根据您的问题,我认为 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'
我有一个 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 double”的东西,当我试图打开它时,我收到消息 "Cannot display summaries of variables with more than 524288 elements"。这可能很明显,但我试图获得的输出是 'N = length(zn)' 矩阵的数量,这些矩阵代表第 4 列中不同字符串的数据(所以我可能需要一个结构;我只是不知道如何让它起作用)。关于如何解决这个问题的任何想法?谢谢!
没有测试,但这应该可以帮助你开始:
编辑: 更正了对原始向量的错误索引。此外,根据格式,您可能还想限制原始矩阵的行。根据您的问题,我认为 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'