2016-07-19 4 views
1

몇 가지 필드가 포함 된 구조를 만들었습니다. 이 필드에는 다양한 주제/참가자의 데이터가 들어 있습니다.Matlab의 변수 구조체 이름

prompt='Enter the subject number in the format SUB_n: '; 
SUB=input(prompt,'s'); 

예 SUB_34을 34 주제에 대해 : 내가 지금처럼 "제목 번호"를 입력하라는 메시지를 표시 스크립트의 시작 부분에서

.

내 구조에이 문자열이 포함되도록 이름을 지정하고 싶습니다. 예를 들어 내 구조의 이름을 SUB_34으로 지정하고 싶습니다. SUB_34.field1. 그러나 나는 이것을 어떻게하는지 모른다.

내가 field1을하려는 경우 구조 S에 대한 예를 들어 특정 필드 이름에 문자열을 할당 할 수 있다는 사실을 알고는 z 다음

S=struct; 
field1='z'; 
S.(field1); 

작품을 호출 할 수 있지만 구조 이름에 대해 작동하지 않습니다.

아무도 도와 줄 수 있습니까?

감사

+0

하나의 옵션은 좋은 프로그래밍 습관이 아니지만'eval'을 사용합니다 :'eval ([SUB '= struct'])'는 이름이 SUB의 내용 인 구조체 변수를 생성합니다. –

답변

7

보다는 SUB_34라는 이름의 생성 구조는 내가 강하게 대신 단지 구조체의 배열을 사용하여 사용자가 간단하게 입력 주제 을 가지고 추천 할 것입니다.

number = input('Subject Number') 
S(number) = data_struct 

그런 다음 당신은 단순히 다시 사용하여 찾을 수 :

subject = S(number); 

당신이 정말로 그것을 주장하는 경우, 구조체를 얻을 수 eval를 사용 @Sembei하여 코멘트에서 제안 된 방법을 사용 .

: 당신은 정말 should not do this though

S = eval([SUB, ';']); 

또는

eval([SUB, ' = mydata;']); 

한 (많은) 구조를 설정하는이 내가 당신의 프롬프트에서 다음을 입력 할 수 있다는 것입니다 할을하지 추론

>> prompt = 'Enter the subject number in the format SUB_n: '; >> SUB = input(prompt, 's'); >> eval([SUB, ' = mydata;']); 

그리고 다음을 입력합니다.

clear all; SUB_34 
eval이 명령으로 입력 문자열을 평가하기 때문에이 데이터의 모든을 제거 할 것이라는 예측하지 못한 결과있을 것입니다. 사용자 입력에 eval을 사용하면 사용자가 실수로 또는 다른 형식의 무언가 또는 악의적 인 내용을 절대로 쓰지 않을 것이라고 가정합니다.

+4

설명은 확장 토론이 아닙니다. 이 대화는 [채팅으로 이동되었습니다] (http : //chat.stackoverflow.co.kr/rooms/117732/discussion-on-answer-by-suever-struct-name-from-variable-in-matlab)을 참조하십시오. –