我想创建一个从“基本名称”中保存多个基本变量的脚本。我的尝试看起来像这样:
SELECT * FROM Items
WHERE (Balance > 0)
OR (Item Not Like '%XF%' AND Balance = 0)
这会保存文件,但保存在文件中的变量称为function [outargs] = save_with_basename(b)
basePath = 'C:\path\';
Var1 = evalin('base', [b '_1']);
Var2 = evalin('base', [b '_2']); % .. etc
for i=1:N
save([basePath b '_' int2str(i) '.mat'], ['Var' int2str(i)]);
end
end
(参见图片),但如果调用函数,我希望它被称为'Foo_1':
Var1
我认为save_with_basename('Foo');
的第二个参数与函数变量一起使用,所以看起来我必须动态更改它的名字(这可能不可能?),所以我想知道我是否有办法做到这一点。
感谢您的帮助!
答案 0 :(得分:4)
为了圣洁的一切,请不要这样做。
如果你真的需要,请请 请不要这样做。
如果你真的 必须想要,你确实需要使用动态变量(但现在这并没有太大的区别,是吗? ):
for i=1:N %what's N again?
evalin('base',['Var' num2str(i) '=' b '_' num2str(i)]);
evalin('base',['save([''' basePath b '_' num2str(i) '.mat''], [''Var' num2str(i) '''])']);
end
这基本上会执行
Var1 = "b"_1; %with whatever b is
Var2 = "b"_2;
...
save(['C:\path\b_1.mat'],['Var1']); %with whatever b is
save(['C:\path\b_2.mat'],['Var2']);
在您的基础工作区中,因此它将在那里生成Var*
个变量。把你的灵魂卖给魔鬼需要付出很小的代价。请注意,我可能错过了第二个evalin
中单引号的转义。