2014-11-04 124 views
0

我不得不在結構中加載一些數據。從matlab中的結構讀取數據

我在裏面做一個函數。

假設我的結構被稱爲

loaddata

和數據都在

loaddata.corrected_data

我怎麼能訪問它的函數內?

function loaddata_struct(path,namestruct) 
    loaddata = load(path); 
    data = loaddata.corrected_data; % this should change depending on the argument of the function (namestruct in this case) 
end 

我該如何傳遞結構的名稱?在這種情況下corrected_data ...

回答

1

下面的代碼將返回結構的場傳遞給loaddata_struct名稱功能:如果你

fieldOfInterest = 'corrected_data'; 

data = loaddata.(fieldOfInterest); 

function data = loaddata_struct(path,namestruct) 
    loaddata = load(path); 
    data = loaddata.(namestruct); 
end 
1

使用getfield,如果你需要一個1 x N大小的結構陣列上工作 -

function loaddata_struct(path,fname) 

loaddata = load(path); 
for k1 = 1:numel(loaddata) 
    data{k1} = getfield(loaddata(k1),fname); 
end 

return; 

因此,你可以使用它像這樣 - loaddata_struct(path,'corrected_data')

+0

是否可以使用genvarname? – gabboshow 2014-11-04 10:54:30

+0

@ gabboshow你的意思是一個通用的函數代碼,我們可以改變字段名? – Divakar 2014-11-04 10:57:56

+0

是的...無論如何,ymihere的答案是我正在尋找的...我不知道你可以這樣訪問.. – gabboshow 2014-11-04 11:00:01

-1

待辦事項它作爲文本並使用isfieldevalIsfield將檢查字符串是否爲結構體的字段,如果是,則使用eval來評估loaddata.fieldname。例如,使用isfield可以確保永遠不會出現錯誤,並且可以在else中執行其他操作,例如查找與所插入數據名稱最相似的數據。

function loaddata_struct(path,fieldname) 
    loaddata = load(path); 
    if isfield(loaddata ,fieldname) 
    data = eval(strcat('loaddata.',fieldname)); 
    else 
    error('Heeey mate, thats not a field') 
    end 
end 
+0

Downvote?這工作... – 2014-11-04 14:43:36

2

您可以使用動態字段名像這樣從文件加載,還可以直接訪問數據

data = load('theDataFile.mat','-mat',fieldOfInterest) 
+0

噢,這個工程?太好了! – 2014-11-04 10:56:38