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

Structs, eval, strcat

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 18:12     Titel: Structs, eval, strcat
  Antworten mit Zitat      
Hallo,

ich würde gerne wissen, wie es möglich ist, ein Feld eines Structs mit hilfe von eval zu belegen. Ich habe die bezeichnung des Feldes als string und würde dem jetzt gerne einen Wert zu weisen.

Code:
t = 'test.feld1'
x.a = 5
x.b = 6
%und jetzt würde ich gerne folgendes machen:
eval(strcat(t, '= x'))
 

Aber da kommt eine Fehlermeldung, dass strcat das so nicht macht. Gibt es eine andere Möglichkeit das zu machen?

Vielen Dank schonmal.


Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 18:24     Titel:
  Antworten mit Zitat      
Ich kann leider das finale Ziel deiner Bemühungen nicht erkennen. Was möchtest Du erreichen?

Also wenn ich Deinen Code Zeile für Zeile in der Commandline eingebe...funktioniert er...

test.field1 wird angelegt und x zugewiesen.

man kann dann über test.field1.a wieder an die 5 kommen...

Wie lautet die Fehlermeldung und was machst Du vorher?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 19:07     Titel:
  Antworten mit Zitat      
schon mal vielen Dank. so funktioniert es wirklich.

Also die Fehlermeldung ist folgende:
Code:
??? Error using ==> horzcat
The following error occurred converting from char to struct:
Error using ==> struct
Conversion to struct from char is not possible.

und mein wirklicher code sieht so aus:
Code:
data = varargin{1};
temp = strcat(temp,'=', data); %temp ist ein String
eval(temp)

Temp ist wie gesagt ein string, der die form t(1).b(2).c(3) oder so ähnlich hat.
Also ein struct, in dem ein feld, welches wieder ein struct enthält usw.
Kann es daran liegen, das varargin ein cell-array ist, und data dann nicht wirklich ein struct? Wäre es besser, wenn ich data nicht in varargin übergebe, sondern der function immer, auch wenn es in bestimmten fällen nicht benötigt wird?
Das ziel ist, in dem oben genannten struct ein feld zu ändern. Warum ich das so verschachtele hat einen Grund, auch wenn das vielleicht nicht die beste methode ist.
Danke.
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 19:30     Titel:
  Antworten mit Zitat      
Bist du sicher das t(1).b(2).c(4) korrekt ist?
Müsste das nicht t.b.c(4) heißen?

Sonst komme ich ohne genauere Infos bzw. Code von den eingehenden Daten für temp und data nicht weiter...

Kannst Du das ganze nicht mittels dynamic fields anders lösen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 22:52     Titel:
  Antworten mit Zitat      
also ich würde schon sagen, dass es t(1).b(2).c(4) heißen muss, denn t ist ja ein struct in dem mehrere sachen gespeichert sind. ich verwende das struct, t als speicherung von objekten (die namen, Typ, und sonstige felder haben und ein feld bestandteile, in dem alle teilobjekte aufgelistet sind (diese können wieder bestandteile haben)) und objekte habe ich ja mehrere, deswegen würde ich sagen t(1).blabla, data ist auch wieder ein struct, dass die gleichen felder hat, wie die felder die bestandteile hat.

So sieht der code momentan aus und die letzte zeile bringt eben die fehlermeldung:
Code:
function aktuell = getobject(parent, num, varargin)
objects = getappdata(parent,'objects');
temp_number = getappdata(parent, 'temp_number');
%Namen zusammensetzen
temp = strcat('objects(',num2str(temp_number), ')');
    for i = 1:1:length(num)
        temp = strcat(temp, '.bestandteile(',num2str(num(i)),')');
    end
data = varargin{1};
temp = strcat(temp,'=', data);
eval(temp)


Darf ich fragen, was du mit dynamic fields genau meinst? Es ist halt wichtig, dass alle Objekte und bestandteile die gleiche struktur haben, da ich sie gleich behandeln will.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2010, 23:40     Titel:
  Antworten mit Zitat      
Hej,

also ich habe jetzt den Fehler gefunden, es muss heißen
Code:
eval(strcat(temp, '= data'))

Es kommt zwar immer noch eine Fehlermeldung, dass die sachen noch nicht gleich sind, aber das werde ich denke ich noch rausfinden.

Vielen, vielen Dank, für deine Hilfe!
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2010, 09:49     Titel:
  Antworten mit Zitat      
Schön, dass es funktioniert.

Das mit t(1).b(2)... halte ich aber weiterhin für doppeltgemoppelt:

Du greifst ja schon durch t.b auf das struct b als Teil von t zu...wie dem auch sei...
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.