从matlab中的结构创建表 - 对齐
Posted
技术标签:
【中文标题】从matlab中的结构创建表 - 对齐【英文标题】:Create table from structure in matlab - alignment 【发布时间】:2021-08-20 02:19:16 【问题描述】:我有一个带有标量字段的结构,比如妈妈,我想在屏幕上以对齐的列显示结构的值,可能带有一些标题。这是一个最小的工作示例:
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.(fnamesi);
end
fprintf('%s \t \t %s \n',header1,header2);
for i = 1:numel(fnames)
fprintf('%s \t \t %8.3f \n',fnamesi,pvec(i));
end
此代码可以正常工作,但问题是列未对齐,尤其是在字段名称很长的情况下。这是输出:
Moment Value
a 1.000
b 2.000
veryLongName 3.000
【问题讨论】:
【参考方案1】:您可以将结构转换为table
,并让 MATLAB 为您格式化显示:
disp(struct2table(mom))
输出:
a b veryLongName
_ _ ____________
1 2 3
或者,使用fprintf
格式字符串的字段宽度说明符:
width = max(cellfun('length', fnames));
width = max(width, length(header1));
fprintf('%-*s %s\n', width, header1, header2);
for i = 1:numel(fnames)
fprintf('%-*s %-8.3f\n', width, fnamesi, mom.(fnamesi));
end
输出:
Moment Value
a 1.000
b 2.000
veryLongName 3.000
%-*s
与%s
相同,但带有一个-
标志来指示左对齐,以及*
宽度说明符,它指示从参数中获取宽度。所以%-*s
从参数中读取两个值:首先是宽度,然后是字符串。
【讨论】:
以上是关于从matlab中的结构创建表 - 对齐的主要内容,如果未能解决你的问题,请参考以下文章