num2str or str2num?

22 views (last 30 days)
Ryan Grace
Ryan Grace on 29 Apr 2012
I am trying to make a table of numbers with corresponding names for example: names and grade table sorted by the number
Bob 97
Joe 87
Sally 88
How do i setup a variable to equal something like a= Bob 97 so when i go to do the fprintf it will sort by the numbers in the second column and leave the corresponding names to the number in the first column
final table should look like:
Name Grade
Joe 87
Sally 88
Bob 97
  2 Comments
per isakson
per isakson on 29 Apr 2012
Why not int2str?
Image Analyst
Image Analyst on 29 Apr 2012
Because he wants it sorted by grade, and the grade doesn't necessarily show up in the same column, or even in a single column, if the names have different lengths:
>> int2str('Sally 88')
ans =
83 97 108 108 121 32 32 32 56 56

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 29 Apr 2012
Ryan, if you can read in from your input (say, with textscan) and stuff the name into a cell array and stuff the numbers into a double array, then you can sort the double array and sort the cell array the same way, like in this (untested) code:
% Create sample data:
names = {'Bob'; 'Joe'; 'Sally'}
grades = [97 87 88]
% Now sort by ascending grade number:
[sortedGrades sortOrder] = sort(grades, 'ascend');
% Sort the names the same way.
sortedNames = names(sortOrder);
% Now print out to the command window.
fprintf('Name Grade\n');
for k = 1 : length(sortedGrades)
fprintf('%s %d\n', sortedNames{k}, sortedGrades(k));
end
In the command window:
names =
'Bob'
'Joe'
'Sally'
grades =
97 87 88
Name Grade
Joe 87
Sally 88
Bob 97
  3 Comments
Image Analyst
Image Analyst on 29 Apr 2012
Yeah, that's hard, unless you want to use a uitable. The tab (\t) is somewhat unreliable as to where it places the next column. What I do is to set the font to a fixed spacing font like Courier (I know, Courier is not "pretty" though) and then use fixed length fields, e.g. %20s or %7d to line things up.
Ryan Grace
Ryan Grace on 29 Apr 2012
Ya i just used a number in front of the %s and %f and it looks decent enough for what i am doing. Thanks for your help.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!