2013-07-18 4 views
1

변수에 'int'라는 변수가 있습니다. 나는 프로그램 적으로이 변수의 이름을 사용자 입력으로 바꾸는 방법을 찾고 싶다. 그래서 나는 데이터에 대한 사용자 indentifcation 정보를 질의 할 수있다. 응답은 'AA1'이고, 변수 'int'를 'AA1'로 바꾸거나 'AA1'을 int와 동일한 변수로 변경하고 싶다.MATLAB은 변수 이름을 지정합니다.

input 명령을 사용할 때 발생하는 문제는 변수 이름을 실제로 생성하는 대신 사용자가 이미 생성 된 varialbe에 값을 할당 할 수 있기 때문입니다. eval 함수 또는이 함수를 변형하여 사용하면 도움이 될까요? 아니면 더 쉬운 방법이 있습니까?

감사합니다.

+0

왜 사용자가 변수 이름을 변경 할 것이다 :

방금 ​​다음을 수행, 데이터에 얻으려면? 일반적으로 사용자가 프로그램의 기본 구현에 영향을 미치도록하는 것은 좋지 않습니다. 단순히이 데이터를 사용자가 지정한 문자열과 연관시키지 않는 이유는 무엇입니까? –

+0

변수가 'int'로 불리는 이유는 무엇입니까? 이름을 바꾸려하는 이유는 무엇입니까? 이미 다른 사람이 만든 변수입니까? – NKN

+0

세로, 강도 및 시간을 나타내는 세 가지 변수 인 "vert" "int"및 "time"이 있습니다. 나는이 모든 것을 사용자 이름에 의존하는 구조로 만들고 싶습니다. 이것은 AFM 시스템을위한 것이며 사용자는 테스트중인 캔틸레버의 이름을 입력하려고합니다. 사용자는 여러 개의 캔틸레버를 테스트 할 것이고 각 캔틸레버에 어떤 데이터가 있는지를 기록하는 방법을 원합니다. 따라서 이름을 식별 도구로 사용하는 다른 varialbe 또는 strucutre ---의 이름을 바꾸거나 작성합니다. –

답변

2

단지 기록을 위해 int은 다소 불리한 변수 이름 선택입니다. 옆으로, 당신은

를 다음과 같이 당신이 원하는 무엇을 할 수

foo는 사용자 입력이 문자열을 보유하고있는 변수 말한다. 다음과 같은 작업을 수행 할 수 있습니다 다음과 같이

int (지금 foo가) bar라는 이름의 필드 구조입니다 가정
% eliminate leading/trailing whitespace 
foo = strtrim(foo); 
a = regexp('[a-zA-Z][a-zA-Z0-9_]*',foo)); 
if numel(a) == 0 
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo); 
elseif a ~= 1 
    fprintf('Sorry, %s is not a valid variable name in matlab\n', foo); 
elseif 2 == exist(foo,'var') 
    fprintf('Sorry, %s already in use as a variable name.'); 
else 
    eval([foo,' = int']); 
end 

, 당신은 줄을 읽을 수 있습니다

barVal = eval([foo,'.bar']); 

이 모두 다소 투박하다.

또 다른 접근법은 연관 배열을 사용하고 사용자가 배열에 다양한 int 값을 저장하게하는 것입니다. 연관 배열을위한 Matlab 방식은 Maps입니다. 그것은이 문제에 대해 제가 선호하는 접근 방법이 될 것입니다. 다음은 위와 같은 변수를 사용하는 예입니다.

nameValueMap = containers.Map; 
nameValueMap(foo) = int; 

상기는 가변 int의 데이터와 foo에 저장된 이름 사이의 관계를 생성한다.

intValue = nameValueMap(foo); 
+0

세로, 강도 및 시간을 나타내는 세 가지 변수 인 "vert" "int"및 "time"이 있습니다. 나는이 모든 것을 사용자 이름에 의존하는 구조로 만들고 싶습니다. 이것은 AFM 시스템을위한 것이며 사용자는 테스트중인 캔틸레버의 이름을 입력하려고합니다. 사용자는 여러 개의 캔틸레버를 테스트 할 것이고 각 캔틸레버에 어떤 데이터가 있는지를 기록하는 방법을 원합니다. 따라서 이름을 식별 도구로 사용하는 다른 varialbe 또는 strucutre ---의 이름을 바꾸거나 작성합니다. –

+0

@GregDimock, 예, 그러면 연관 배열을 사용해야합니다. 위에 명시적인 예제를 추가했습니다. – John

관련 문제