2013-07-18 41 views
0

matlab我有一個函數,它應該帶一個文件名。 該文件在其中有一個結構體,稍後應該在該函數中執行該文件,以便該結構體將被加載到工作空間中。在matlab中傳遞一個文件名作爲參數

例如:

我的功能hello(a),其中 'A' 是一個文件名,這個文件有一個結構。

在命令窗口中執行該文件時,該結構將被加載到工作區中。 同樣的方法,我希望結構被加載到工作區,當我調用該函數。

我試過eval(a),但是這不會將該文件中的結構加載到工作區中。

從文件名我將如何獲得結構名稱,即使我知道文件中有一個結構,但這將會動態變化。

那麼應該如何返回函數結構呢?

+0

你爲什麼不申報文件被稱爲(MATLAB腳本)作爲MATLAB [功能](http://www.mathworks.fr/fr/help/matlab/ref/function.html) ?該功能將輸出所需的結構。我不明白處理文件名的問題。 – marsei

+0

我有一個名爲「網絡」的文件,這有一個名爲'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 

後結構裝入工作區,函數應該返回結構。

如果文件中包含的任意數據(可能但不一定以ASCII格式),那麼你可以簡單地把它分配給一個結構讀取完畢後:

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

我的文件名爲文本有一個結構在它..但我不知道它的名字..我怎麼能得到該文件中的結構的名稱。 –

+0

我將如何知道我的結構是mystruct –

+0

您能否提供更多詳細信息?這個文件是否已經存在?你可以顯示它(或相關的部分?)它是一個文本(ascii)文件或.mat?我的例子是通用的:我只是展示瞭如何在一個文本文件中讀取結構分配。我編輯顯示不同的可能情況。 –

1

我不知道你是否希望在結構(或結構體)自動複製到工作區,或者您想自己分配數據。

以下解決方案使用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

我有一個名爲「網絡」的文件,這有一個名爲'Dom0.Dir1'.Struct名稱不同的文件結構名稱不同。我通過名爲「hello('網絡')」函數傳遞文件名稱.. ..在函數中,我必須獲取結構體名稱,以便我可以訪問結構體中的變量和值。只有我發送的信息是文件名作爲functin中的參數 –

+0

您可以隨時使用「 S = load('arg1','arg2',...)「形式的加載函數。結構S將包含文件中的所有變量。功能fieldnames()的一些智能使用可能也是必要的。看看我上面的函數,我在那裏使用了兩種方法。 –