vertical alignment with different size character with fprintf.

14 vues (au cours des 30 derniers jours)
sermet
sermet le 26 Avr 2015
Modifié(e) : Stephen23 le 26 Avr 2015
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 commentaire
Stephen23
Stephen23 le 26 Avr 2015
Presumably you mean "horizontal alignment" in the title, rather than "vertical alignment".

Connectez-vous pour commenter.

Réponse acceptée

Stephen23
Stephen23 le 26 Avr 2015
Modifié(e) : Stephen23 le 26 Avr 2015
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,:});

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by