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

struct Namen zur Definition von Variablen verwenden

 

metalphony
Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 12:19     Titel: struct Namen zur Definition von Variablen verwenden
  Antworten mit Zitat      
Moin moin,

ich habe ein stract namens "test". Das struct beinhaltet 6 "fields". Field Y ist eine 1x35 Matrix. Aus dieser Matrix muss ich mir automatisch bestimmte Variablen definieren. Da ist z.B. die Variable : test.Y.(1,3) in diesem fall die Zeit.
Für den weiteren Verlauf muss ich den Variablen "vernünftige" namen geben.
Also wäre: t = test.Y(1,3).
Da in meinem Fall aber sich die structs namentlich unterscheiden aber in der "inneren" Struktur immer gleich sind, speichere ich über eine Variable "Name" mit Hilfe einer Schleife den aktuellen struct namen ab.
Dann ist name = 'test'.
Um dann t abhängig von dem aktuellen struct namen definieren zu können will ich den "wert" der hinter der Variablen Name abgespeichert ist zur definitin benutzen. Also als Beispiel: t = "name".Y(1,3)
Wie gesagt die struct struktur ist bei allen gleich, daher kann z.B das " .Y(1,3)" immer bleiben, nur muss ich zur definition der Variablen den aktuellen struct namen verwenden, den ich hinter der variablen "name" hinterlegen.
Leider funktioniert die definition der Variablen nicht ( t = 'name'.Y(1,3) )
Sad
habe schon alle möglichen Klammern probiert....bekomme immer nur den Error--> Error: Unexpected MATLAB expression.

Ich weiß nicht wie ich den Namen der hinter der Variablen "name" liegt ansprechen soll, damit ich "t" definieren kann.
Ich ich habe das Problem halbwegs verständlich beschrieben...
Vielen Dank schonma! Smile
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: 18.11.2013, 12:32     Titel:
  Antworten mit Zitat      
Hallo,

dynamische Variablennamen sind generell keine gute Idee. Man kann zwar mit EVAL / ASSIGNIN Wege finden, das umzusetzen, aber das wird unübersichtlich und schwierig zu debuggen.

Sinnvoller wäre es meiner Meinung nach, einen einheitlichen Namen (test o.ä.) zu verwenden und den Namen in der Struktur abzulegen.
Sollte es mehrere solcher Strukturen geben, kann man ein Strukturarray daraus machen.

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: 18.11.2013, 12:33     Titel:
  Antworten mit Zitat      
das kann man mit eval lösen. bei structs darf der erste teil nicht dynamisch sein. ich würde aber bevor ich mit eval arbeite nochmal gucken ob es nicht möglich ist gleich sinnvolle daten namen und strukturen zu generieren. du sihst ja wie umständlich es ist wenn das ganze schlecht abgespeichert ist. eval ist nur schwer zu debuggen. und das ganze würd leuten die später mit deinem programm vieleicht arbeiten nur kopfschmerzen bereiten. warum heißen die struckts alle anders wenn sie doch gleiche daten enthalten? kann man das nicht besser lösen? etc.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Nras
Forum-Meister

Forum-Meister


Beiträge: 608
Anmeldedatum: 21.02.12
Wohnort: ---
Version: 7.12.0.635 (R2011a)
     Beitrag Verfasst am: 18.11.2013, 12:35     Titel:
  Antworten mit Zitat      
Hallo,

wenn die "inne Struktur", wie du sie so schön nennst, immer gleich ist, dann empfielt es sich, die Daten auch passend einzulesen, sofern möglich. Mann kann die structs dann übereinanderlegen und kommt gar nicht erst in die Bedrängnis, mit den unterschiedlichen Dateinamen arbeiten zu müssen. Z.B.:

Code:

test1 = struct('f1', 1, 'f2', 2, 'Y',rand(1,35));
test2 = struct('f1', 3, 'f2', 1, 'Y',rand(1,35));

test(1) = test1;
test(2) = test2;


for s = 1:2
    time = test(s).Y(1,3)
end
 


Viele Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 12:36     Titel:
  Antworten mit Zitat      
hmm..ok. Also ich arbeite noch nicht lange mit Matlab, deshalb kann ich nicht so genau sagen ob das auch gehen würde was du vorgeschlagen hast. Es sieht bei mir nur so aus dass ich mehrere hundert Daten auswerten muss und da unterscheiden sich halt die Namen der structs jedoch nicht die namen und die Formate der structs. Deshalb fand ich die idee eigentlich gar nicht so verkehrt bis ich an den besagten punkt gekommen bin...
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 12:49     Titel:
  Antworten mit Zitat      
