从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中的结构创建表 - 对齐的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 中的哈希表

C结构继承指针对齐

分区表的索引

如何从父子层次结构表创建查询

对齐结构数组以制作表格

Apache PDFBox 表/行对齐与 Boxable