来自Matlab变量的结构名称

Mah*_*qui 2 string variables matlab struct matlab-struct

我创建了一个包含几个不同字段的结构.这些字段包含来自许多不同主题/参与者的数据.

在脚本的开头,我提示用户输入"主题编号",如下所示:

 prompt='Enter the subject number in the format SUB_n: ';
 SUB=input(prompt,'s');
Run Code Online (Sandbox Code Playgroud)

第34个主题的示例SUB_34.

我想命名我的结构,使它包含这个字符串......即我想要我的结构名称SUB_34,例如SUB_34.field1.但我不知道该怎么做.

我知道你可以为特定的字段名称分配字符串,例如,S如果我想要field1被调用,z则可以为结构分配字符串

S=struct;
field1='z';
S.(field1);
Run Code Online (Sandbox Code Playgroud)

但它不适用于结构名称.

有人可以帮忙吗?

谢谢

Sue*_*ver 7

而不是创建名为SUB_34I的结构,强烈建议仅使用结构数组,并让用户只需输入主题编号.

number = input('Subject Number')
S(number) = data_struct
Run Code Online (Sandbox Code Playgroud)

然后您可以使用以下命令再次找到它:

subject = S(number);
Run Code Online (Sandbox Code Playgroud)

如果你真的坚持它,你可以使用@Sembei评论中提出的方法eval来获取结构.你真的不应该这样

S = eval([SUB, ';']);
Run Code Online (Sandbox Code Playgroud)

或者设置结构

eval([SUB, ' = mydata;']);
Run Code Online (Sandbox Code Playgroud)

这样做的一个(很多)原因是我可以在你的提示符下输入以下内容:

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

我输入:

clear all; SUB_34
Run Code Online (Sandbox Code Playgroud)

由于将输入字符串作为命令进行求值,因此会产生无法预料的后果,即它会删除所有数据eval.使用eval用户输入假定用户是永远不会永远写的东西畸形或恶意,意外或其他原因.

  • 评论不适用于扩展讨论; 这个对话已经[转移到聊天](http://chat.stackoverflow.com/rooms/117732/discussion-on-answer-by-suever-struct-name-from-variable-in-matlab). (4认同)