Display struct array as a table

14 vues (au cours des 30 derniers jours)
S G
S G le 2 Mai 2019
Commenté : AMM le 5 Mai 2020
I have a struct array of the form:
%--- Define stuct array 'sites' ---%
sites(1).code = 'LP5';
sites(1).name = 'Liverpool';
sites(1).comments = '';
sites(1).code = 'LDN';
sites(1).name = 'London';
sites(1).comments = 'Capital of the UK';
sites(1).code = 'MC1';
sites(1).name = 'Manchester';
sites(1).comments = '';
%--- And so on 'n' times ---%
I would like to be able to print this data out in the same format as a MATLAB table. Something that looks like (with text wrapping for long comments or names):
Code Name Comments
LP5 Liverpool
LDN London Capital of
the UK
MC1 Manchester
I know this is possible for regular none-array-like structs but not for struct arrays. with my current code:
function listSites(sites)
disp('--------------------');
for n = 1 : length(sites)
display(struct2table(sites(n)));
end
disp('--------------------');
end
I just get:
Variables:
name: 14×1 cell array of character vectors
code: 14×1 cell array of character vectors
comments: 14×1 cell array of character vectors

Réponse acceptée

Guillaume
Guillaume le 2 Mai 2019
struct2table does that:
>> %--- Define stuct array 'sites' ---%
sites(1).code = 'LP5';
sites(1).name = 'Liverpool';
sites(1).comments = '';
sites(2).code = 'LDN';
sites(2).name = 'London';
sites(2).comments = 'Capital of the UK';
sites(3).code = 'MC1';
sites(3).name = 'Manchester';
sites(3).comments = '';
%--- And so on 'n' times ---%
>> struct2table(sites)
ans =
3×3 table
code name comments
_____ ____________ ___________________
'LP5' 'Liverpool' ''
'LDN' 'London' 'Capital of the UK'
'MC1' 'Manchester' ''
  1 commentaire
S G
S G le 2 Mai 2019
Modifié(e) : S G le 2 Mai 2019
Thanks, turns out I just didn't need the for loop!

Connectez-vous pour commenter.

Plus de réponses (1)

Peter Perkins
Peter Perkins le 3 Mai 2019
SG, two things:
1) Display for the table data type is intended to show the contents of the data container. It sounds almost like you are looking for a "pretty print" facility. If you're happy with table's display, that's great, but it's not really intended for pretty printing.
2) You should consider using a table instead of a struct array for those data. It looks like you have tabular data, and a table is likely to be more convenient.
  4 commentaires
Peter Perkins
Peter Perkins le 5 Mai 2020
I hesitate to even suggest this, but
>> t = array2table(rand(5,3));
>> s = evalc('disp(t)');
>> fprintf('My table is:\n%s',s)
My table is:
Var1 Var2 Var3
________ _________ _______
0.079917 0.43643 0.54402
0.16308 0.0063417 0.38973
0.9033 0.58479 0.21583
0.78299 0.51848 0.38577
0.74668 0.06685 0.62686
AMM
AMM le 5 Mai 2020
Hi Peter,
Thanks for the additional idea. I never thought about any of the EVAL variants, probably out of old habit (I've seen them abused quite a few times to cause havoc via deliberately malformed input). But this works great, too. Thanks!

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion 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