Matlab: передать вывод 'who' в качестве аргумента - PullRequest
2 голосов
/ 14 декабря 2011

Я написал функцию, которая берет имена и значения входных переменных и записывает их в файл. например.

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

Ответы [ 2 ]

3 голосов
/ 14 декабря 2011

Вы можете использовать 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 ---
0 голосов
/ 14 декабря 2011

Его можно использовать с помощью возвращаемого значения команды 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...