Wie kann ich denn ein ganzes struct umbenennen?
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: 18.11.2013, 12:55     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ob das auch gehen würde was du vorgeschlagen hast

Es sind 3 Antworten da. Falls es auf meinen Vorschlag bezogen war: ich bin da sehr zuversichtlich.

Zitat:
Es sieht bei mir nur so aus dass ich mehrere hundert Daten auswerten muss

Mit anderen Worten, du hättest bei deinem Ansatz mehrere Hundert Variablen im Workspace. Zudem müsstest du dir wohl "merken",
Zitat:
welche
Hundert Variablen du denn hast, wenn du sie weiterverarbeiten möchtest.
Struktur-Array sollte deutlich angenehmer sein:
- eine Variable
- alles übersichtlich
- Abarbeitung in einer for-Schleife problemlos möglich.

Umbenennen kannst du Variablen händisch im Workspace Browser, über Rechtsklick. Alternativ:
Code:
neuerName = alterName;
clear alterName


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 13:11     Titel:
  Antworten mit Zitat      
Das hauptprogramm steht eigentlich schon zu 80%. Dabei ist auch die Idee jedes struct einzeln einzulesen, zu bearbeiten, benötigten Daten abzuspeichern und wieder zu löschen. Deshalb würde es mich freuen wenn mir ggf. jemand zeigen könnte wie man mein Problem mit der Methode lösen könnte die ich soweit schon fertig habe...also einige hatten ja "eval" angesprochen..
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 16:50     Titel:
  Antworten mit Zitat      
Hab es jetzt mit "eval" gemacht. Funktioniert so wie ich es mir vorgestellt habe. Vielen Dank für den Tip! Smile

falls jemand ein ähnliches Problem haben sollte...
Code:
eval(['t =', name{1},'.X.Data;']);

usw...
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: 18.11.2013, 17:57     Titel:
  Antworten mit Zitat      
Hallo,

an dieser Stelle schon mal mein herzliches Beileid, falls du oder jemand anderes an dieser Stelle mal ein Problem hat und das dann debuggen darf...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 19:37     Titel:
  Antworten mit Zitat      
Ich werde natürlich an der entsprechenden Stelle es verständlich und ausführlich kommentieren, damit jeder nachvollziehen kann wie es funktioniert! Cool
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.11.2013, 21:11     Titel:
  Antworten mit Zitat      
Wie haben denn die hunderte an Daten verschiedene Namen bekommen?
Die muß ja dann irgendjemand von Hand eingegeben haben, der Arme ;-(
Ansonsten dürfte es wohl kein Problem sein, diese Daten in ein einheitliches Struct zu laden. Um es nochmal deutlich zu sagen: die Lösung mit eval ist keine wirkliche Lösung!
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 21:35     Titel:
  Antworten mit Zitat      
Es gibt mehrere unterschiedliche Dateinamenarten...die wurden wahrscheinlich auch mit Matlab erzeugt Wink Ich habe meinen Ansatz meinem Chef, der selber ein sehr erfahrener Matlabnutzer ist, gezeigt, und der hatte kein Problem damit Wink und wieso bitte ist es "keine wirkliche Lösung"??? Das Skript mach genau dass was es soll!!! Ich will ja damit keinen Programmier-Schönheitswettbewerb gewinnen Wink Zumal ich ja auch gesagt habe dass ich noch nicht lange mit Matlab arbeite...deshalb ist es für mich nicht immer einfach nachzuvollziehen wie hier einige Tips/Lösungsansätze gemeint sind.
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: 18.11.2013, 21:40     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
deshalb ist es für mich nicht immer einfach nachzuvollziehen wie hier einige Tips/Lösungsansätze gemeint sind.

Wie wäre es dann mit konkreten Rückfragen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
metalphony
Themenstarter

Forum-Century

Forum-Century


Beiträge: 119
Anmeldedatum: 31.07.13
Wohnort: Braunschweig
Version: R2012b
     Beitrag Verfasst am: 18.11.2013, 21:49     Titel:
  Antworten mit Zitat      
Beim nächsten Mal Wink Vill. werd ich ja selber bald merken warum die eval-funktion hier nicht so beliebt ist Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.