Create table from structure - alignment
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Alessandro D
am 1 Jun. 2021
Beantwortet: Stephen23
am 2 Jun. 2021
I have a structure with scalar fields, say mom, and I would like to display the values of the structure on the screen in aligned columns, possibly with some header. Here is a minimum working example:
mom.a = 1;
mom.b = 2;
mom.veryLongName = 3;
header = {'Moment'; 'Value'};
fnames = fieldnames(mom);
pvec = zeros(numel(fnames),1);
for i = 1:numel(fnames)
pvec(i) = mom.(fnames{i});
end
fprintf('%s \t \t %s \n',header{1},header{2});
for i = 1:numel(fnames)
fprintf('%s \t \t %8.3f \n',fnames{i},pvec(i));
end
This code works OK but the problem is that columns are not aligned, especially if a field has a very long name. This is the output:
Moment Value
a 1.000
b 2.000
veryLongName 3.000
Any suggestion is appreciated!
0 Kommentare
Akzeptierte Antwort
Stephen23
am 2 Jun. 2021
Simpler:
mom.a = 1;
mom.b = 2;
mom.veryLongName = 3;
hdr = {'Moment'; 'Value'};
tmp = [fieldnames(mom),struct2cell(mom)].';
fprintf(' %-20s %-s\n', hdr{:});
fprintf(' %-20s %-8.3f\n', tmp{:});
0 Kommentare
Weitere Antworten (1)
per isakson
am 2 Jun. 2021
Bearbeitet: per isakson
am 2 Jun. 2021
I've modified the format specifier.
%%
mom.a = 1;
mom.b = 2;
mom.veryLongName = 3;
header = {'Moment'; 'Value'};
fnames = fieldnames(mom);
pvec = zeros(numel(fnames),1);
for i = 1:numel(fnames)
pvec(i) = mom.(fnames{i});
end
%%
name_len = max( [ strlength(header(1)); cellfun( @strlength, fnames ) ] ) + 2;
%%
fprintf( '%-*s%8s\n', name_len, header{1}, header{2} );
for i = 1:numel(fnames)
fprintf( '%-*s%8.3f\n', name_len, fnames{i}, pvec(i) );
end
Two thirds down the page fprintf, Write data to text file you find the description of this use of the format specifier. Search for the subsection "Field Width"
0 Kommentare
Siehe auch
Kategorien
Mehr zu Live Scripts and Functions finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!