【问题标题】:Matlab name assignmentMatlab名称赋值
【发布时间】:2014-08-29 03:43:18
【问题描述】:

我正在尝试减少我前一阵子的一些大块 matlab 代码,并希望让它们更“干净”一些。

VarName2,VarName3,VarName4 ...等是由测量数据提供的,我会知道它们总是会是什么,因此我给了我名字 A,B ,C ,但我想改变的想法是第一个名称的一部分,所以每次我运行 .m 文件时,我都会使用 input('') 选项

其中 fname = 'SWAN' 和 A, B , C 是名称的第二部分,它们是常量。

fname = input ('enter name')

fname_A = VarName2
fname_B = VarName3
fname_C = VarName4

想要得到

SWAN_A = VarName2
SWAN_B = VarName3
SWAN_C = VarName4

谢谢

按照您的建议,我一直在尝试结构构造

S.name = input ('enter name of the data ".." ==')
S.A = A;
S.A(1,:)=[];
S.B = B;
S.B(1,:)=[];
S.C = C;
S.C(1,:)=[];
S.D = D;
S.D(1,:)=[];
S.E = E;
S.E(1,:)=[];

请问我是否也可以输入事物命令,以便我可以更改结构的名称?

在脚本前面加上S='west' 然后做

'S'.name = input ('enter name of the data ".." ==')
    S.A = A;

【问题讨论】:

  • 到底是什么问题?你不能简单地将fname_a 全部替换为SWAN_A 吗?
  • @George:不要这样做,改用元胞数组或结构:matlab.wikia.com/wiki/…blogs.mathworks.com/videos/2010/03/08/…(列表中的第一名)
  • @DennisJaheruddin 我正在这样做,但我想自动化这个过程有点烦人,不得不一直打开文件并更改名称
  • @DennisJaheruddin:不,OP 正在尝试分配在运行时定义名称的变量!我还是说不要那样做,在这种情况下使用结构来代替......
  • @George 你为什么想要这个?这似乎是一个非常糟糕的主意。您稍后在代码中使用 SWAN_A 等做什么?如果您在运行时命名它们,您打算以后如何使用它们?如果你以后不和他们一起工作,你为什么需要他们这样命名?我认为您应该在这里重新考虑代码的结构。

标签: matlab filenames rename


【解决方案1】:

以下是我可能会如何存储您正在处理的信息:

S.name = input ('enter name')
S.A = VarName2
S.B = VarName3
S.C = VarName4

如果你想多做几次:

for t=3:-1:1
  S(t).name = input ('enter name')
  S(t).A = VarName2
  S(t).B = VarName3
  S(t).C = VarName4
end

通过这种方式,您现在可以找到名为“swan”的结构:

idx = strcmpi({S.name},'SWAN')

【讨论】:

    【解决方案2】:

    你可以使用eval

    eval( sprintf('%s_A = VarName2;', fname ) );
    eval( sprintf('%s_B = VarName3;', fname ) );
    eval( sprintf('%s_C = VarName4;', fname ) );
    

    注意eval的用法是not recommended

    另一种选择可能是使用带有动态字段名称的结构:

    A.( fname ) = VarName2;
    B.( fname ) = VarName3;
    C.( fname ) = VarName4;
    

    现在你有了三个结构(ABC),A.SWAN 等于 VarName2B.SWAN 等于 VarName3 等。

    【讨论】:

    • 感谢它运行良好,正是我想要的,非常感谢
    • 我对 Shai 推荐的不良做法感到失望(即使有警告),你知道得更好:(
    • @George 不要这样做,使用单元格或结构。
    • @Amro 你是对的。真丢人!!我正要编辑我的答案以提出一种避免邪恶的实用方法eval...
    • 感谢@Shai 列出了经常被误用的eval 的替代方案,现在好多了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-18
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多