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
1.40.20.8 % 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.
Thanks.

  0 Comments

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);
end
and tested:
>> myfun([1,14,20,8])
ans =
1.14.20.8
>> myfun([5,1,20])
ans =
5.1.20
>> myfun([2])
ans =
2
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))

  2 Comments

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.