2017-04-14 1 views
0

Excel 파일이 있고 4 열의 문자열 값을 기반으로 읽어야합니다. 나는 다음을 작성했지만 제대로 작동하지 않습니다MATLAB의 문자열 값을 기준으로 Excel 파일의 특정 부분을 읽습니다.

[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 번째 열의 다른 문자열에 대한 데이터를 나타냅니다. (그래서 구조체가 필요할 수 있습니다. 그것을 작동시키는 법을 아십시오). 이 문제를 어떻게 해결할 수 있을지에 대한 아이디어가 있습니까? 감사!

답변

0

는 테스트하지 못했지만, 이것은 당신이 가야 도움이 될 것입니다

편집 : 원시 벡터에 수정 잘못된 색인. 또한 형식에 따라 원시 행렬도 제한 할 수 있습니다. 귀하의 질문에서, 나는 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 함수의 setOrder 매개 변수를 사용하고 'stable'

으로 설정하세요.
관련 문제