2016-09-03 5 views
0

セルコンテンツ(文字列)がdataである場合、文字列(764x1セル)のセル配列と、そのセルのインデックスを別のセル配列の文字列data(269x1)で埋めようとしています。私はそうするために、次のコードを書いた:文字列のセル配列を、別の文字列配列のセルのインデックスで埋める方法はありますか?

for i=1:length(attributes) 
    for j=1:length(data) 
     attributes{i,1}=strfind(data{j,1}, attributes{i,1}); 
    end 
end 

私は空のセルを取得しています:

inedx

答えて

0

あなたが内部ループの最初の反復でattributesを上書きされています

例:

最初のiteratio内部ループj = 2の最初の反復後
attributes{1} = 1

:内部ループj = 1のN
attributes{1} = []

前の反復からattributes{1} = 1ので。
attributes{i} = strfind(data{j}, attributes{i});
attributes{1} = strfind(data{2}, 1);
データ{2}に1が見つかりませんでした。あなたはおそらくやる意味は何

、次のコードのようなものです:

data{1} = 'aabbcc'; 
data{2} = 'bbaacc'; 
data{3} = 'ccaabb'; 

attributes{1} = 'aa'; 
attributes{2} = 'bb'; 
attributes{3} = 'cc'; 

%Initialize new 2D cell array. 
attrib_indexes = cell(length(attributes), length(data)); 

for i = 1:length(attributes) 
    for j = 1:length(data) 
     %Store result in attrib_indexes{i, j} instead of attributes. 
     attrib_indexes{i, j} = strfind(data{j}, attributes{i}); 
    end 
end 

私は、デバッガを使用して学習することをお勧めします、それがスタックオーバーフローで質問を投稿するよりも簡単だ...

0

あなたは一度にすべてのdataに見てone of the variants of strfindを使用することができます。

att_ind = cell(length(attributes),length(data)); % Initialize a result cell array 
for k = 1:length(attributes) 
    att_ind(k,:) = strfind(data, attributes{k}); 
end 

これはlength(attributes)行列になりますセル配列のように att_ind(k,n)attributes{k}のインスタンスであり、data{n}になります。そのようなインスタンスがない場合、att_ind(k,n)は空のセルです。

関連する問題