Matlab:将'who'输出作为参数传递

时间:2011-12-14 19:24:52

标签: matlab variables

我编写了一个函数,它接受输入变量的名称和值,并将它们写入文件。例如

a = 10;
b = 100;
writevars('file.txt',a,b);

给我一​​个文件file.txt,其中包含:

\def\a{\num{10}}
\def\b{\num{100}}

现在希望能够传递使用who命令找到的所有变量。例如,如果who返回:

a    b    z

我希望能够像writevars一样使用writers('file.txt', a, b, z)

我遇到的主要问题是writevars使用inputname ...(临时变量不起作用,例如writevars('file.txt', 100)不起作用,因为文件中没有给出名称)。

ANSWER

var_names = who;
for i = 1 : length(var_names)
    evalin('caller',['writevars(''file.txt'', ' char(var_names(i)) ' )']);
end

2 个答案:

答案 0 :(得分:3)

您可以使用EVALINwho内运行writevars,例如

function writevars(filename,varargin)

%# get a list of variable names in the calling workspace and read their values
if isempty(varargin)
   listOfVars = evalin('caller','who');
   values = cell(size(listOfVars));
   for i=1:length(listOfVars)
      values{i} = evalin('caller',listOfVars{i});
   end
else
   %# use inputname to read the variable names into listOfVars
end

%# --- rest of writevars is here ---

答案 1 :(得分:0)

可以使用whos命令的返回值来使用:

function GetAllVars
a = 45;
x = 67;    
ff = 156;
z = who();
for i=1:numel(z)
    if ~isequal(z{i},'z')
        fprintf(1,'%s = %f\n',z{i},eval(z{i}));
    end
end