STRUCTVAL is a convenient tool that extracts values from a deeply nested Struct for a designated fieldname.
Assuming you have a data set that is constructed with the same property and stored in a struct variable. It may look like:
How can you extract all the values in `values` filed under each subset of `data`?
This is my solution.
[output] = STRUCTVAL(S,fieldname) deeply searches a STRUCT variable for the field values in `fieldname` and collects result in `output`. This function collects any data type but STRUCT. If the data type for the particular field is a struct, it keeps searching down further.
Furthermore, STRUCTVAL is also capable to reconstruct the hierarchical data structure! This is extremely useful when you need to replace a particularly field with new value!
For more information, type "help structval" in the command window to find out.
>> S.a = 1;
>> S.a.val = 1;
>> S.b.val = 'test';
>> field = 'val';
>> val = structval(S,field)
This function is very useful when your data are hidden deeply down a nested STRUCT variable. I used it for collecting results from a Simulink output, which has the form such like data.resultA.signals.values, data.resultB.signals.values....and so forth. Hopefully, it will be useful to you. If you found any problem in the code, please don't hesitate to contact me or leave comments below.
Yung-Yeh Chang Ph.D.
Yung-Yeh Chang (2021). Extract values from a deeply nested Struct for a designated fieldname (https://www.mathworks.com/matlabcentral/fileexchange/50534-extract-values-from-a-deeply-nested-struct-for-a-designated-fieldname), MATLAB Central File Exchange. Retrieved .
Very usefull function. One of the rare ones which can go deep in a multi dimensional struct array.
@Ni Putu Dewi Nurmalasari
The second argument should be a string variable. I suggest you try structval(diffAnalysisRes1,'normDiffCoef') and run again.
my data is 1x617 struct 1 field (filename is "diffAnalysisRes1") each row has 1x1 struct with 4 fields I want to collect all of the 4th data for 617 (file name "diffAnalysis1(1).fullDim.normDiffCoef" to "diffAnalysis1(617).fullDim.normDiffCoef" I have tried code
but it matlab Undefined function or variable 'structval'. Thanks
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!