2016-09-29 4 views
0

私は別のソフトウェアに渡すために変更したい.matファイル形式を持っています。 ファイルには4つのフィールドを持つ1x1構造体(name:data)があります。それらのうちの1つは、1つの15フィールドの構造体(名前:イベント)で、別の4つのフィールドがあります。私はこれらのフィールドを変更したい。 は例えば、最初のものは、私はさまざまな方法で変更しようとしたその '時間' です。構造体のフィールド値を変更する! <Matlab>

data.event.time=[1:15]; 

と私はエラーを取得する:

"Scalar structure required for this assignment" 

も試してみました:

data.event = setfield(data.event,'time',1:15); 

そして、得られた:

"Scalar structure required for this assignment. 

Error in setfield (line 33) 
    s.(deblank(strField)) = varargin{end};" 

私はMatlabの構造の仕組みを理解していないので、私の質問はちょっとばかげているかもしれませんが、それを使用するのは2回目です。

+0

その構造は何ですか?ここに情報がありません。 'a.b.c = [1:15]'を実行すると完全に動作するので、それはあなたがそのことを妨げている構造体に関するものです。 –

+0

申し訳ありませんが、「その構造は何ですか?」とはどういう意味ですか?欠けている情報が何かを意味しますか? – KnowsNothing

答えて

1

あなたは、おそらくこのを探しています:

for t=1:15 
    data.event(t).time=t; 
end 

あなたは構造体の複数の要素に割り当てるベクトルを持っている場合は、ループが最も簡単な方法です。

残念ながら、構造体の要素にベクトルの要素を直接割り当てる良い方法はありません。

ベクターをセルアレイに変更するとループが発生しなくても可能ですが、個人的には直観に反しています。すでにデニスJaheruddinによって提案

0

次のように、あなたはセル配列に変換し、組み込みdeal機能を使ってforループを回避することができます

timeCell = num2cell(1:15); 
[event.time] = deal(timeCell{:}); 

あなたneed to convert to a cell array、あなたは別のベクトルを使用したいので、要素をdeal関数の引数として使用します。

関連する問題