2014-11-04 110 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