MATLAB Answers

how to automatically sprintf an array elements

196 views (last 30 days)
Dear All,
I have many arrays with various number of columns, that is, I have many 1*m matrices with m varies from 1 to 20. For instance, consider these three hypothetical arrays:
A1 = [1 14 20 8]
A2 = [5 1 20]
A3 = [2]
what I am after is creating a sprintf for each array to put together all array elements such that elements are separated by a dot. For the above examples, the desired outputs are % sprintf('%d.%d.%d.%d', A1(1,1), A1(1,2), A1(1,3), A1(1,4)); three dots required
5.1.20 % sprintf('%d.%d.%d', A2(1,1), A2(1,2), A2(1,3)); two dots required
2 % sprintf('%d', A3(1,1)); no dot required
It is certainly simpler if all of the arrays have same number of columns. But since it is not the case, I have no idea how to proceed. I just want an algorithm which automatically generates the sprintf for me with the correct number of dots.


Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 21 May 2017
Edited: Stephen Cobeldick on 21 May 2017
function str = myfun(vec)
str = sprintf('.%d',vec);
str = str(2:end);
and tested:
>> myfun([1,14,20,8])
ans =
>> myfun([5,1,20])
ans =
>> myfun([2])
ans =
It would be great if MATLAB allowed indexing to follow a function call, as then this could be achieved in an anonymous function.

More Answers (1)

amr alanwar
amr alanwar on 3 Oct 2017
Edited: amr alanwar on 3 Oct 2017
For printing an array normally, you can
fprintf('\n A1 = ')
fprintf(' %.3f ', A1)
fprintf('\n A2 = ')
fprintf(' %.3f ', A2)
fprintf('\n A3 = ')
fprintf(' %.3f ', A3)
The results
A1 = 1.000 14.000 20.000 8.000
A2 = 5.000 1.000 20.000
A3 = 2.000
For your question, try playing with
fprintf('%.0f.', A1(1:end-1))
fprintf('%.0f', A1(end))


James Tursa
James Tursa on 3 Oct 2017
This does not give the desired outcome.
amr alanwar
amr alanwar on 3 Oct 2017
I did not read the question carefully I modified my reply Thanks

Sign in to comment.