2016-11-28 3 views
0

У меня есть класс с struct собственности под названием myStruct:Сохранить Matlab свойство в мате файл

properties 
    myStruct; 
end 

Я хотел бы сохранить-структуру в .mat файл. Я пробовал:

save -append registers.mat myStruct; 

Но это дает ошибку:

Variable 'myStruct' not found. 

У меня есть различные функции для обновления struct, как:

function configureChannel(obj, Channel) 
     myStruct.Channel = Channel; 
     save -append registers.mat myStruct; 
    end 

    function updateConfiguration(obj, dataPath) 
     myStruct.EN = 1; 
     save -append registers.mat myStruct; 
    end 

Это все функции одного и того же класса.

+0

Вам необходимо добавить свойство класса с именем класса. – excaza

+0

Вы имеете в виду вот это? save -append registers.mat myClass.myStruct Не работает. – user1876942

+0

Попробуйте 'save -append registers.mat obj.myStruct;'. Если он не работает - поместите его во временную переменную, затем сохраните переменную ('a = obj.myStruct; save ...'). Кроме того, я уверен, что вы создаете новую локальную переменную, когда вы выполняете 'myStruct.Channel = Channel;' Вместо этого вы должны использовать 'obj.myStruct.Channel = Channel;'. –

ответ

2

Я думаю, что основная проблема в этом коде заключается в том, как вы получаете доступ к функциям myStruct. Взгляните на следующий фрагмент кода:

function configureChannel(obj, Channel) 
    myStruct.Channel = Channel; 
    ... 
end 

Что вы предназначены для того, чтобы сделать, чтобы назначить Channel в Channel области Channel собственности myStruct «s текущего объекта. Что фактически делает эквивалентно вызову:

myStruct = struct('Channel', Channel); 

То есть, вы создаете новую локальную переменную в текущем рабочем пространстве/объем configureChannel, без фактического обновления свойство объекта, obj ,

Таким образом, первая поправка вам нужно сделать, как получить доступ к myStruct в вашем setter:

obj.myStruct.Channel = Channel; 

Далее это вопрос экономии.

При демпинг копию поля объекта в файл, я ожидал бы save лечить ваш произвольный объект как struct и так struct saving conventions должны применяться:

'-struct',structName | Store the fields of the scalar structure specified by structName as individual variables in the file. For example, save('filename.mat','-struct','S') saves the scalar structure, S .

Таким образом, я хотел бы ожидать следующее работать отказ от ответственности: я не проверял это:

save('filename.mat','-struct','obj.myStruct'); 

Другие варианты в случае, если это не поможет:

save('filename.mat','obj.myStruct');   % Alternative #1 
tmp = obj.myStruct; save('filename.mat','tmp'); % Alternative #2 

Одна последней вещи - как вы, возможно, заметили, я использую функцию форму save, потому что я считаю, что это более ремонтопригодно/читаемыми/дурак:

save(filename,variables,'-append');