Assigning multiple variables to inputdlg's output string

8 次查看(过去 30 天)
Hi,
I need to have the user enter multiple values and then for each value to be assigned as a number to a variable.
The current code I have is:
prompt = {'Enter value 1','Enter value 2','3','4','5','6'};
dlg_title = 'Enter values';
num_lines = 1;
defaultans = {'1','5','5','7','2','11'}
Params = inputdlg(prompt, dlg_title, num_lines, defaultans);
[a,b,c,d,e,f] = str2double(Params{:});
However this gives the error:
Error using str2double
Too many input arguments.
Any help would be great, thanks.

回答(2 个)

Stephen23
Stephen23 2017-3-13
This is easy using a comma-separated list:
prompt = {'Enter value 1','Enter value 2','3','4','5','6'};
defaultans = {'1','5','5','7','2','11'};
Params = inputdlg(prompt, 'MyTitle', 1, defaultans);
C = num2cell(str2double(Params));
[a,b,c,d,e,f] = C{:}
a =
1
b =
5
c =
5
d =
7
e =
2
f =
11
  2 个评论
Jan
Jan 2017-3-13
+1: Perfect. I'm not sure if the indirection over num2cell is faster, but it is much nicer than a subfunction with a loop and varargout.
Stephen23
Stephen23 2017-3-13
编辑:Stephen23 2017-3-13
@Jan Simon: I guess the num2cell is going to add a little bit of time, but considering that inputdlg waits many seconds for the user to input a few values, those few milliseconds are unlikely to be noticed.

请先登录,再进行评论。


Jan
Jan 2017-3-12
编辑:Jan 2017-3-13
data = str2double(Params);
If you really want to split this to 5 variables:
a = data(1);
b = data(2);
c = data(3);
d = data(4);
e = data(5);
But either use smarter names for the variables or keep them as a vector, if it matchs the underlying problem.
[EDITED] If you really want to split the vector to different variables, you can do this with a small function:
function varargout = SplitToVars(data)
if nargout ~= numel(data)
error('Number of inputs does not match number of outputs.');
end
for iVar = 1:numel(data)
varargout{iVar} = data(iVar);
end
end
  2 个评论
Henreee
Henreee 2017-3-12
Thanks for the reply,
The code I put on here was just an example, the actual has a lot more inputs. Is there a way to assign all of the variables at once? I tried
[a,b,c,d,e,f,g,etc] = data(:);
But it gives the error
Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
Even though there are the same number of variables as numbers in data.
Thanks!
Jan
Jan 2017-3-13
编辑:Jan 2017-3-13
@Henreee: Even if the number of variables equals the number of data, this is no valid Matlab syntax. Of course this produces an error. You could write a small function for this. See [EDITED] in my answer.

请先登录,再进行评论。

类别

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

Community Treasure Hunt

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

Start Hunting!

Translated by