|
mr90 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2011, 11:54
Titel: string als Variablenname
|
 |
Hallo
Ich habe folgendes whs sehr einfaches Problem. Mir liegt der Variablenname als String vor. Nachdem ich mich das Netz und die Help durchstöbert habe, scheint es als könnte man das Probelm mit assignin lösen. Leider schaffe ich es nicht das mein Programm wie gewünscht funktioniert.
Vereinfacht dargestellt sieht mein Programmcode folgendermaßen aus.
In diesem Fall scheint die cell2mat Konvertierung sinnlos, in meinem Programm muss ich das allerdings machen.
Dieser Code befindet sich in einem Callback einer GUI. Wenn ich den Code im Comand Window von Matlab ausführe funktioniert es einwandfrei.
Vielen Dank für eure Hilfe
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 04.10.2011, 13:07
Titel: Re: string als Variablenname
|
 |
|
 |
|
Hallo mr90,
Wenn Du lange das Netz durchstöbert hast, sind Dir bestimmt auch einige meiner mehreren hundert Warnungen bzgl. EVAL und ASSIGNIN in diesem Forum aufgefallen. Beide Befehle führen immer wieder, wie ja auch in Deinem Fall, zu Schwierigkeiten. Zudem erschweren sie MATLAB die Arbeit, so dass der Code nicht effizient ausgeführt werden kann.
Du hast z.B. in Deinem Beispiel versucht, die existierende Funktion "var" mit einer Variablen zu überschreiben. Wären das M-File gelesen wird, glaub MATLAB, dass "var" der Funktion ist und optimiert den Code entsprechend. Während der Laufzeit wird das Symbol "var" dann aber von einer Variablen überschrieben. Das kann dazu führen, dass im Debug-Modus anderer Code ausgeführt wird, als im normalen Modus. Brrr.
Der Fehler in Deinem Code liegt darin, dass ASSIGNIN('caller') die Variable im Workspace der aufrufenden Funktion definiert, nicht aber innerhalb der Funktion selbst. Dann wäre EVAL also besser. Aber wie schon gesagt und selbst bemerkt: Solche Methoden erzeugen weit aus mehr Probleme als sie lösen. Ein Struct wäre effizienter, klarer und sicherer:
"str{1}" ist übrigens deutlich effizienter als CELL2MAT.
Noch eine Bemerkung:
Zitat: |
var %Hier schreibt Matlab, das die Variable nicht existiert |
Bitte poste immer die komplette Fehlermeldung. Ich bekomme z.B. die Meldung "Input agrument "x" is undefined. Error in var at 55, if isinteger(x)". Das ist aber etwas ganz anderes als "dass die Variable nicht existiert". Die Fehlermeldungen enthalten fast immer sehr gute Hinweise, wie man das Problem lösen kann.
Gruß, Jan
|
|
|
mr90 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2011, 15:33
Titel: Herzlich Dank
|
 |
Herzlichen Dank für die Erklärung und deine Tipps.
Hab tatsächlich viele Warnungen in Bezug auf asignin gelesen.
Allerdings hab ich mir gedacht probieren geht über studieren.^^
Durch deinen Tipp mit dem struct hab ich mein Problem jetzt gelöst.
Vielen Dank nochmal
lg
mr90
|
|
|
Maschi87 |

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 22.12.11
|
 |
|
 |
Wohnort: Im Wald
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2012, 15:39
Titel:
|
 |
Hi,
ich versuche gerade eure Lösung zu verwenden, allerdings müsste ich den ersten Teil des Strukturnamens variieren. Das funktioniert dann aber leider nicht auf dem Weg. Hat da jemand eine Idee wie das gehen könnte?
So klappt es bei mir leider nicht.
Gruß[/code]
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.10.2012, 18:54
Titel:
|
 |
Hallo Maschi,
wie Jan schon damals geschrieben hat, ist es besser statt Variablennamen die Felder
eines Structs per String zu erzeugen. In Deinem Fall handelt es sich aber eben nicht
um einen Feldnamen.
Besser so:
Grüße
Sirius
|
|
|
Maschi87 |

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 22.12.11
|
 |
|
 |
Wohnort: Im Wald
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2012, 14:19
Titel:
|
 |
Ok
damit kann ich das Problem umgehen.
Jetzt suche ich noch nach dem Umgekehrten Fall.
Ich möchte aus einem Feld in der Struktur einen String machen um den dann aus zu geben. Also nicht den Wert des Feldes als String bekommen, sondern den Namen des Feldes und auch nur des Feldes und nicht der ganzen Struktur vorher.
Gruß
|
|
|
dmjr |

Forum-Century
|
 |
Beiträge: 199
|
 |
|
 |
Anmeldedatum: 02.10.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2012, 14:29
Titel:
|
 |
Kannst du mal nen Beispiel geben wie das gemeint ist?
Wenn du auf ein Feld zugreifst, hast du den Namen doch schon.
|
|
|
Maschi87 |

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 22.12.11
|
 |
|
 |
Wohnort: Im Wald
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2012, 14:44
Titel:
|
 |
z.B. eine Struktur
Und das ganze soll später in einer Funktion so laufen, dass ich immer wieder Strukturen übergebe, und dann den String 'Musterman' bekomme.
So wie ich mit
b=12 bekommen würde.
Nur dass ich den Namen brauch und nicht den Wert
|
|
|
Maschi87 |

Forum-Anfänger
|
 |
Beiträge: 25
|
 |
|
 |
Anmeldedatum: 22.12.11
|
 |
|
 |
Wohnort: Im Wald
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2012, 14:52
Titel:
|
 |
OK
hab es gearde selber gefunden.
Funktioniert mit
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.10.2012, 15:05
Titel:
|
 |
Hallo Maschi87,
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|