Check if variable exists in workspace to plot variable, else generate error

Hi there,
I am having some trouble with checking if a variable exists in the workspace. If the variable exists (which is a structure with time), it should plot the data in my GUI. If the variable does not exist, it should generate an error.
I used this code, however it will always generate an error even if the variable does exist in the workspace. I cannot find what I am doing wrong.
function AmechM_Callback(hObject, eventdata, handles)% Executes on button press in AmechM.
if exist('AmechM','var')
AmechM = evalin('base','AmechM');
plot(AmechM.time,AmechM.signals.values);
xlabel(handles.ax1,'time (s)');
ylabel(handles.ax1,'Acceleration (rad/s²)');
else
errordlg('The workspace does not contain any data. Run a simulation first.','Error');
end

2 comentarios

"exists in the workspace" &nbsp which workspace, that of the callback function or the base?
The base workspace.

Iniciar sesión para comentar.

 Respuesta aceptada

per isakson
per isakson el 9 de En. de 2015
Editada: per isakson el 9 de En. de 2015
replace
if exist('AmechM','var')
by
if exist('AmechM','var') == 1
or rather by
ise = evalin( 'base', 'exist(''AmechM'',''var'') == 1' )
if ise
since you want to know whether AmechM exists in the base workspace
and read the on-line help on exist and on "scope"

8 comentarios

The code
ise = evalin( 'base', 'exist(''AmechM'',''var'') == 1' )
if ise
worked, thanks!
So for my own knowledge: using
if exist('AmechM','var') == 1
only checks the existence of the variable in the callback function?
per isakson
per isakson el 9 de En. de 2015
Editada: per isakson el 9 de En. de 2015
"but this still does not work though" &nbsp what do you mean?
Is ise true or false when the variable exists in the base workspace?
I did not see that you edited your answer before I commented. Thanks.
... and I answered without reading the whole question. Happy my answer helped you.
The above solution works well for variables. but its failing in detecting structure variables. eg: exist(['report.f_fun_redundant{' m '}'],'var')
If any of you have a solution could you please share . Thanks in advance.
I know answer is really late but I struggled on a very similar case. My solution is using the function fieldnames().
contains( fieldnames( variable_to_inspect) , 'sub_variable_name_string' )
To make it suitable and robust for "if", use sum()
sum( contains( fieldnames( variable_to_inspect ) , 'sub_variable_name_string' ) )
Yes, I think fieldnames is the best solution for structures

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 9 de En. de 2015

Comentada:

el 16 de Ag. de 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by