2016-11-28 1 views
0

Ich habe eine Klasse mit einer struct Eigenschaft myStruct genannt:speichert Matlab-Eigenschaft auf eine Matte Datei

properties 
    myStruct; 
end 

Ich mag würde die Struktur auf eine .mat Datei speichern. Ich habe versucht:

save -append registers.mat myStruct; 

Aber es gibt den Fehler:

Variable 'myStruct' not found. 

Ich habe verschiedene Funktionen für die struct Aktualisierung, wie:

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 

Diese sind alle Funktionen der gleichen Klasse.

+0

Sie müssen Ihre Klasseneigenschaft mit dem Klassennamen voranstellen. – excaza

+0

Du meinst so? save -appt registers.mat myClass.myStruct Es funktioniert nicht. – user1876942

+0

Versuchen Sie 'save -appregate.mat obj.myStruct;'. Wenn es nicht funktioniert - lege es in eine temporäre Variable, dann speichere die Variable ('a = obj.myStruct; save ...'). Außerdem bin ich mir ziemlich sicher, dass Sie eine neue lokale Variable erstellen, wenn Sie 'myStruct.Channel = Channel;' Sie sollten 'obj.myStruct.Channel = Channel;' stattdessen tun. –

Antwort

2

Ich denke, dass das Hauptproblem in diesem Code ist, wie Sie myStruct von Ihren Funktionen zugreifen. Werfen Sie einen Blick auf das folgende Stück Code:

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

Was Sie soll denn es war tun Channel in das Channel Feld des aktuellen Objekts myStruct ‚s Channel Eigenschaft zuweisen. Was es tatsächlich tut, ist äquivalent zu nennen:

myStruct = struct('Channel', Channel); 

Das heißt, Sie einen neu lokal Variable im aktuellen Arbeitsbereich/Umfang configureChannel, ohne tatsächlich die Eigenschaft des Objekts zu aktualisieren, erstellen obj .

So ist die erste Korrektur Sie machen müssen, ist, wie Sie myStruct in Ihrem setter Zugang:

obj.myStruct.Channel = Channel; 

nächstes die Frage des Sparens ist.

Wenn eine Kopie eines in eine Datei Feld des Objekts Dumping, würde ich save erwarten, dass Ihr beliebiges Objekt als struct, zu behandeln und so struct saving conventions gelten soll:

'-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 .

So würde ich folgende erwarten arbeiten Haftungsausschluss: ich habe es nicht getestet:

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

Andere Alternativen falls nicht die oben:

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

Eine letzte Sache - wie Sie vielleicht bemerkt haben, ich bin die Funktion Form von save verwenden, weil ich es für besser verwaltbar/lesbar sein/narrensicher:

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