在matlab中以字符串形式获取字段名
我从matlab参考手册中得到了这个在matlab中以字符串形式获取字段名,matlab,struct,Matlab,Struct,我从matlab参考手册中得到了这个 value=getfield(结构,'field') 其中struct是一个1乘1结构,返回指定字段的内容,相当于 value=struct.field 我怎么能做相反的事呢 getStringName(struct.field),返回'field' 也可以用类似于阵列的数值方式指向场 类似于字段1的结构{1}field 编辑 如果我做下面的事 结构名称(1) 我得到一个字段名和维度的列表 Speed: [2244x1 dou
value=getfield(结构,'field')
其中struct是一个1乘1结构,返回指定字段的内容,相当于
value=struct.field
我怎么能做相反的事呢
getStringName(struct.field),返回'field'
也可以用类似于阵列的数值方式指向场
类似于字段1的结构{1}field
编辑
如果我做下面的事
结构名称(1)
我得到一个字段名和维度的列表
Speed: [2244x1 double]
Time: [2244x1 double] ... and so on
我想抓住标题速度作为字符串,如果可能的话
structName(1).field(1)表示速度,但不执行structName(1).Speed
我想将每个字段打印到一个带有字段名的文件中
所以如果我这样做了
for i=1:sizeOfStruct
printToFile(structName(i)); %<=== accessing field by index, problem 2
end
function printToFile(structField)
structFieldStr = getStrFiledName(structField); %<=== obtain field string, main problem
filename = strcat(fileLoc, '/profile/', structFieldStr, '.dat');
%... then open file and dump everything
end
i=1时的:sizeOfStruct
printToFile(结构名(i));% 这不是你问题的完整答案,但这应该让你开始:
s.a = 11;
s.b = 22;
s.c = 33;
names = fieldnames(s);
for i = 1:length(names)
fprintf('Field %s = %g\n', names{i}, s.(names{i}))
end
结果:
Field a = 11
Field b = 22
Field c = 33
请注意以编程方式访问字段名的语法:s.(name)
,其中s
是一个结构,name是一个字符串。不是问题的完整答案,但这应该让您开始:
s.a = 11;
s.b = 22;
s.c = 33;
names = fieldnames(s);
for i = 1:length(names)
fprintf('Field %s = %g\n', names{i}, s.(names{i}))
end
结果:
Field a = 11
Field b = 22
Field c = 33
请注意以编程方式访问字段名的语法:s.(name)
,其中s
是一个结构,name是一个字符串。除非它出现在赋值的左边,struct.field
只是一个值,例如2.5
,并且不再与结构对象有任何关联。函数是否给出了您想要的结果,或者您正在尝试查找包含特定值的字段?您也可以尝试,不确定这是否适用于结构成员FieldNames给了我一个部分,剩下的是按其位置或字段名称抓取该字段除非它出现在赋值的左侧,struct.field
只是一个值,例如2.5
,并且不再与struct对象有任何关联。函数是否给出了您想要的,或者您是否正在尝试查找包含特定值的字段?您也可以尝试,不确定这是否适用于结构成员fieldnames给了我一个部分,剩下的是按其位置抓取该字段,或者字段名引用不存在的字段“fieldnames”。如果我尝试使用s.fieldnames,会出现错误,但是我使用了字段名,但是s.(name)仍然不能工作“未定义的函数或变量“a”。“对不起,我仍然在编辑一些错误,现在应该可以工作了。”。这就是发布未测试代码时得到的结果…引用不存在的字段“fieldnames”。如果我尝试使用s.fieldnames,会出现错误,但是我使用了字段名,但是s.(name)仍然不能工作“未定义的函数或变量“a”。“对不起,我仍然在编辑一些错误,现在应该可以工作了。”。这就是您在发布未经测试的代码时得到的结果。。。