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 string

 

Kai_K
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2013, 20:39     Titel: variable mit string
  Antworten mit Zitat      
Hallo Zusammen,

ich möchte gerne einen String nutzen, der in einer Variable steht um dadurch einem Struct einen Wert zuordnen zu können.
Ich habe hier im Forum ein wenig rum gelesen. Leider habe ich nur erfahren, wie man es nicht machen soll. (Also eval, assignin,... nutzen) Hat jemand von euch einen Tipp für mich?

So sieht es bei mir bisher aus:

name = 'name1.unterpunkt.test'

eval(name) = 5

(mit dem eval funktioniert es auch nicht)

Also an der Stelle name1.unterpunkt.test möchte ich gern die 5 stehen haben.

(Später mal sollen die namen in einer for schleife hoch gezählt werden.)

Für Hilfe bin ich sehr dankbar.

Viele Grüße,

Kai
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: 20.09.2013, 20:58     Titel:
  Antworten mit Zitat      
Hallo,

dynamische Variablennamen sind, wie du ja erfahren hast, keine gute Idee. Was man jedoch machen kann, ist die Feldnamen dynamisch wählen:

Code:
feldname = 'hansi';
data.(feldname) = 5;


Dabei ist zu beachten, dass feldname einen als Variablennamen zulässigen String enthalten muss.

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

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 21.09.2013, 00:39     Titel:
  Antworten mit Zitat      
Zitat:
(Später mal sollen die namen in einer for schleife hoch gezählt werden.)
du kannst die name so wie harald es gesagt hast auch dynamisch mit nummer versehen um es hochzuzählen. num2str etc
du solltest dir aber wirklich überlegen ob das zielführend ist. wenn sachen hochgezählt werden hört sich das danach an als wenn ein index im namen versteckt wird. sowas ist meist schlecht und cell arrays sind da oft besser geeignet.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai_K
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2013, 08:50     Titel:
  Antworten mit Zitat      
Guten Morgen zusammen,

vielen Dank für eure schnellen Antworten.

Leider habe ich deine Lösung nicht für mein Problem angewendet bekommen.

Ich bräuchte für jeden Namen ein eigenes Struct. Und so kann ich nur alle in einem Übergeordnetem Struct unterbringen, oder? (Das ginge Notfalls allerdings auch)
Weiterhin versuche ich den Feldnamen auf eine tiefere Ebene zu bekommen.
(Also: feldname = 'ebene1.ebene2.ebene3')
dabei bekomme ich allerdings immer die Meldung "Invalid field name"

Zitat:

ein index im namen versteckt wird. sowas ist meist schlecht und cell arrays sind da oft besser geeignet.

Ja genau, Winkow. Es soll der Name mit dem index 1 (name_1) bis index n (name_n) hochgezählt werden und dann auf verschiedenen Eben Eigenschaften / Untereigenschaften mit Werten versehen werden (die Werte werden aus anderen Structs ausgelesen).
Kannst du mir sagen, wie ich das als cell array aufbauen könnte?

Könnt ihr mir dabei vielleicht auch noch weiterhelfen?
Besten Dank

Viele Grüße,
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 21.09.2013, 09:00     Titel:
  Antworten mit Zitat      
Zitat:
Dabei ist zu beachten, dass feldname einen als Variablennamen zulässigen String enthalten muss.

Code:
data.('ebene1').('ebene2').('ebene3')=3

genau so umständlich wird es auch die felder wieder auszulesen. ich hoffe für dich das du nicht zu viel mit den daten machen willst Smile
Zitat:
Ja genau, Winkow. Es soll der Name mit dem index 1 (name_1) bis index n (name_n) hochgezählt werden und dann auf verschiedenen Eben Eigenschaften / Untereigenschaften mit Werten versehen werden (die Werte werden aus anderen Structs ausgelesen).
Kannst du mir sagen, wie ich das als cell array aufbauen könnte?

anstatt name_1 und name_2 nimmst du halt name{1} name{2} damit lässt sich viel leichter arbeiten. du kannst in eine cell dann auch weitere cells packen. wobei verschachtelungen immer umständlich sind und du lieber gucken solltest ob du das auflösen kannst. mehr als 2 ebenen wird dann ein index wirrvar geht aber auch. die cells sehen im wörkspace zwar nicht so "schön" aus wie stucts aber man kann damit viel leichter rechnen da die felder viel leichter zu indizieren sind.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai_K
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 09.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2013, 10:45     Titel:
  Antworten mit Zitat      
Vielen Dank Winkow,

ich habe mich jetzt für eine Struktur entschieden, wobei ich die nötige tiefe mit Structs erreiche und die (vielen) Daten dadrin allerdings in Cells darstelle.

Grüße,
Kai
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.