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

Aus Variablen Namen structs mit dem Variablen Namen erzeugen

 

Chemie
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 14:32     Titel: Aus Variablen Namen structs mit dem Variablen Namen erzeugen
  Antworten mit Zitat      
Hallo zusammen,
Ist vielleicht ganz einfach oder auch nicht. Ich habe eine Tabelle mit sehr vielen Variablennamen. Aus genau diesen Variablennamen will ich einzelne Strukturen die im Workspace dann als einzelne strucrs sichtbar sind unter dem Variablennamen erzeugen und diese Strukturen dann mit Daten füllen. Nein es lässt sich leider nicht anders lösen. Der Aufbau muss genauso aussehen dass ich dann hinterher im Workspace die ganzen einzelnen Strukturen angezeigt bekomme und die genau diese Namen haben diese in dieser ersten Liste drin ist. ich habe jetzt schon einiges durchprobiert aber alles was ich gefunden habe hat leider nicht zum Erfolg geführt.
Bsp. Liste [ aa bb cc]
Hinterher im workspace die 3 Structs mit name
aa
bb
cc.. danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.05.2020, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Aus genau diesen Variablennamen will ich einzelne Strukturen die im Workspace dann als einzelne strucrs sichtbar sind unter dem Variablennamen erzeugen und diese Strukturen dann mit Daten füllen.

Das geht auf die direkte Art nur mit eval und ist sehr mühsam. Sobald man einmal den Weg mit eval eingeschlagen hat, kommt man auch nicht mehr davon weg.

Zitat:
Nein es lässt sich leider nicht anders lösen. Der Aufbau muss genauso aussehen dass ich dann hinterher im Workspace die ganzen einzelnen Strukturen angezeigt bekomme und die genau diese Namen haben diese in dieser ersten Liste drin ist.

Das habe ich schon öfter gelesen und auf Nachfrage hat sich dann in aller Regel herausgestellt, dass es sich eben schon anders lösen lässt. Daher:
1. Warum muss das genau so sein?
2. Was spräche gegen eine übergeordnete Struktur data mit Feldern, die dann die gewünschten Namen haben? Das wäre nämlich sehr viel einfacher umsetzbar
Code:
data.(name) = ...;

und meiner Meinung nach zudem noch übersichtlicher.

Wenn es wirklich absolut unbedingt einzelne Variablen sein sollen, dann würde ich mit 2. anfangen und dann etwas wie das hier zur Umwandlung nutzen:
https://de.mathworks.com/matlabcent.....cture-fields-to-variables

Siehe auch hier:
https://de.mathworks.com/matlabcent.....a-structure-automatically
Stephen Cobeldick on 14 Nov 2019: Liste einiger Beiträge in denen die Nachteile von eval erläutert werden.
Stephen Cobeldick on 11 Aug 2016: Alternativer Weg zur Umwandlung eines Structs in einzelne Variablen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Chemie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 19:03     Titel:
  Antworten mit Zitat      
Hallo,
Das mit der übergeordneten Struktur hatte ich überlegt, da einfacher ist aber leider in dem fall nicht realisierbar. Ich brauche in diesem Fall diese einzelnen Strukturen, die ich dann komplett getrennt nach der Erstellung weiterverarbeite. Ich könnte die Strukturen statisch erzeugen, da sich aber die strukturnamen permanent ändern und ich ja die Liste der strukturnamen habe, ist das nur ein andauerndes umschreiben des scripts....Das möchte ich künftig durch diese dynamische Erstellung verhindern. Die Erzeugung wird jedesmal einmalig in einer for schleife realisiert.. Hier sind Probleme die durch folgefehler mit evtl entstehen können ausgeschlossen.

Viele Grüße
Chemie
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.05.2020, 19:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
die ich dann komplett getrennt nach der Erstellung weiterverarbeite.

Wie werden sie weiterverarbeitet? Was spricht dagegen, statt name data.name weiterzuverarbeiten?

Zitat:
ist das nur ein andauerndes umschreiben des scripts...

Das wäre auch aus meiner Sicht ungeschickt. Noch ungeschickter als eval.

Zitat:
Hier sind Probleme die durch folgefehler mit evtl entstehen können ausgeschlossen.

Das bezweifle ich, denn sobald einmal mit eval angefangen wurde, kommt man davon nicht mehr weg - und jede einzelne mit eval geschriebene Zeile hat stark erhöhtes Fehlerpotenzial.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Chemie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 19:42     Titel:
  Antworten mit Zitat      
Hm. Wie erkläre ich das.... das ist sozusagen ein kleines collector Script was mir einzelne structs in nem workspace zusammenstellt. Diese sind name.mat gespeichert als kompletter workspace ohne das eigentliche collector Script. Diese structs und deren inhalt werden aber in vielen weiteren scripts weiterverarbeitet. Ohne eval.... das ist immer ein autark einmaliger collector schritt. Daher sehe ich da überhaupt keine Probleme. Aber ich bin für alles offen. Die structs müssen aber halt genau diesen Aufbau haben. Daran lässt sich nicht rütteln
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.05.2020, 20:42     Titel:
  Antworten mit Zitat      
Hallo,

was soll denn ein collector Script sein?
Sollen also diese Variablen in eine .mat-Datei gespeichert werden? Dann könntest du direkt save mit der Option -struct verwenden.

Ansonsten wie gesagt 2. und dann umwandeln.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Chemie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2020, 23:58     Titel:
  Antworten mit Zitat      
Adam collectir script erstellt(sammelt Daten) mir die matfile mit den structuren drin.

Stell dir folgendes vor: ich habe eine namensliste. Und zu der namensliste Daten zu jedem Namen.. Und möchte eine matfile Beispiel München in der jeder name darin eine eigene struct hat in der struct gibts mehrere lists wie zb. 1 mit uhrzeiten eine andere mit licht status0 bis 100 prozent eine mit km stand Auto etc....usw. Alles zum jeweiligen namen gehörend. Und das muß genauso aussehen zur Weiterverarbeitung mit bereits vorhandenen nicht änderbaren scripts. Kein Spielraum. Also wie kriege ich die Strukturen mit Namen aus der namensliste in der mat file. Ich verstehe die Bedenken. Ach ja ich rede von zig tausend einzelne strukturen in der mat file. Alle Namen der namensListe sind garantiert einmalig.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.05.2020, 08:56     Titel:
  Antworten mit Zitat      
Hallo,

das habe ich dir an sich geschrieben:
Zitat:
Dann könntest du direkt save mit der Option -struct verwenden.


Hier noch ein Beispiel:
Code:
clear
s.a = 1;
s.b = 2; % hier ist ein Struct mit Feldern a und b
save ab -struct s % in der .mat-Datei werden daraus Variablen...
clear
load ab % hier sieht man, dass tatsächlich Variablen abgespeichert wurden


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Chemie
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2020, 16:01     Titel:
  Antworten mit Zitat      
Hallo,
Ich habe es heute mit eval problemlos realisiert.
Aber da du dir viel Mühe damit gibst das ich kein eval benutze,werde mir die mühe machen und es auch auf deine art versuchen. Zum einen um zu lernen, zum anderen da eval prinzipiell gefahren birgt. In meinem Fall zwar sehe ich sie absolut nicht, aber prinzipiell....

Daher werde ich mich sicher nächte Woche nochmal melden.

Vielen Dank für die Hilfe mit save. Und die warnungen bezüglich eval assignin sind angekommen.

Viele Grüße und schönes Wochenende

Chemie
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 - 2024 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.