2013-07-18 9 views
0

matlab에는 파일 이름을 입력해야하는 함수가 있습니다. 이 파일은 구조체를 가지고 있습니다. 나중에 구조체가 작업 공간에로드되도록이 파일을 함수와 함께 실행해야합니다. 예를 들어matlab에 인수로 파일 이름을 전달합니다.

:

내 기능 '이'는 파일 이름이며,이 파일이 구조체를 가지고 hello(a)이다.

명령 창에서 파일을 실행할 때이 구조체가 작업 영역에로드됩니다. 동일한 방법으로 함수를 호출 할 때 구조체를 작업 영역에로드하려고합니다.

시도한이 eval(a),하지만이 작업 영역에 파일의 구조체를로드하지 않습니다.

파일 이름에서 파일에 구조체가 있음을 알고 있지만 어떻게 구조체 이름을 얻을 수 있습니까?하지만 동적으로 달라질 수 있습니다.

구조에서 함수를 어떻게 반환해야합니까?

+0

왜 파일을 선언하지 않을 것은 MATLAB으로 (MATLAB 스크립트)를 호출 할 [기능] (http://www.mathworks.fr/fr/help/matlab/ref/function.html) ? 이 함수는 원하는 구조를 출력합니다. 필자는 파일 이름에 대한 작업의 요지를 알지 못합니다. – marsei

+0

"network"라는 파일이 있는데이 파일에는 'Dom0.Dir1'이라는 구조체가 있습니다. 구조체 이름은 파일마다 다릅니다. "hello ('network')라는 함수를 통해 파일 이름을 전달합니다. "... 함수에서 구조체 이름을 얻어야합니다. 그래서 변수 및 구조체의 값에 액세스 할 수 있습니다. 전용 정보는 함수의 인수로 파일 이름입니다. –

+0

더 제공하십시오. 자세한 내용은 "네트워크"파일의 형식에 관한 –

답변

0

eval보십시오 : 예를 들어

function mystruct = readstruct(filename) 
% ... read in text from file here ... 
eval(text) 

, 파일은 텍스트 'mystruct.myval = 1'를 포함한다고 가정 해 봅시다, 다음 문자열 texteval(text) 반환

mystruct = 

    myval: 1 

을 파일 내용을 읽은 후에 구조를로드하려면 작업 공간에서 함수는 구조체를 반환해야합니다.

function mystruct = readstruct(filename) 
% ... read in text from file here ... 
% ... perform conversion of data type ... 
mystruct.value = values 
+0

내 이름이 텍스트는 구조체가 있습니다 ..하지만 그 이름을 모릅니다 .. 어떻게 파일의 구조체 이름을 얻을 수 있습니다. –

+0

어떻게 내 구조가 신비로운 지 알게 되겠습니까? –

+0

자세한 내용을 제공 할 수 있습니까? 이 파일이 이미 존재합니까? 그것을 (또는 관련 부분을 보여줄 수 있습니까?) 텍스트 (ascii) 파일 또는 .mat입니까?나의 예는 일반적이었다 : 나는 단지 구조 할당이 이루어진 텍스트 파일을 어떻게 읽을 수 있는지 보여준다. 다른 가능한 시나리오를 보여주기 위해 편집했습니다. –

1

난 당신이 구조체를 할 것인지 확실하지 않다 :

파일은 파일을 읽은 후 다음 단순히 구조에 할당 할 수 있습니다 (ASCII 형식으로 반드시 아마도 아니지만) 임의의 데이터가 포함 된 경우 (또는 구조체)를 자동으로 작업 영역에 복사하거나 데이터를 직접 할당하려는 경우.

다음 솔루션은 assignin() 기능을 사용하여 a 파일의 모든 변수를 "기본"작업 영역에 자동으로 복사합니다. 이 솔루션은 또한 .mat 파일 용 파일을 제공한다고 가정합니다.

function hello(a) 
    all_structs = load('-mat', a); 
    var_names = fieldnames(all_structs); 
    for k = 1:length(var_names) 
     assignin('base', var_names{k}, all_structs.(var_names{k})); 
    end 
end 
+0

그러나 이것은 기본적으로 MATLAB 현재 디렉토리에서 .mat 파일을 두 번 클릭하는 것과 같습니다. 아마도 이것은 당신이 원하는 것이 아닙니다. –

+0

"network"라는 파일이 있는데,이 구조체는 'Dom0.Dir1'입니다. 구조체 이름은 파일마다 다릅니다. 파일 이름은 "hello ('network')"라는 함수를 통해 전달됩니다. 함수와 함께, 나는 structs에서 변수와 값에 액세스 할 수 있도록 구조체 이름을 가져야한다. 정보는 functin의 인수로 파일 이름이다. –

+0

항상 " S = load ('arg1', 'arg2', ...) "형식의로드 함수. 구조체 S는 파일의 모든 변수를 포함합니다. function fieldnames()를 지능적으로 사용하는 것이 필요할 수도 있습니다. 위의 함수를 살펴보면 두 가지 방법을 모두 사용합니다. –

관련 문제