MATLAB Answers

fprintf cell array of two classes

3 ビュー (過去 30 日間)
Lawrence Wang
Lawrence Wang 2020 年 3 月 17 日
コメント済み: Lawrence Wang 2020 年 3 月 17 日
Hi all,
I need to use fprintf to print out a char array (strictly 3 columns) and a double array side-by-side so they align. For instance:
charArr = ['USA' ; 'CAN' ; 'FRA']
doubArr = [1 2 3 4; 3 4 5 6; 6 7 8 9]
I want it to look something like:
USA 1 2 3 4
CAN 3 4 5 6
FRA 6 7 8 9
I tried to use cell arrays like below:
table = {charArr, doubArr};
fprintf( '%c, %d', table{:})
But I always get something funky and never what I want. Any help would be appreciated.

採用された回答

Sriram Tadavarty
Sriram Tadavarty 2020 年 3 月 17 日
編集済み: Sriram Tadavarty 2020 年 3 月 17 日
Hi,
Use this if the number of rows of both the arrays are same
n = size(doubArr,1);
arrayfun(@(i) fprintf( '%s %s \n', charArr(i,:),num2str(doubArr(i,:))),1:n)
% You can even try this
comB = [charArr + " " + num2str(doubArr)];
fprintf('%s\n', comB)
Hope this helps.
Regards,
Sriram
  2 件のコメント
Sriram Tadavarty
Sriram Tadavarty 2020 年 3 月 17 日
Sure Lawrence.
It need to print the combination of numbers and characters. Since, the number of rows in both are same, the general apporach is to concatenate both the variables charArr and doubArr, like [charArr doubArr] but this converts the numeric values to the respective ASCII values. So inorder to make it combined through characters, i converted the numeric value to string value through num2str(doubArr), and then in the output you need additional space between the two arrays and each array needs to print a new line. So, comes the usage of " " in the comB variable and \n operator in fprintf respectively.
Hope this helps.

サインインしてコメントする。

その他の回答 (2 件)

Stephen
Stephen 2020 年 3 月 17 日
編集済み: Stephen 2020 年 3 月 17 日
No need for complex strings, ugly loops, or slow arrayfun, you just need one simple fprintf call::
>> A = ['USA' ; 'CAN' ; 'FRA'];
>> B = [1 2 3 4; 3 4 5 6; 6 7 8 9];
>> C = [cellstr(A),num2cell(B)].'; % transpose to get correct order
>> fprintf('%s %d %d %d %d\n', C{:})
USA 1 2 3 4
CAN 3 4 5 6
FRA 6 7 8 9
If you want to learn how to use MATLAB efficiently, you might as well start now.
  3 件のコメント
Lawrence Wang
Lawrence Wang 2020 年 3 月 17 日
Oh man I can't believe I forgot that. I'll definitely brush up on the docs. Thanks so much for your help.

サインインしてコメントする。


Bhaskar R
Bhaskar R 2020 年 3 月 17 日
編集済み: Bhaskar R 2020 年 3 月 17 日
require = string(cell2mat(strcat(charArr,{' '}, num2str(doubArr))));

Community Treasure Hunt

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

Start Hunting!

Translated by