I need help with string formatting
4 views (last 30 days)
Show older comments
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.
0 Comments
Answers (1)
Guillaume
on 15 Jul 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{:}]
0 Comments
See Also
Categories
Find more on Structures in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!