2014-11-04 3 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 функции:

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

+0

@gabboshow Вы имеете в виду общий код функции, в котором мы можем изменить имя поля? – Divakar

+0

да ... в любом случае ответ ymihere - это тот, который я искал ... Я не знал, что вы могли бы получить такой доступ. – gabboshow

-1

Do это как текст и использовать isfield и eval. Isfield проверяет, является ли строка полем структуры, и если да, то используйте eval для оценки loaddata.fieldname. Используя isfield, вы убедитесь, что никогда не получаете ошибку, и вы можете делать что-то в другом, например, найти данные, которые имеют наиболее похожее имя, например, вставленное.

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? Это работает ... –

2

Вы можете использовать динамические названия полей, как так:

fieldOfInterest = 'corrected_data'; 

data = loaddata.(fieldOfInterest); 

Если вы вы также можете получить доступ к данным напрямую

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

О, это работает? Ницца! –

Смежные вопросы