2

いくつかの異なるフィールドを含む構造を作成しました。フィールドには、さまざまな被験者/参加者からのデータが含まれています。

スクリプトの冒頭で、次のように「サブジェクト番号」を入力するようにユーザーに求めます。

 prompt='Enter the subject number in the format SUB_n: ';
 SUB=input(prompt,'s');

例 34 番目のサブジェクトの SUB_34。

次に、この文字列が含まれるように構造体に名前を付けたい...つまり、構造体の名前をSUB_34SUB_34.field1などにします。しかし、これを行う方法がわかりません。

呼び出されSたい場合は、構造などの特定のフィールド名に文字列を割り当てることができることを知っていますfield1z

S=struct;
field1='z';
S.(field1);

機能しますが、構造名では機能しません。

誰でも助けることができますか?

ありがとう

4

1 に答える 1

7

という名前の構造を作成するのではなく、代わりに構造の配列を使用して、ユーザーにサブジェクト番号SUB_34を入力させることを強くお勧めします。

number = input('Subject Number')
S(number) = data_struct

次に、次を使用して簡単に見つけることができます。

subject = S(number);

本当にそれを主張する場合は、構造体を取得するために@Sembei によってコメントで提案された方法を使用できevalます。あなたは本当にこれをすべきではありませんが

S = eval([SUB, ';']);

または構造を設定するには

eval([SUB, ' = mydata;']);

これを行わない(多くの) 理由の 1 つは、プロンプトで次のように入力できるからです。

>> prompt = 'Enter the subject number in the format SUB_n: ';
>> SUB = input(prompt, 's');
>> eval([SUB, ' = mydata;']);

そして、次のように入力します。

clear all; SUB_34

これは、入力文字列をコマンドとして評価するため、すべてのデータが削除されるという予期しない結果をもたらします。evalユーザー入力を使用evalすることは、ユーザーが不正な形式または悪意のあるものを偶然またはその他の方法で書き込むことは決してないことを前提としています。

于 2016-07-19T15:10:20.033 に答える