matlab保存单元格数组

时间:2011-10-22 12:42:40

标签: matlab structure

我有一个不完全有效的脚本:

inputfield = input('您希望看到哪个字段:','s')

if isfield(package,inputfield)

 fprintf('The value of the %s field is: %c\n',inputfield,...
 eval(['package.' inputfield]))

否则      fprintf('错误:%s无效字段\ n',输入字段)

首先我在matlab中定义一个结构,然后在结构上使用脚本:

  
    

包=结构( 'ITEM_NO',123, '成本',19.99, '价格',39.95, '代码', 'G')

  

package =

item_no: 123
   cost: 19.9900
  price: 39.9500
   code: 'g'
  
    

structurevalue     您希望看到哪个字段:费用

  

inputfield =

成本

成本字段的值为:1.999000e + 001

  
    

structurevalue     您希望看到哪个字段:item_no

  

inputfield =

ITEM_NO

item_no字段的值为:{

  
    

  

为什么它无法读取item_no的值?

1 个答案:

答案 0 :(得分:1)

尝试:

fprintf('The value of the %s field is: %s\n',inputfield,...
    num2str(package.(inputfield)))

您的版本存在两个问题。

  1. 您将数字和字符串都传递到%c字符串中的fprintf字段。当小数进入时,它被解释为一个数字并以完全精度显示,这就是19.99显示为1.999000e + 001的原因。但是当一个整数进入时,它被解释为一个字符,这就是123显示为'{'(ASCII字符123)的原因。使用num2str将数字转换为字符串以供显示。另外,使用%s表示任意长度的字符串,而不是字符%c
  2. 一般情况下,除非必须,否则使用eval并不是一个好主意。在这种情况下,使用inputfield作为package的{​​{3}}会更方便。