2017-04-14 114 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可能會更改字符串值的順序。如果這對您是個問題,請使用unique函數的setOrder參數並將其設置爲'stable'

相關問題