How to load, update and save data neatly

15 views (last 30 days)
I have a variable saved to a .mat file which I wish to load in, update (extend) and save out again to the same file.
Obviously I can just call load with no output argument and then save. But people generally seem to say that
s = load( someFilename );
is far better than using the no output argument form. This I understand.
What I am finding difficult to do neatly is the saving back of my updated data. I can update easily as:
s.myVar = someFunction( s.myVar );
but then I can't just do:
save( someFilename, 's' )
as that will leave me with a structure in my file which would not then match the original format. I also can't do:
save( someFilename, 's.myVar' )
as this is clearly nonsense.
So do I really have to do the following?:
myVar = s.myVar;
save( someFilename, 'myVar' )
If so this seems to obviate the purpose of calling load with an output argument in the first place.

Accepted Answer

Star Strider
Star Strider on 3 Sep 2014
See if the matfile function does what you want. (I’m not certain when it was introduced, but it’s in R2014a.)
  3 Comments
Adam
Adam on 3 Sep 2014
m = matfile( someFilename, 'Writable', true );
myVar = m.myVar;
myVar = update( myVar );
m.myVar = myVar;
does work and does at least relieve me of the need to have potentially unknown variables arriving in my workspace as I would with the no output form of 'save'.
Sadly, just updating the variable where it sits, in the matfile, does not work since it is of a custom class and I am resizing it.
Star Strider
Star Strider on 3 Sep 2014
Yes, according to the documentation, it doesn’t support user-defined classes. Sorry.

Sign in to comment.

More Answers (1)

Guillaume
Guillaume on 3 Sep 2014
Edited: Guillaume on 3 Sep 2014
save(someFilename, '-struct', 's');
Will save the fields as individual variables (it's in the documentation of save!)
You can even specify which fields you want to save:
save(someFilename, '-struct', 's', 'fieldname1', 'fieldname2, ...);
  1 Comment
Adam
Adam on 3 Sep 2014
Ah yes, so it is. I never expanded the 'variables' hyperlink as it didn't seem promising and I thought I knew what variables are! I also didn't notice the example lower down the page with the rather obvious titling :(

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!