Accessing/writing a fieldname values for a blind structure

2 views (last 30 days)
Okay, so lets say you got a function that you want to generically send structures too for writing out. I figured out how to get to the field names and write them out for headers. However, I cannot figure out how to access the actuall values for the structure and they're perspective data type. I am using Matlabe 2010B.
Here is what I got:
function write_datastruct(person) %person = [] %person.name = 'Robbie'; %person.age = 38; %person.height = 58;
%access/write out the fieldnames for a header xfields = fieldnames(person); fieldcnt = length(xfields);
for ii = 1:fieldcnt fprintf('\t%s',xfields{ii}); end
Now how do I access/write the values of person............. ??? This does not work:
for jj = 1:fieldcnt fprintf('\t',person.fields{jj}); end

Accepted Answer

Patrik Ek
Patrik Ek on 11 Mar 2014
Edited: Patrik Ek on 11 Mar 2014
You may want something like this,
function printfields(theStruct)
fields = fieldnames(theStruct);
for k = 1:length(fields)
if isstruct(theStruct.(fields{k}))
fprintf('%s\n ',fields{k})
printfields(theStruct.(fields{k}))
else
if k > 1
fprintf(' ');
end
if isa(theStruct.(fields{k}),'char')
fprintf(':%s\n',theStruct.(fields{k}));
else
fprintf(':%g\n',theStruct.(fields{k}));
end
end
end
Try it on
a.b.c = 1;
a.c.d = 'a';
You may also want it to work for cells so then you must do a,
elseif isa(theStruct.(fields{k}),'cell')
printcell(theStruct.(fields{k}));
where you may need to write/find a function printing cells.

More Answers (1)

David Sanchez
David Sanchez on 11 Mar 2014
person.name = 'xx';
person.age=32;
xfields = fieldnames(person)
>> person.(xfields{1})
ans =
xx
>> person.(xfields{2})
ans =
32

Tags

Community Treasure Hunt

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

Start Hunting!