fprintf的整洁安排

时间:2013-05-17 10:40:00

标签: matlab printf

以下是我的Matlab编码

fprintf(1, 'Object # \tArea \tPerimeter \tCentroid\n');
for i=1:num
a(i)=s(i).Area;
b(i)=s(i).Perimeter;
c(i)=s(i).Centroid;

end

fprintf(1, '#%3d %15u %15u %15u %15u\n', i, a(i), b(i),c(i);

输出

File name #     Area    Perimeter     Centroid
1             44992     9.021421e+002    3.464378e+002

如何使输出以一种整齐的方式对齐,如下所示:

          File name      Area         Perimeter          Centroid
this_is_my_filename     44992     9.021421e+002     3.464378e+002

谢谢!

1 个答案:

答案 0 :(得分:0)

关于您的代码的一件事:fprintf(1, '#%3d %15u %15u %15u %15u\n', i, a(i), b(i),c(i);行在循环之外,因此它将仅为循环中的i变量的最后一个值打印数据。这就是为什么你只打印一行。

至于美化输出,您可以尝试这样的事情:

fprintf(1, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
for i=1:num
    fprintf(1, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', i, s(i).Area, s(i).Perimeter, s(i).Centroid );
end

请注意,打印标题行和数据行时,每个部分的字段宽度都相同。

此代码假定您要打印regionprops函数的结果。在这种情况下,Centroid不是单个数字,而是一个双元素向量,表示区域质心的x和y位置。

或者,您可以在没有循环的情况下执行相同的操作

DataToPrint = [
    [1:num]
    [s.Area]
    [s.Perimeter]
    [s.Centroid]
    ];
fprintf(1, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
fprintf(1, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', DataToPrint );

编辑:如果您想将此文件保存到文件中,您应该这样写:

fid = fopen('YourFileName.txt','w'); % open file for writing
fprintf(fid, '%15s\t%9s\t%9s\t%19s\n', 'Object #','Area','Perimeter','Centroid');
fprintf(fid, '%15.5f\t%9.5f\t%9.5f\t%9.5f:%9.5f\n', DataToPrint );
fclose(fid); % close file

有关详细信息,请参阅http://www.mathworks.com/help/matlab/low-level-file-i-o.html