【问题标题】:getting field name as a string in matlab在matlab中将字段名称作为字符串获取
【发布时间】:2013-09-30 03:54:51
【问题描述】:

我有这个来自 matlab 参考手册

value = getfield(struct, '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).filed(1) 为 Speed 不做 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

【问题讨论】:

  • 除非它出现在赋值的左侧,否则struct.field 只是一个值,例如2.5,不再与结构对象有任何联系。
  • fieldnames 函数是否给出了您想要的,或者您是否试图找到包含某个值的字段?你也可以试试inputname,不知道是否适用于结构成员
  • fieldnames 给了我一个部分,剩下的就是通过它的位置或字段名称来抓取该字段

标签: matlab struct


【解决方案1】:

不是您问题的完整答案,但这应该可以帮助您入门:

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 是结构,名称是字符串。

【讨论】:

  • 对不存在的字段“fieldnames”的引用。是我尝试 s.fieldnames 时得到的错误,但是我使用了 fieldnames,但是 s.(name) 仍然无法工作'未定义的函数或变量'a'。
  • 对不起,我还在编辑一些错误,现在应该可以了。这就是发布未经测试的代码时得到的结果...
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 2022-11-11
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2011-11-22
相关资源
最近更新 更多