I need help with string formatting

4 views (last 30 days)
Grzegorz Lippe
Grzegorz Lippe on 15 Jul 2015
Answered: Guillaume on 15 Jul 2015
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 =
Is there a smarter way to do this?
PS Additionally it will get even more messy if I try to achive something like
with this approach.

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{:}]


Find more on Data Type Conversion in Help Center and File Exchange



Community Treasure Hunt

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

Start Hunting!