2016-11-28 70 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

您的意思是這樣的?保存-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到當前對象的myStructChannel財產Channel領域。它所實際上確實等效於調用:

myStruct = struct('Channel', Channel); 

也就是說,你在configureChannel當前工作區/範圍創建一個新的局部變量而不實際更新對象的屬性,obj

所以,你需要做的第一校正是你如何在你的setter訪問myStruct

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');