gpt4 book ai didi

matlab - 在matlab中从结构创建表 - 对齐

转载 作者:行者123 更新时间:2023-12-04 07:34:36 28 4
gpt4 key购买 nike

我有一个带有标量字段的结构,比如妈妈,我想在屏幕上对齐的列中显示结构的值,可能还有一些标题。这是一个最小的工作示例:

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

最佳答案

您可以将结构转换为 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从参数中读取两个值:首先是宽度,然后是字符串。

关于matlab - 在matlab中从结构创建表 - 对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67796382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com