MATLAB Answers

save(filename, var) cant find workspace variable even if it exist

35 views (last 30 days)
From my script i am trying to use save to store my workspace stucture to a .mat file. But i get following error message:
>> TestGUI Error using save Variable 'NewTest' not found.
In my script i use save like this:
save('NewTest.mat','NewTest');
I can see that my structure exists in the workspace, any idea why save don't find my variable?

  3 Comments

Stephen Cobeldick
Stephen Cobeldick on 24 Jun 2015
Can you please show us a screen shot of the workspace containing this variable?
Does the save call have access to that workspace?
Joakim Magnusson
Joakim Magnusson on 24 Jun 2015
Here is a screenshot.
I'm just using 'base' workspace, i put the structure in my workspace from my code so i should have access i think?

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 24 Jun 2015
The error message and the quoted code code give two different variable names: 'NewTest' vs 'newTest'.
Capitalization is significant in MATLAB!
It is not possible for both of these to be correct, so which one is right?

  7 Comments

Show 4 older comments
Stephen Cobeldick
Stephen Cobeldick on 24 Jun 2015
"I have never used anything other than the base workspace" is not true, because every time you create a function it has its own workspace.
"Isn't my functions workspace and the base workspace the same workspace?" No. This is clearly explained in the links that I gave you.
"...how do i make save access the base workspace?" That depends on you. My advice (and what I would write myself) would be to pass variables correctly between workspaces, and not access the base workspace like this. However if you really do want to keep the variables in the base workspace and write some non-robust slow hack code, then use assignin and evalin.
Joakim Magnusson
Joakim Magnusson on 24 Jun 2015
Thanks for the help, i understand how the different workspaces work now i think, i didn't know that every function had it's own workspace!
Stephen Cobeldick
Stephen Cobeldick on 24 Jun 2015
My pleasure!
It is levels of abstraction: suddenly thinking about multiple workspaces also means more complicated planning... but also more power! Please ask if you have any questions about how to use workspaces. Start small, look at the docs, find some examples on FEX, try out how it works... Good luck!
EDIT: one of the key things to understanding about functions is that they encapsulate and abstract some operation. It should not be required to poke around other workspaces because the whole point of a function is that it is a black box: all that matter is the input and output, not what happens in between (i.e. how it does it). This is the point of having separate workspaces... they keep operations conceptually independent.

Sign in to comment.

More Answers (1)

Joakim Magnusson
Joakim Magnusson on 24 Jun 2015
Edited: Joakim Magnusson on 24 Jun 2015
I found a solution. Instead of assigning my struct to the base workspace, i just created a variable with my struct within my function, and then just used save like this, i guess the variable i created exists in the function workspace and that save is accessing the functions workspace, correct me if i'm wrong!
structData = getNewTest(handles,newTestName);
save('NewTest.mat','structData');
(getNewTest returns the struct i want to save)

  0 Comments

Sign in to comment.

Tags

Products

Community Treasure Hunt

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

Start Hunting!