I need help with string formatting
Afficher commentaires plus anciens
Hello,
I need a formatted string and came up with this:
colFormatWidth = [ 5 25 10 10 10 10 5 5 5 5 10 ] ;
colFormatType = {'d' 's' 'f' 'd' 'f' 'f' 'f' 'f' 'f' 'f' 'f' } ;
formatRowDummy = sprintf('%%%%%%d%s', colFormatType{:} ) ;
formatRow = sprintf(formatRowDummy, colFormatWidth)
>> formatRow
formatRow =
%5d%25s%10f%10d%10f%10f%5f%5f%5f%5f%10f
Is there a smarter way to do this?
PS Additionally it will get even more messy if I try to achive something like
%10.4f
with this approach.
Réponses (1)
Guillaume
le 15 Juil 2015
I don't know about smarter, this is actually quite smart. I would just add a comment on the formatRowDummy line to explain the treble escaping of the % character (it has to survive going through two sprintf).
If the format string becomes even more complex, then probably the best thing is to revert to a loop (either explicit for or arrayfun) building each subpart of the format, with a final concatenation. It might be slower but the code would be clearer.
As it is:
formatrows = arrayfun(...
@(w, t) sprintf('%%%d%s', w, t{1}), ...
colFormatWidth, colFormatType, 'UniformOutput', false);
formatrow = [formatrows{:}]
Catégories
En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!