vertical alignment with different size character with fprintf.

38 ビュー (過去 30 日間)
sermet
sermet 2015 年 4 月 26 日
編集済み: Stephen 2015 年 4 月 26 日
C = {'p.1001',100.500,250.350,;'102',110.550,255.220;'m285',115.210,266.333};
fileID = fopen('celldata.dat','w');
formatSpec = '%s %15.3f %15.3f\n';
[nrows,ncols] = size(C);
for row = 1:nrows
fprintf(fileID,formatSpec,C{row,:});
end
fclose(fileID);
% in this case second and third columns cannot be vertically aligned in the text file because first columns' characters are different size. When I use tab (/t), the situation is still same. Is there any way to vertically align 2rd and 3rd columns as independently the 1st columns' characters size?
  1 件のコメント
Stephen
Stephen 2015 年 4 月 26 日
Presumably you mean "horizontal alignment" in the title, rather than "vertical alignment".

サインインしてコメントする。

採用された回答

Stephen
Stephen 2015 年 4 月 26 日
編集済み: Stephen 2015 年 4 月 26 日
According to the fprintf documentation one can specify a field width for character substring:
>> fprintf('%s\n','cat')
cat
>> fprintf('%8s\n','cat')
cat
So simply changing the format string to this will allign all of the columns:
>> formatSpec = '%6s %15.3f %15.3f\n';
If the maximum string width is not known, then you can generate this from the substrings themselves:
>> X = max(cellfun('length',C(:,1)));
>> formatSpec = sprintf('%%%ds %%15.3f %%15.3f\n',X);
Or use this value directly using the * notation:
>> X = max(cellfun('length',C(:,1)));
>> formatSpec = '%*s %15.3f %15.3f\n';
and then
fprintf(fileID, formatSpec, X, C{row,:});

その他の回答 (0 件)

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by