Display struct array as a table
11 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
0 Commenti
Risposta accettata
Guillaume
il 2 Mag 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' ''
Più risposte (1)
Peter Perkins
il 3 Mag 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 Commenti
Peter Perkins
il 5 Mag 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
il 5 Mag 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!
Vedere anche
Categorie
Scopri di più su Data Type Conversion in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!