Accessing/writing a fieldname values for a blind structure

조회 수: 3 (최근 30일)
Rick
Rick 2014년 3월 11일
댓글: Rick 2014년 3월 11일
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

채택된 답변

Patrik Ek
Patrik Ek 2014년 3월 11일
편집: Patrik Ek 2014년 3월 11일
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.
  댓글 수: 1
Rick
Rick 2014년 3월 11일
THANK YOU too Patrik for your TIME..... Yes Sir thats it.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

David Sanchez
David Sanchez 2014년 3월 11일
person.name = 'xx';
person.age=32;
xfields = fieldnames(person)
>> person.(xfields{1})
ans =
xx
>> person.(xfields{2})
ans =
32
  댓글 수: 2
Rick
Rick 2014년 3월 11일
David, How do I give it a format in a fprintf write statement ??
Patrik Ek
Patrik Ek 2014년 3월 11일
This do not work for more than one layer.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Call C from MATLAB에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by