【问题标题】:Create table from structure in matlab - alignment从matlab中的结构创建表 - 对齐
【发布时间】: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.(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

此代码可以正常工作,但问题是列未对齐,尤其是在字段名称很长的情况下。这是输出:

Moment       Value 
a           1.000 
b           2.000 
veryLongName            3.000 

【问题讨论】:

    标签: matlab struct printf


    【解决方案1】:

    您可以将结构转换为table,并让 MATLAB 为您格式化显示:

    disp(struct2table(mom))
    

    输出:

        a    b    veryLongName
        _    _    ____________
    
        1    2    3           
    

    或者,使用fprintf 格式字符串的字段宽度说明符:

    width = max(cellfun('length', fnames));
    width = max(width, length(header{1}));
    fprintf('%-*s   %s\n', width, header{1}, header{2});
    for i = 1:numel(fnames)
        fprintf('%-*s   %-8.3f\n', width, fnames{i}, mom.(fnames{i}));
    end
    

    输出:

    Moment         Value
    a              1.000   
    b              2.000   
    veryLongName   3.000   
    

    %-*s%s 相同,但带有一个- 标志来指示左对齐,以及* 宽度说明符,它指示从参数中获取宽度。所以%-*s 从参数中读取两个值:首先是宽度,然后是字符串。

    【讨论】:

      猜你喜欢
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 2011-01-31
      相关资源
      最近更新 更多