《量化投资:以MATLAB为工具》

MATLAB技术论坛

 找回密码
 注册账号
查看: 1180|回复: 4
收起左侧

[提问] 动态改变结构体数据域中的值,求高手

[复制链接]
发表于 2013-8-28 20:51:14 | 显示全部楼层 |阅读模式
朋友们,最近在弄肌电信号处理,编制MATLAB界面程序,有个问题看似简单其实弄了好多天都没有进展,希望高手帮帮忙啊。

具体问题描述如下(大体要实现的功能),
动态结构体数据存储赋值,如我定义了类似如下的几个结构数组
aa.bb.cc=1;
aa.bb.dd=2;
....
aa.bb.ee=10;

我现在要根据获得的字符路径动态地存储或者改变最后一个域中的值,
如第一个文本框字符为-txt1
如第二个文本框字符为-txt2
如第三个文本框字符为-txt3
[txt1 '.' txt2 '.' txt3]  得到要改变的值的路径,
哪位高手能解决这个难题呢
非常感谢。
发表于 2013-8-29 11:07:11 | 显示全部楼层
  1. st = struct('num', 10, 'string', 'helloWorld')
  2. num = eval(['st', '.', 'num', ';'])
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-29 11:20:34 | 显示全部楼层
本帖最后由 lambert 于 2013-8-29 11:33 编辑
baby_wolf 发表于 2013-8-29 11:07


你上面这个代码是获得结构中的域中的数据,st.num=10(上面运行结果),我的想法是根据字符'num'改变st.num中的值,如令st.num=20,并不影响其他域中的值

下面函数可以实现具有两层的结构,如你上面定义的可以用下面实现,
st=setfield(st,'num',20)   可以改变,

但三层或者三层以上的如何实现呢?
如st.num.sub=100;
如何根据字符'num' 'sub' 来改变其中的值100

非常感谢回复
回复 支持 反对

使用道具 举报

发表于 2013-8-29 11:40:47 | 显示全部楼层
lambert 发表于 2013-8-29 11:20
你上面这个代码是获得结构中的域中的数据,st.num=10(上面运行结果),我的想法是根据字符'num'改变st.n ...

看到我代码中的关键函数eval,改变域值,道理不是一样的吗?
  1. st.num.sub = 100;
  2. eval(['st', '.num', '.sub' '=' num2str(200)])
  3. st.num.sub
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-29 12:00:26 | 显示全部楼层
本帖最后由 lambert 于 2013-8-29 12:02 编辑
baby_wolf 发表于 2013-8-29 11:40
看到我代码中的关键函数eval,改变域值,道理不是一样的吗?


你好,我用另一种方法问题也解决了,如下分享一下。不过还是非常感谢。

>> a.b.c=10;
>> a.b.d=20;
>> a.('b')

ans =

    c: 10
    d: 20

>> a.('b').('c')=25;
>> a.b

ans =

    c: 25
    d: 20

>> a.('b').('f')=33;
>> a.b

ans =

    c: 25
    d: 20
    f: 33
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|网站地图|MATLAB技术论坛|Simulink仿真论坛 ( 蜀ICP备19014457号 

GMT+8, 2020-11-27 11:33 , Processed in 0.055657 second(s), 11 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表