MATLAB Answers

0

I need help with string formatting

Asked by Grzegorz Lippe on 15 Jul 2015
Latest activity Answered by Guillaume
on 15 Jul 2015
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

Sign in to comment.

Tags

Products

1 Answer

Answer by 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

Sign in to comment.