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

Variable mit variablem Namen in base übergeben

 

Shin
Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 18.11.2010, 16:52     Titel: Variable mit variablem Namen in base übergeben
  Antworten mit Zitat      
Hallo Leute,
folgendes Problem:
Code:
p1 = getappdata(0,'p1');
Variable = getappdata(0,'Variable');
eval([p1 ' = Variable']);


In einer meiner GUI Funktionen lese ich Daten ein, die Inhalt und Name eines Vektors beinhalten:

Beispielsweise:
p1 = 'Wehr_OK_ist'
Variable = <2881x1 double>

Mit dem Befehl
Code:
eval([p1 ' = Variable'])
schreibe ich das passend um, so dass die Variable mit dem Inhalt den passenden Namen erhält:
Wehr_OK_ist = <2881x1 double>


So, nun möchte ich diese Variable (im Code weiß ich ja nicht wie sie heißt, da der Benutzer der GUI sie selbst auswählt) in den base Workspace übertragen, wo sie dort dann weiterverarbeitet wird (als mat file exportiert beispielsweise).

Jemand eine Idee?

Habe mit assignin rumgespielt, aber leider keine Lösung gefunden.


Gruß,
Chris.
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 18.11.2010, 19:49     Titel:
  Antworten mit Zitat      
Hallo,

1. eval vermeiden, den Grund hierfuer kannst du in unzaehlige Posts in diesem Forum finden.

Warum nicht einfach die bereits vorhandenen Variablen fuer z.B. den Export verwenden? Warum diese neue Variable noch umstaendlich mit eval erzeugen?
z.B.
Code:

p1 = getappdata(0,'p1');
Variable = getappdata(0,'Variable');
% mat-file Export
save(p1, 'Variable'); % p1 ist der Name des Mat-Files, Variable sind die Variablen die gespeichert werden
 


Auch das Abspeichern von Variablen im Workspace sollte vermieden werden, auch wenn du die richtige Funktion schon gefunden hattest, da dies zu schwer zu findenden Fehlern fuehren kann. Brauchst du es doch unbedingt muesste es so gehen:
Code:

assignin('base','new_name',eval(p1));
 

Aber das ist es ein Ausdruck, da bluten jeden auch nur wenig fortgeschrittenen Matlab-User das Herz (assignin und eval in einem Befehl ist wie eine Todsuende Smile ). Also bitte geh den oben genannten Weg.

Ps. Denn auch ich habe jetzt bestimmt 5 Minuten gesessen welcher Name nun der ist den du in die Base kopieren moechtest (eben wegen diesem eval Befehl), dich hat es zum kompletten scheitern gebracht...

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Shin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 117
Anmeldedatum: 12.11.09
Wohnort: Karlsruhe
Version: ---
     Beitrag Verfasst am: 19.11.2010, 15:22     Titel:
  Antworten mit Zitat      
edit
Oh, was red ich denn da. Du hast mir die Antwort ja schon in deinem zweiten, undorthodoxen Weg gesagt. Damit funktioniert es, danke!
Code:
assignin('base',num2str(p1),Variable);

Ich weiß nicht, warum da ich da gestern nicht draufgekommen bin. Damit ist auch der eval Befehl hinfällig.
______________________________________________


Hallo Sco, danke für deine Antwort, nur leider war das nicht genau das nach dem ich gesucht habe.

Mein eval Befehl gibt 'Variable' den Namen der in 'p1' steht, so dass nach:
Code:
eval([p1 ' = Variable']);
in meinem setappdata(0)-Workspace-Bereich-Irgendwas(?) eine Matrix/Vektor(Variable) mit einem im Code nicht (vor)definierten Namen existiert. Den nicht klar definierten Namen wollte ich gerne aus dem setappdata(0)-Workspace-Bereich-Irgendwas(?) rausbekommen.

Der Anwender soll am Ende der Prozedur irgendwo - meines Erachtens am besten im Workspace - die fertige Variable haben, die einen erkennensmöglichen Namen hat, und nicht nur Variable heißt. Der Name steckt eben als String in p1.

Wenn alle eingelesenen Daten im Workspace sind, hätte ich den einfach komplett als matfile exportiert. Da das Ganze eh als exe kompiliert wird, denke ich ist der Workspace-Weg nicht gaaaaanz so schlimm.

Da ich pro matfile nicht nur eine Variable speichern möchte, ist
Code:
save(p1, 'Variable')
leider keine Lösung für mich.

(Idee der GUI: Über eine Einlesefunktion kann der Nutzer aus verschiedenen Matfiles und darinliegenden Strukturen bestimmte und vorallem mehrere Variablen einlesen und später die ausgewählten Daten als externe matfile speichern, welche in einem separaten GUI ausgewertet werden.)

Gruß und Dank!edit
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 19.11.2010, 16:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Da ich pro matfile nicht nur eine Variable speichern möchte, ist
Code:
Code:

save(p1, 'Variable')
 

leider keine Lösung für mich.

Man kann auch mehrer Variablen mit einmal speichern, siehe Hilfe zu save! Also hau das assignin raus und mach es z.B. so:
Code:

% deine Daten
data1 = 1;
data2 = 2;
data3 = 3;
% deine Variablennamen in einer Cell
names = {'A','B','C'};
% Erzeuge Struct ("test") deren Feldnamen die Variablennamen sind und weise ihnen die Daten zu
test.(names{1}) = data1;
test.(names{2}) = data2;
test.(names{3}) = data3;
% Erzeuge mat-File
save('Mat_Name','-struct','test');
 


MFG

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