2014-10-18 3 views
0

У меня есть Matlab function, который имеет многочисленные значения параметров ввода значений. Для некоторых имен параметров существует много возможных значений (которые не всегда очевидны), которые пользователь может выбрать. То, что я хотел бы сделать, это: IF пользователь называет имя, но НЕ дает значение, THEN Matlab будет отображать возможные записи И THEN принять вход пользователя.Функция Matlab - запросить пользовательский ввод для заданного аргумента

Например, у меня есть такая функция, как:

function getSomeData(varargin) 

p=inputParser; 
defaultData='abc'; 

addParameter(p, 'Data', defaultData); 

parse(p,varargin{:}); 

end 

Если бы пользователь вызвать функцию в окне командной строки, например:

>> getSomeData('Data') 

, в котором пользователь не дать значение 'Data', окно будет отображать и запрашивать

>> getSomeData('Data') 
No value for 'Data' Given 
Possible Values of 'Data' are: 
'abc' 
'def' 
'other' 

Please input your 'Data': 

, в котором I C ould использовать функцию result=input(prompt).

Любая помощь или совет очень ценится! Cheers

+0

Мне тяжело следовать вашему коду. Итак, вы говорите, что у вас уже есть функция, которая принимает пары имен и значений? Как начинаются эти значения имен? Кажется, что ваша функция 'getSomeData' просто установила некоторые данные по умолчанию, а затем выполняет функцию' parse'. Что делает 'parse'? Можете ли вы показать нам ** все ** вашего кода? – rayryeng

ответ

0

Могу ли я попросить вас указать сложность ваших материалов ввода. Либо вы приходите из java, и думаете, что вам нужно создать объект ввода-вывода для чтения входов, иначе ваша проблема будет более сложной, чтобы описание создавало впечатление.

В противном случае я бы предложил вам дизайн менее сложного пути вперед. Один из способов сделать это - использовать свойство nargin, которое находит количество входов функции. Вместе с nargin используйте оператор if (или коммутационный футляр?).

if nargin==0 
    % print alternative inputs with disp or fprintf. 
    % This alternative can also be replaced with comments (single block with 
    % no empty rows) right below the function. This will then be seen with 
    % the `help funName` command 

elseif nargin==1 
    % Print description + permitted values. This can be done from a 
    % switch-case statement (if you want the switch-case statement 
    % can be placed in an external function). 

elseif ~mod(nargin,2) 
    %parse input pairs and do the calculations. 

else 
    error('wrong number of input arguments'); 
    % or 
    % fprintf('wrong number of input arguments\n'); 
    % set outputs to '', {}, [], ... 
    % return; 
end 

Надеюсь, это поможет, хотя это не совсем решение, предложенное вами. Это, однако, простое решение с тем преимуществом, что вы не смешиваете информационные части и детали исполнения. Я предполагаю, что это удобный способ работы с I/O без реализации сложного парсера.

Эти проблемы обычно решаются сложным парсером с множеством разных команд (сравните с терминалом (на основе unix) командной строки cmd (windows)).

Смежные вопросы