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

Automatisches Erzeugen von Strukturen

 

Florian
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 10:13     Titel: Automatisches Erzeugen von Strukturen
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem:

Prinzipiell möchte ich Strukturen folgender Form erzeugen.
Code:

S1 = struct('Name','Hans','A',0.0,'B',0.0,'C',0.0)
S2 = struct('Name','Herbert','A',0.0,'B',0.0,'C',0.0)
 

Bei meinem tatsächlichen Problem habe ich nicht nur die Strukturen S1 und S2, sondern über 40 Strukturen in dieser Form und möchte diese nicht nach dem obigen Schema mit 40 Zeilen erzeugen.

Mein Problem besteht darin S1 und S2 "automatisch" zu erzeugen.

Das heißt ich möchte nur den Vektor mit den Namen vorgeben und die Strukturen automatisch erzeugen, wie in folgender Form:
Code:

name = {'Hans', 'Herbert'}

for i = 1 : size(name,2)
    struct('Name',name(i),'A',0.0,'B',0.0,'C',0.0)
end
 


Dabei besteht mein Problem, das ich zwar nun die Strukturen in der gewünschten Form (wie in den ersten beiden Zeilen oben) erzeugen kann. Diesen aber keinen Namen (S1 und S2) zuordnen kann.

Wie kann ich obigen Code erweitern damit die beiden erzeugten Strukturen die Namen S1 und S2 erhalten.
Ich hatte die Idee ein array bzw. einen Vektor mit den Namen S1 und S2 zu erstellen. Bin damit aber noch nicht weitergekommen.

Code:

S = {'S1', 'S2'}
 


Nach diesem Schema werden die Strukturen im Weiteren auch mit Daten befüllt.

Hoffe mir kann da jemand weiterhelfen.
Danke.

mfg Florian
Private Nachricht senden Benutzer-Profile anzeigen


Phipo
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 04.11.09
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 28.04.2010, 10:40     Titel:
  Antworten mit Zitat      
da kann dir der befehl eval weiterhelfen:
Damit kannst du ein String zusammenbasten und den dann ausführen lassen. hier der von mir ungetestete Code Vorschlag:

Code:

for m = 1 : size(name,2)
    temp_string = ['s',m,'= struct( Name,' name(m) ',A,0.0,B,0.0,C,0.0)'];
    eval(temp_string);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Florian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:36     Titel:
  Antworten mit Zitat      
Phipo hat Folgendes geschrieben:
da kann dir der befehl eval weiterhelfen:
Damit kannst du ein String zusammenbasten und den dann ausführen lassen. hier der von mir ungetestete Code Vorschlag:

Code:

for m = 1 : size(name,2)
    temp_string = ['s',m,'= struct( Name,' name(m) ',A,0.0,B,0.0,C,0.0)'];
    eval(temp_string);
end
 


damit erhalte ich folgende Fehlermeldung:

??? Undefined function or method 'eval' for input arguments of type 'cell'.

kann mir da jemand weiterhelfen. Ist diese Problematik tatsächlich mit dem eval-Befehl lösbar?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2010, 12:48     Titel:
  Antworten mit Zitat      
Hallo,

An der Stelle name(m) statt runden die geschweifte Klammern schreiben, dann sollte es funktionieren
Private Nachricht senden Benutzer-Profile anzeigen
 
Florian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:57     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:
Hallo,

An der Stelle name(m) statt runden die geschweifte Klammern schreiben, dann sollte es funktionieren


Schon besser für
Code:

name = {'Hans', 'Herbert'};

for m = 1 : size(name,2)
    temp_string = ['s',m,'= struct( Name,' name{m} ',A,0.0,B,0.0,C,0.0)']
    eval(temp_string);
end
 


kommt jedoch noch die Fehlermeldung
??? Error: The input character is not valid in MATLAB statements or expressions.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2010, 13:11     Titel:
  Antworten mit Zitat      
Ach so, da wurde noch einiges vergessen, nämlich NUM2STR und Hochkommas.

Okay machen wir über SPRINTF, ich finde es übersichtlicher

Code:

name = {'Hans', 'Herbert'};

for m = 1 : size(name,2)
    temp_string =sprintf('s%d = struct(''Name'',''%s'',''A'',0.0,''B'',0.0,''C'',0.0)',m,name{m});
    eval(temp_string);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Florian
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 21.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 13:20     Titel:
  Antworten mit Zitat      
Danke

jetzt funktioniert es endlich Smile
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.