MATLAB: How to get values of selected variables from workspace

double array variables;values of variables;

I have a huge number of signals/variables imported into workspace and I require only some selected variables along with values. Every variable is a double array. I have used string compare to get the selected variables but this gives only the names of them but not the values. I have used who which gives me only the names of the variable. Please guide me on how to get the values of each of these variables in a double array format.
load Test_2_4_1.mat;
variables = who;
%h = workspaceHandle;
%V = GetVariable(h,'variables','workspace');
%%to compare n parts of variable names (strings)
variable_list = variables;
ans = strncmpi(variable_list,'PEC',3);
ans_double = +ans;
%k = 1;
i=1;
for k = 1:size(ans_double,1)
if ans_double(k) ==1
selected_signals(i) = (variable_list(k));
%value(i) = workspaceHandle.getVariable(selected_signals(i));
i=i+1;
end
end
selected = selected_signals.';
z = evalin('base','selected');

Best Answer

The simplest way is to load your variable into a structure, simply by giving an output to load, then you can use dynamic field names to access your variables:
matcontent = load Test_2_4_1.mat;
usefield = strncmpi(fieldnames(matcontent),'PEC',3);
%instead of a loop you can then convert the structure into a cell array and simply index the cell array:
matcontent = struct2cell(matcontent);
selectedvariables = matcontent(usefield); %cell array of selected variables
Note:
  • do not use ans as a variable name. This is a name reserved by matlab. The content of ans can change at any time (any time you don't provide an output to a function).
  • avoid eval, evalin, etc. like the plague.
  • if x == 1 when x is logical (as in your case) is the same as if x. Converting x to double and then comparing to 1 is a complete waste of time.