Removing quotations from table display

115 次查看(过去 30 天)
Trying to display a symbolic matrix in a table, however directly displaying using table or array2table causes the symbolic matrix to be displayed as:
After casting the symbolic matrix as a string, double quotes surround each input:
clear all;
clc;
numVars = input('How many joints would you like to enter: ');
DH = sym(zeros(numVars,4));
DHparameters = ["a"; "alpha"; "d"; "theta"];
i = string(1:numVars);
for j=1:numVars
clc;
disp("JOINT "+num2str(j)+" of "+num2str(numVars));
pR = input('Is this joint prismatic or revolute (p/r): ','s');
DH(j,1) = sym(input("Enter DH parameter a for joint " + num2str(j)+": "));
DH(j,2) = sym(input('Enter DH parameter alpha: '));
if pR=='p'
DH(j,4) = sym(input('Enter DH parameter theta: '));
DH(j,3) = sym("d_"+num2str(j),'real');
else
DH(j,3) = sym(input('Enter DH parameter d: '));
DH(j,4) = sym("theta_"+num2str(j),'real');
end
end
clc;
table1 = array2table(DH, 'RowNames',i,'VariableNames',{'a', 'alpha', 'd', 'theta'});
%table1 = table(i,string(DH),'VariableNames',{'i', 'a alpha d theta'});
disp(table1);
If there is a different way to display this to the user I am open to that as well!
  3 个评论
Connor LeClaire
Connor LeClaire 2021-10-21
No it doesn't hurt anything, it just makes the table (in my opinion) look cluttered and less-clear. I'd like to have the data displayed without them, just the data with no curly brackets, no quotes etc.
dpb
dpb 2021-10-21
As Scott shows below, it can be done, but turns into a fair amount of work pretty quickly.

请先登录,再进行评论。

采纳的回答

Scott MacKenzie
Scott MacKenzie 2021-10-21
编辑:Scott MacKenzie 2021-10-21
Seems like you just want a more visually appealing presentation for the user. Something like this might work:
vNames = {'a' 'alpha' 'd', 'theta'};
T = array2table(["0" "0" "1/2" "theta_1"; "0" "0" "d_2" "pi/2"], 'VariableNames', vNames);
C = [num2cell(1:height(T))' table2cell(T)]';
s = newline;
s = [s sprintf('==================================\n')];
s = [s sprintf('row %4s%8s%8s%10s\n', vNames{:})];
s = [s sprintf('----------------------------------\n')];
s = [s sprintf('%3d %4s%8s%8s%10s\n', C{:})];
s = [s sprintf('==================================\n')];
disp(s);
================================== row a alpha d theta ---------------------------------- 1 0 0 1/2 theta_1 2 0 0 d_2 pi/2 ==================================
  4 个评论
dpb
dpb 2021-10-21
Anything is possible, just how much effort are you willing to expend counting columns, writing format strings, etc., etc., etc., ...
The MATLAB command window is NOT designed as nor intended to be a document presentation window; TMW has (or at least has had) some document prep tools/toolboxen; I don't know what the status is for them now; you might want to look into that on the product site.
Alternatively, perhaps your purposes would be better served by writing the table to a spreadsheet and formatting it there for the user. Once you write it at the command window, it's going to be gone/overwritten at the next input command, anyways...
Connor LeClaire
Connor LeClaire 2021-10-21
Ah ok, good to know. It's more a sanity check for the user to make sure their values are correct for what they expect.
Thanks for all your help!

请先登录,再进行评论。

更多回答(1 个)

dpb
dpb 2021-10-21
编辑:dpb 2021-10-21
It's more a sanity check for the user to make sure their values are correct for what they expect.
And there's where the purpose of and value of the "" come in to play -- you are able to see if, for example, there are superfluous blanks in the data field this way that would be completely hidden otherwise, but perhaps cause a failure of a text search in string-matching code.
While I agree it is sometimes a little off-putting, the basics of the command window are well served by the choices TMW has made.
Two things I have done on occasion when I did want to make the presentation "cleaner" --
  1. Use cellstr() instead of string() -- the single quotes aren't quite as heavy and if there's nothing being done that is really dependent upon the string class in the application, but just looking as here, unlikely to lose anyfunctionality.
  2. Convert to categorical -- that way, since it is a not a type of string variable, MATLAB doesn't add any quotes:
vNames = {'a' 'alpha' 'd', 'theta'};
T=array2table(["0" "0" "1/2" "theta_1"; "0" "0" "d_2" "pi/2"], 'VariableNames', vNames);
T.a=categorical(T.a);
T.alpha=categorical(T.alpha);
T.d=categorical(T.d);
T.theta=categorical(T.theta);
Then you can write
>> disp(T)
a alpha d theta
_ _____ ___ _______
0 0 1/2 theta_1
0 0 d_2 pi/2
>>
Of course, you can wrap the conversion of the symbolic to string inside the call to categorical when creating the table; I don't have the TB so started with Connor's string version...

类别

Help CenterFile Exchange 中查找有关 Data Type Identification 的更多信息

产品


版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by