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

Save einer Variable vom WS mit Namensänderung der Variable

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 24.12.2015, 15:48     Titel: Save einer Variable vom WS mit Namensänderung der Variable
  Antworten mit Zitat      
Hallo und Frohe Weihnachten,

hab mal wieder eine Frage.

Und zwar speichere ich automatisiert nach einer Berechnung Variablen aus dem Workspace:

Code:

save([WorkingDir, '\', filename,'_',Tmag, '_n_BP2.mat']   , 'n_BP');
save([WorkingDir, '\', filename,'_',Tmag, '_T_BP1.mat']   , 'TorqueRow');
save([WorkingDir, '\', filename,'_',Tmag, '_Wst_TD.mat']  , 'Wst_TD');
save([WorkingDir, '\', filename,'_',Tmag, '_Wro_TD.mat']  , 'Wro_TD');
 


Nun habe ich aber das Problem das ich das ganze 3 mal machen muss und ich die Daten aus allen 3 Berechnungen zusammen in das Workspace laden muss.
Da aber die Namen der Variablen alle gleich sind würden die sich gegenseitig überschreiben.

Gibt es die Möglichkeit einen "flexiblen" Variablennamen zu erstellen ?

Sprich, ich habe einen Wert der sich bei jeder Berechnung ändert z.B.

Code:
Tmag = max(TmagPRF); %35, 100, 180
Tmag = num2str(Tmag);


und diese Zahl als String würde ich dann gerne an den Variablennamen dran hängen .

Das wenn ich die Variablen dann in den Workspace lade es so aussieht:

n_BP_35
n_BP_100
n_BP_180

ich danke euch im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen


JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 24.12.2015, 16:22     Titel:
  Antworten mit Zitat      
Eine Lösung zum ändern des Namen habe ich gefunden:

Code:
Tmag = max(TmagPRF);
Tmag = num2str(Tmag);
n_BP1 = rot90(SpeedColumn);
assignin('base',sprintf(['n_BP2','_',Tmag],i),n_BP1);
Wst_TD = rot90(WstatMTX);
assignin('base',sprintf(['Wst_TD','_',Tmag],i),Wst_TD);
Wro_TD = rot90(WrotMTX);
assignin('base',sprintf(['Wro_TD','_',Tmag],i),Wro_TD);
T_BP1 = TorqueRow;
assignin('base',sprintf(['T_BP1','_',Tmag],i),T_BP1);


Nur weiß ich dann nicht weiter, also wie ich diese dynamischen/flexiblen Namen abspeichern kann bzw. zum abspeichern verwenden kann.

Wenn ich einen Breakpoint nach dieser Stelle setze erscheinen die Variablen nicht im Workspace. Erst wenn ich den Debugging Modus beende. Hat es was zu tun das die Berechnung von einer GUI gestartet wird ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.12.2015, 18:19     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Da aber die Namen der Variablen alle gleich sind würden die sich gegenseitig überschreiben.

Nur wenn du kein Argument von load zurückholst. Wenn du mit einem (bei jedem Aufruf anderen) Rückgabeargument arbeitest, wird nichts überschrieben.

Code:
data35 = load(...)
data100 = load(...)
...


Zitat:
Hat es was zu tun das die Berechnung von einer GUI gestartet wird ?

Ja, denn du legst die Variablen im Base Workspace, nicht im momentanen Workspace ab. Sehen kannst du die Variablen übrigens trotzdem, indem du in den Base Workspace schaltest.

Empfehlenswert ist das Arbeiten mit assignin aber ohnehin nicht. Abhilfe siehe oben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.12.2015, 02:39     Titel: Re: Save einer Variable vom WS mit Namensänderung der Varia
  Antworten mit Zitat      
Hallo JaSoIstEs,

Die Werte von Daten im Namen einer Variablen zu verstecken ist grundsätzlich eine schlechte Idee. Daten und Programm zu trennen macht Programme flexibel und wartbar.

Vorschlag:
Code:
tMagStr = num2str(Tmag);
save(fullfile(WorkingDir, [filename,'_',TmagStr, '_n_BP2.mat']), 'n_BP', 'Tmag');
...
Data = load(fullfile(WorkingDir, [filename,'_',TmagStr, '_n_BP2.mat']));

Nun stehen in Data die Felder "n_BP" und "Tmag". Data kann man auch in ein Struct-Array einlesen. Nun wäre es kein Problem auch 100'000 Messungen zu verwenden oder mehrere Messungen mit dem selben Wert für Tmag.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 25.12.2015, 12:14     Titel:
  Antworten mit Zitat      
Hallo.

danke für beiden Lösungsvorschläge.
Funktionieren auch wie von euch beschrieben.
Nur ist das nicht ganz was ich gesucht habe.

Ich glaube das für mich gewünschte Ergebnis erziele ich glaube ich mit dem so unbeliebten assignin.

Code:

assignin('caller',sprintf(['T_BP1','_',Tmag]),T_BP1);
save([WorkingDir, '\', filename,'_',Tmag, '_T_BPsibi.mat']   , ['T_BP1','_',Tmag]);


Nur bekomme ich dann den Fehler das er die Variable nicht findet weil ich mal wieder zu blöd bin assignin richtig anzuwenden.

Hab es auf Caller gesetzt, trotzdem wird es mir nicht angezeigt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.12.2015, 12:50     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Nur ist das nicht ganz was ich gesucht habe.

Was hast du denn gesucht?
Das von dir geschilderte Problem wird so jedenfalls elegant gelöst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 25.12.2015, 13:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

die Daten sollen später in ein Simulink-Modell eingespeist werden.

Es wird insgesamt 3 Lookuptables geben.

Im Prinzip für jede Temperatur (35, 100, 180) eine.

n und T werden für alle 3 gleich sein lediglich die anderen zwei Daten werden sich für alle drei unterscheiden.

Um hier den User etwas Bedienerfreundliches zu liefern wollte ich das er einfach die 3 Mat-Files in das Workspace zieht ohne vorher eine weitere M-File starten zu müssen um alles zu laden.

In dem Programm jetzt wird selber nichts mehr geladen sondern nur abgespeichert.
Deswegen wollte ich ohne Umwege die Werte einfach schon unbenannt abspeichern. Da sich die 3 Temp. verändern können wollte ich es mit Hilfe von assignin flexibel halte.

Nur vergesse ich leider laufend die richtige Handhabung von assignin da ich es so selten verwende.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.12.2015, 13:22     Titel:
  Antworten mit Zitat      
Hallo,

und wie soll zwischen den drei Varianten hin- und hergeschaltet werden?
Wäre das nicht z.B. etwas für ein configurable subsystem?

Oder warum nicht den Nutzer die zu ladende .mat-Datei wählen lassen, z.B. über uigetfile ?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.12.2015, 14:11     Titel:
  Antworten mit Zitat      
Zitat:
und wie soll zwischen den drei Varianten hin- und hergeschaltet werden?


Es soll nicht hin und her geschaltet werden.
Die erste Berechnung läuft mit z.B. 35°C und speichert die Daten mit dem zusatz 35°C.

Dann kommen die Berechnungen mit anderen zwei Temperaturen und diese speichern jeweils die Daten mit der jeweiligen Temp.

Das was ich will habe ich ja mit assignin realisiert. Nur brauche ich da nochmal Hilfe das ganze in die richtige Workspace zu schreiben.

Zitat:
Oder warum nicht den Nutzer die zu ladende .mat-Datei wählen lassen, z.B. über uigetfile ?


Wäre auch eine option. Könnte man realisieren wenn das oben nicht klappt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.12.2015, 22:41     Titel:
  Antworten mit Zitat      
Hallo,

dann wäre mein Vorschlag als Pseudo-Code

Code:
matfiles = {Cell Array mit zu ladenden .mat-Dateien}
for I = 1:numel(matFiles)
load(matFiles{I}) % oder alternativ Jans Vorschlag
% Durchführen der Simulation z.B. mit sim
save(...) % Speichern unter gewünschtem Namen
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.12.2015, 12:55     Titel:
  Antworten mit Zitat      
Hab das jetzt mittels uigetfile gelöst.
War jetzt der einfachste und schnellste Weg.

Vielen Dank euch beiden.

Ich wünsche euch einen guten Rutsch ins neue Jahr.
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 - 2025 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.