我编写了一个函数,它接受输入变量的名称和值,并将它们写入文件。例如
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)
不起作用,因为文件中没有给出名称)。
var_names = who;
for i = 1 : length(var_names)
evalin('caller',['writevars(''file.txt'', ' char(var_names(i)) ' )']);
end
答案 0 :(得分:3)
您可以使用EVALIN从who
内运行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