Assigning multiple variables to inputdlg's output string

6 vues (au cours des 30 derniers jours)
Henreee
Henreee le 12 Mar 2017
Modifié(e) : Stephen23 le 13 Mar 2017
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.

Réponses (2)

Stephen23
Stephen23 le 13 Mar 2017
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 commentaires
Jan
Jan le 13 Mar 2017
+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 le 13 Mar 2017
Modifié(e) : Stephen23 le 13 Mar 2017
@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.

Connectez-vous pour commenter.


Jan
Jan le 12 Mar 2017
Modifié(e) : Jan le 13 Mar 2017
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 commentaires
Henreee
Henreee le 12 Mar 2017
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 le 13 Mar 2017
Modifié(e) : Jan le 13 Mar 2017
@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.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by