0

以下は私の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

ありがとう!

4

1 に答える 1

0

あなたのコードに関する1つのこと:行はループの外側にあるため、ループからの変数fprintf(1, '#%3d %15u %15u %15u %15u\n', i, a(i), b(i),c(i);の最後の値のデータのみを出力します。iこれが、印刷される行が 1 行だけになる理由です。

出力の美化に関しては、次のようなことを試すことができます。

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 位置を示す 2 要素ベクトルです。

または、ループなしで同じことを行うことができます

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 );

EDIT:これをファイルに保存したい場合は、次のように書く必要があります:

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-io.htmlを参照してください。

于 2013-05-17T11:11:33.710 に答える