[R2017a] save nested structure with save, append files, load it and check some 'string' fields with strcmp

2 views (last 30 days)
Hey guys,
I am working on a GUI that allows users to save the data, initially in a text file, inside a nested structure into a file .m
clc; clear;
s1(1).name = 'CaCO3.....';
s1(1).time = [0 1 2 3 4 5 6 7 8 9 10];
s1(1).mass = [0.9,0.9,0.8,0.7,0.7,0.5,0.4,0.4,0.4,0.,4];
s1(1).heat = [0 1 2 3 4 5 6 7 8 9 10];
s1(2).name = 'MgCO3.....';
s1(2).time = [0 2 4 6 8 10 12 14 16 18];
s1(2).mass = [1 1 1 1 1 1 1 1 1 1];
s1(2).heat = [9 9 9 9 9 9 9 9 9 9];
save('newstruct.mat', 's1');
disp('Contents of newstruct.mat:')
whos('-file', 'newstruct.mat')
clear('s1')
load('newstruct.mat')
A_cell = struct2cell(s1);
I want now to access all the field s1.name and check if among those there is a particular string, let's say 'CaCO3.....'.
Both:
[s1.name]
[A_cell{1,1,:}]
give me the following result: 'CaCO3.....MgCO3.....'
my questions are:
1) How can I put all results in an array? Or if I want to loop, how can I know the total length of the field .name?
2) If the name doesn't exist, how do I create a new substrcture s1(3)?

Accepted Answer

Walter Roberson
Walter Roberson on 22 Apr 2018
lookfor = 'CaCO3';
names = {s1.name};
[~, idx] = ismember(lookfor, names);
if idx == 0
idx = length(s1)+1;
s1(idx).name = lookfor;
end
s1(idx).time = new time information
s1(idx).mass = new mass information
s1(idx).heat = new heat information
  3 Comments
Stephen23
Stephen23 on 23 Apr 2018
Edited: Stephen23 on 23 Apr 2018

"how can I delete s1(2)? "

Just like with any other array:

   s1(2) = []

"Will s1(3) become the new s1(2)?"

Yes, just like with any other type of array. You can try it yourself:

>> V = 1:3
V =
   1   2   3
>> V(2) = []
V =
   1   3

"How did you learn these things?"

By reading the documentation a lot, and by reading lots of answers on this forum. Also by experimenting: you could have easily tried it yourself, with a small 1x3 structure, and seen what happens.

"Could you suggest me a good tutorial, book, video to follow?"

Very few of the third-party books or online tutorials I have seen have been very good: some of them are quite dated, or teach inefficient practices, or give outright bad advice. The best source of information about learning MATLAB is... the MATLAB documentation:

https://www.mathworks.com/help/matlab/getting-started-with-matlab.html

https://www.mathworks.com/help/pdf_doc/matlab/index.html

You might like to read this:

https://www.mathworks.com/matlabcentral/answers/228557-experts-of-matlab-how-did-you-learn-any-advice-for-beginner-intermediate-users

Michael Daldini
Michael Daldini on 23 Apr 2018
Thank you again :) I could have tried but I was on the phone and i wanted to be sure to have a solution to the time I would get to the notebook :)
Thank you again, I will start reading a lot.

Sign in to comment.

More Answers (0)

Categories

Find more on Debugging and Analysis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!