Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 动态结构参考,添加字段时出错_Matlab_Dynamic_Struct_Field - Fatal编程技术网

Matlab 动态结构参考,添加字段时出错

Matlab 动态结构参考,添加字段时出错,matlab,dynamic,struct,field,Matlab,Dynamic,Struct,Field,我对MATLAB相当陌生。我有一个函数,它输出一个结构。我从一个没有字段的struct开始,然后在浏览整个文本文件时添加字段 以下是我的一些代码: tline = fgetl(fid); test = struct; name = 'ignore'; curr = []; while ischar(tline) ... test.(name) = curr; ... tline = fgetl(fid); end name和curr多次更改,但name始终是字符

我对MATLAB相当陌生。我有一个函数,它输出一个
结构
。我从一个没有字段的
struct
开始,然后在浏览整个文本文件时添加字段

以下是我的一些代码:

tline = fgetl(fid);
test = struct;
name = 'ignore';
curr = [];
while ischar(tline)
    ...
    test.(name) = curr;
    ...
    tline = fgetl(fid);
end
name
curr
多次更改,但
name
始终是字符串,
curr
始终是数组。我得到一个错误
“动态结构引用的参数必须计算为有效的字段名。”
,因为行
test.(name)=curr


我在命令行中尝试了相同的代码,效果很好。我真的不确定为什么它不起作用。提前感谢您的帮助

您可以尝试使用
eval
来评估特定的兴趣行。
eval
将做的是,它获取一个字符串,并实际计算MATLAB命令提示符中该字符串的内容。例如,如果在命令提示符下键入
s=1:5
,则可以对
eval
执行相同的操作:
eval('s=1:5')。这是非常无害的,但是如果您想要创建一个命令,其中有一组经常动态更改的字符串,那么
eval
非常好

另外,
(名称)
周围的括号没有任何意义。看起来你正在尝试调用一个函数,而实际上你没有

因此,请尝试这样做:

tline = fgetl(fid);
test = struct;
name = 'ignore';
curr = [];
while ischar(tline)
    ...
    str = ['test.' name ' = curr;'];
    eval(str);
    ...
    tline = fgetl(fid);
end
此代码将要做的是,它将使用
name
中的字符串指定的字段添加到
struct
,并使用存储在
curr
中的数组分配此字段


希望能做到

当代码失败时,了解
name
是什么会很有趣。如果出现错误,可以将以下内容添加到脚本
dbstop中,然后将其释放。出现错误时,调试器将在生成错误的行停止。也许在那个迭代中名称值有些奇怪……另外,如果您使用
ischar(tline)
来确定您是否在文件末尾,另一种选择是
~feof(fid)
(用于文件末尾)。请注意,我能够让您的代码正常运行(从某个文件读取,在while循环的每次迭代中创建不同的字段)。错误消息是否说这是导致问题的行?是否在其他上下文中使用过
name
test
?我可以很容易地使用
cos.(34)
生成相同的错误消息。