2017-04-14 12 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個の要素を持つ変数の要約を表示することはできません取得します"それは明らかかもしれませんが、出力として取得しようとしているものは、4列目の異なる文字列のデータを表す行列の長さ(N = length(zn))です(したがって、おそらく構造体が必要です。それを動作させる方法を知っている)。どのように私はこれを修正することができるかに関する任意のアイデア?ありがとう!

答えて

0

はそれをテストしていないが、これはあなたが軌道に乗るに役立つはずです。

EDIT:生ベクターに間違ったインデックスを修正しました。また、フォーマットによっては、生のマトリックスの行も制限することができます。あなたの質問から、私は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'

に設定してください
関連する問題