WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Speichern von Objektinhalten über Laufzeitvariable

 

Headfield
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 01.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2014, 15:26     Titel: Speichern von Objektinhalten über Laufzeitvariable
  Antworten mit Zitat      
Hallo in die Runde,

ich habe eine Schleife, in der während jedem Zyklus ein Objekt erstellt und die verschiedenen Properties berechnet werden. Jetzt möchte ich gerne für jeden Zyklus dieses Objekt abspeichern und nach Ablauf aller Zyklen auf die verschiedenen Properties der einzelnen Zyklen zugreifen.

Hätte ich eine einfache Matrix, würde ich einfach eine weitere Dimension aufmachen und dort jede Matrix zugehörig zu jedem Zyklus abspeichern. Bei Objekten scheint das aber nicht so einfach zu funktionieren Wink

Könnte mir jemand erläutern, wie ich diese Objekte zwischenspeichern kann?

Vielen Dank im Voraus und viele Grüße!
Mirko
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.09.2014, 15:13     Titel:
  Antworten mit Zitat      
Hallo

Möglichkeiten
1) SAVE vewenden, also jedes Objekt im File abspeichern

2) STRUCT verwenden um aus Objekt-Properties eine Struct zu erzeugen, kann man dann daraus Array of Struct konstruieren

3) CELL nutzen um Objekte nach jedem Zyklus abzuspeichen

4) Array of Objekts erzeugen, dazu empty-Funktion der Klasse nutzen
http://www.mathworks.com/help/matla.....arrays.html?nocookie=true

Also die einfachste Möglichkeit wäre Cell, so in der Art
Code:

z = cell(1,10)

for k =1:10
   z{k} = Zyklus();
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
igotBAWS
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 15:56     Titel:
  Antworten mit Zitat      
Hallo, ich habe eigentlich das selbe Problem wie der Thread-Ersteller, und dachte mir, ich klaue seinen Thread Twisted Evil

Beispiel bei mir:
Code:

Classe welche Obj1 und Obj2 erstellt.


Code:

Funktion eigenschaftenveraendern (obj1, obj2, a, b)

Schleife...
Bedingung1:
obj1.setAnzahl = a; %Property Anzahl wurde auf a gesetzt
obj2.setAnzahl = b;

Bedingung2:
obj2.setAnzahl = b*10;
Schleife ende...

end


Ich habe damit gekämpft, dass ich verstehe, warum obj1.Anzahl [] liefert.
Dabei dachte ich, dass ich falsch zuweise, aber wenn ich in der Commandline obj1.setAnzahl = a mache, wird obj1 wirklich verändert.

Dann bin ich dank dem Debugger drauf gekommen, dass er wirklich was macht, und dann nachdem Anzahl = a gesetzt worden ist, er dann GLOBAL nichts abspeichert.

Wie soll ich das jetzt in meinem Beispiel machen, dass ich für immer und ewig die Werte der Objekten verändere?

Hoffe es ist verständlich, wenn nicht, wird's von mir noch klarer gesagt!
Danke schon im Voraus!


ps. Ich habe es mit save Objekaenderung und es hat alles in dieser datei gespeichrt. Jedoch hat dann iwie load Objektaenderung nichts in der Schleife geladen. Also musste ich immernoch händisch eingreifen.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.02.2015, 16:41     Titel:
  Antworten mit Zitat      
Hallo
Zitat:
Code:
Bedingung1:
obj1.setAnzahl = a; %Property Anzahl wurde auf a gesetzt
obj2.setAnzahl = b;

wenn setAnzahl eine Methode ist, dann rufst doch diese Falsch

sollte doch
Code:

obj1.setAnzahl(a)
obj2.setAnzahl(b)


Oder war es hier nur falsch gepostet, weil sonst hättest du doch eine Fehlermeldung erhalten müssen. Jedefalls poste bitte den Code, wie es bei dir wirklich ist.

oder schreibe ein lauffähiges Beispiel, wo man dein Problem nachvollziehen kann:

z.B:
sei folgende Klasse gegeben
Code:
classdef setprop < handle
properties
   Anzahl
end
methods
   
   function obj = setprop()
   end
   
   function setAnzahl(obj, anz)
      obj.Anzahl = anz;
   end
   
   function anz = getAnzahl(obj)
      anz = obj.Anzahl;
   end
end


end

 




Aufruf wäre:
Zitat:

>> obj1 = setprop()
>> obj1.setAnzahl(5)
>> obj1.getAnzahl

ans =

5

oder
>> obj1.setAnzahl(5*2)
>> obj1.getAnzahl

ans =

10



wie du siehst wird hier die Property richtig verändert, also bitte ich von dir auch ein nachvollziehbares Beispiel
Private Nachricht senden Benutzer-Profile anzeigen
 
igotBAWS
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.02.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2015, 17:00     Titel:
  Antworten mit Zitat      
Hallo denny! Danke mal für die rasche Antwort. Jetzt bin ich zuhause! Very Happy

So weiß nicht ob das von Bedeutung ist, aber ich benutze Matlab2014a.

Code:
classdef PortfolioX
   properties
      name;
      anzahl=0;
      myValue=0;
      handeln;
      preis=0;
   end

 function [this, portfolio1] = setAnzahl(this, portfolio1, AktienAnzahl, AktienPreis)
  ....
  this.preis = ...
  portfolio1.value = ...
...
 

Code:

function StartTrading(DDD, Portfolio)
%if text.mat
load test.mat
%end

%Aktie = DDD;
DDD.handeln = 'buy';
    %Anzahl an Aktien die gehandelt werden und deren aktueller Preis
    [DDD, Portfolio] = setAnzahl(DDD, Portfolio, 200, 5);

    save test.mat
load test.mat

 


1. Ich konstruire mir dann zwei Objekten: DDD, Portfolio mit leeren Eigenschaften.

2. Ich starte die Funktion folgendermaßen: StartTrading(DDD, Portfolio)

3. Ergebnis: Nichts hat sich bei meinem Workspace geändert. (Außer ich drücke auf test.mat, aber das will ich automatisiert iwie haben).

Ich finde save / Load nicht schön, gibt es da eine elegantere Lösung ? Very Happy

Bei mir funktionierts das Aktuallisieren den Werte, falls ich folgendes in der Command Line schreibe:
DDD.handeln = 'buy'
[DDD, Portfolio] = setAnzahl(DDD, Portfolio, 200, 5);

DDD =

PortfolioX with properties:

name: '3D Printers'
anzahl: 200
myValue: 0
handeln: 'buy'
preis: 5
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.