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

Von der GUI zum Workspace oder so...

 

Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 15:08     Titel: Von der GUI zum Workspace oder so...
  Antworten mit Zitat      
Hallo,

habe folgendes Problemchen:

Ich lade über eine GUI ein Array aus einer MAT-Datei. Klappt soweit. Dann will ich die einzelnen Zeilen an zwei schon im MATALB-Workspace vorhandene Variablen

Cycle.t und Cycle.v schicken...

Code:

    assignin('base', 'Cycle.t', vDat(1,:));
    assignin('base', 'Cycle.v', vDat(2,:));  
 


Daraufhin kommt folgende Fehlermeldung:
Code:

Error using ==> assignin
Invalid variable name "Cycle.t" in ASSIGNIN.
 


Was muss ich ändern, damit ich die vorhandenen Cycle.t bzw. Cycle.v überschreiben/ändern kann.

Danke für Eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



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


also Cycle.t und Cycle.v sind keine einfachen Variablen. assignin versucht die Eingabe als Variablennamen aufzulösen und da es Punkt findet, meckert es, weil in Variablennamen kein Punkt zulässig ist.


Möglichkeit 1: an Cycle Variable struct übergeben
Code:

assignin('base', 'Cycle', struct('t',vDat(1,:),'v',vDat(2,:)));
 


Möglichkeit 2: evalin zu nutzen was Ausdrücke akzeptiert.
Code:

    evalin('base', sprintf('Cycle.t=%d;', vDat(1,:)));
    evalin('base', sprintf('Cycle.v=%d;', vDat(2,:)));
 
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: 15.03.2010, 15:39     Titel:
  Antworten mit Zitat      
Hallo,

denny hat das richtig dargestellt. Ich hätte allerdings Zweifel, ob die EVALIN-Variante mit Vektoren funktioniert. Und bei der ersten Variante dürften eventuelle andere vorher existierende Felder von cycle verloren gehen, da die Variable komplett überschrieben wird.

Das Arbeiten mit evalin / assignin ist nicht unbedingt empfehlenswert, da es oft schwer nachzuvollziehen und zu debuggen ist.

Bei GUIs sollte man (sofern möglich) lieber mit getappdata / setappdata arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.03.2010, 15:48     Titel:
  Antworten mit Zitat      
Da stimme ich Harald zu,
hier ist besser setappdata/getappdata zu nutzen

Ach ja für Vektoren sollte es so gehen:
Code:

evalin('base', ['Cycle.t=[',num2str(vDat(1,:)),'];']);
evalin('base', ['Cycle.v=[', num2str(vDat(2,:)),'];']);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 15:52     Titel:
  Antworten mit Zitat      
Hallo,

danke für Eure schnellen Antworten.

1. Möglichkeit: Alle Daten kommen an, wie denny es voraussah...allerdings werden andere Felder gelöscht, womit Harald leider recht hat...

2. Hier kommt nur der letzte Wert an...also kein Vektor...

Somit funktionieren beide Varianten für mich nicht. Ich kann auch nicht erkennen, ob bzw wie setappdata helfen soll.

Ein Funktion, auf die ich keinen Einfluss nehmen kann, legt die Cycle struct im Workspace ab, die insgesamt 4 Felder umfasst. Ich muss 2 Felder davon ändern (s.o.) ... gibt es eine elegantere Möglichkeit, als die Daten aus dem Workspace zu ziehen und dann aus der FUnktion heraus Cycle mit 4 Feldern zu überschreiben (nach Variante 1)?

Und wie greife ich dann aus der Funktion auf die Variablen im Workspace zu? Ich kann die ja nicht einfach nutzen und assignin geht ja nicht in die andere Richtung...
Private Nachricht senden Benutzer-Profile anzeigen
 
Phipo
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 15.03.2010, 16:14     Titel:
  Antworten mit Zitat      
kann man die zwei cycle Variabeln nicht als globale Variablen definieren? Ist zwar keine besonders schöne Lösung da aber sollte funktionieren.

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.03.2010, 16:17     Titel:
  Antworten mit Zitat      
Hallo,

Es gibt noch 3 Möglichkeit. Diese Version sollte für dich passen

Code:

% Aus workspace Cycle komplett holen
Cycle= evalin('base','Cycle');

% verändern
Cycle.t = vDat(1,:);
Cycle.v = vDat(2,:);
% und zurückschreiben
assignin('base', 'Cycle', Cycle);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.03.2010, 17:00     Titel:
  Antworten mit Zitat      
Ja, die hatte ich ja angedeutet, danke für die Umsetzung. So funktioniert es.

Vielen Dank!
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.