Access elements/fields from a struct

699 vues (au cours des 30 derniers jours)
Philip  Spratt
Philip Spratt le 25 Juin 2013
Commenté : Jan le 8 Fév 2018
I am generating a struct variable, returned from a SOAP API query, and am struggling to access the elements or fields contained within the struct.
When ever use: I 'disp(structVariable)'
It returns the dimensions of the struct.
I do not know the fieldnames contained in the struct either.
Is there an easy way to access a struct without knowing the fieldnames, then maybe send each element to a text file?
  7 commentaires
Tom
Tom le 26 Juin 2013
I think you will need to post a larger code snippet, maybe as a new question.
Philip  Spratt
Philip Spratt le 26 Juin 2013
Realised I needed to use the below. There are multiple struct variables at each level with the different information (nested struct). I suppose the data is there, just thought it may have been easier to output as a simple text file without having to go through each struct (array).
abstr.PubmedArticle(1).MedlineCitation abstr.PubmedArticle(1).PubmedData

Connectez-vous pour commenter.

Réponse acceptée

Iain
Iain le 25 Juin 2013
Sounds like you have something like:
b = dir('C:\Windows\');
b(1)
names = fieldnames(b(1));
for i = 1:numel(names)
value{i} = getfield(b(1),names{i})
end
  1 commentaire
Jan
Jan le 8 Fév 2018
Or easier:
value = struct2cell(b(1));

Connectez-vous pour commenter.

Plus de réponses (3)

Tom
Tom le 25 Juin 2013
Modifié(e) : Jan le 8 Fév 2018
Structures can be referenced dynamically, i.e. using variable names not strings the user has written. In this case you have to put brackets around the dynamic reference.
So
s.a
is the same as
s.('a')
So then,
n = 'a';
s.(n)
can be used instead. the FIELDNAMES function can be used to get the field names of a structure.
S.a = 'test';
S.b = 1;
S.c = rand(2);
fNames = fieldnames(S);
for n = 1:length(fNames)
disp(S.(fNames{n}))
end
You can then use FPRINTF or something similar to write to a text file.
  1 commentaire
mohammad alhayani
mohammad alhayani le 8 Fév 2018
thanks alot... ^_^ you helped me with my project.... so thanks..

Connectez-vous pour commenter.


Muthu Annamalai
Muthu Annamalai le 25 Juin 2013
In addition to the excellent answers posted by @Iain, and @Tom, you may also want to look at MATLAB support for JSON from the FileExchange http://www.mathworks.com/matlabcentral/fileexchange/33381-jsonlab-a-toolbox-to-encodedecode-json-files-in-matlaboctave
Goodluck!

Image Analyst
Image Analyst le 25 Juin 2013
You can just type the variable name on the command line, or as just a single line in a script, to learn what the field names are. No semicolon or anything. Just the variable name itself:
structVariable
It will show you what the field names are, and their values. Then, once you know that, you can write code to write them out to a text file using fprintf(). If you don't know the fields and the fields change all the time, then you can use code the others gave you. But I don't think this is your case - in your case the variable returned from your SOAP API query will have the same fields every time, right? What does it show when you put "structVariable" on its own line?

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by