2014-10-18 11 views
0

수많은 이름 - 값 매개 변수 입력을 가진 Matlab function이 있습니다. 일부 매개 변수 이름에는 사용자가 선택할 수있는 가능한 많은 값 (항상 명확하지는 않음)이 있습니다. 내가 무엇을하고 싶은지, IF 사용자가 이름을 호출하지만 값을주지 않는다. THEN Matlab은 가능한 항목을 으로 표시 한 다음 사용자 입력을 표시합니다. 사용자가 명령 창 등의 함수를 호출한다면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': 

메시지를 표시 것이다 내가 C로 ould는 result=input(prompt) 기능을 사용하십시오.

모든 도움이나 조언을 보내 주시면 대단히 감사하겠습니다. 건배

+0

코드를 읽는 데 어려움을 겪고 있습니다. 따라서 이름 - 값 쌍을 취하는 함수를 이미 사용할 수 있다고 말했습니까? 이 이름 값은 어떻게 시작 되나요? 당신의'getSomeData' 함수는 디폴트 데이터를 설정 한 다음'parse'라는 함수를 사용합니다. 'parse'는 무엇을합니까? ** 모든 ** 코드를 표시 할 수 있습니까? – rayryeng

답변

0

입력 사항의 복잡성을 지정해 줄 것을 요청할 수 있습니다. Java에서 왔고 입력을 읽을 수 있도록 I/O 객체를 만들어야한다고 생각하거나 그렇지 않으면 설명이 인상을주는 것이 더 복잡합니다.

그렇지 않으면 내가 덜 복잡한 방법을 제시 할 것입니다. 이를 수행하는 한 가지 방법은 함수에 대한 입력 수를 찾는 nargin 속성을 사용하는 것입니다. nargin과 함께 if 문 (또는 switch-case?)을 사용하십시오.

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로 작업하는 편리한 방법이라는 것입니다.

이 문제는 보통 다른 명령이 많은 복잡한 파서 (cmd 프롬프트 (창)의 터미널 (유닉스 기반)와 비교)를 통해 정상적으로 해결됩니다.