Display struct array as a table

96 visualizaciones (últimos 30 días)
S G
S G el 2 de Mayo de 2019
Comentada: AMM el 5 de Mayo de 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

Respuesta aceptada

Guillaume
Guillaume el 2 de Mayo de 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 comentario
S G
S G el 2 de Mayo de 2019
Editada: S G el 2 de Mayo de 2019
Thanks, turns out I just didn't need the for loop!

Iniciar sesión para comentar.

Más respuestas (1)

Peter Perkins
Peter Perkins el 3 de Mayo de 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 comentarios
Peter Perkins
Peter Perkins el 5 de Mayo de 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 el 5 de Mayo de 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!

Iniciar sesión para comentar.

Categorías

Más información sobre Structures en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by