2016-07-19 7 views
1

Ich habe eine Struktur erstellt, die einige verschiedene Felder enthält. Die Felder enthalten Daten von verschiedenen Themen/Teilnehmern.Strukturname aus Variable in Matlab

Zu Beginn des Skripts ich den Benutzer auffordern, die „Betreff-Nummer“ wie so ein:

prompt='Enter the subject number in the format SUB_n: '; 
SUB=input(prompt,'s'); 

Beispiel SUB_34 zum 34. Thema.

Ich möchte dann meine Struktur so benennen, dass sie diese Zeichenfolge enthält ... d. H. Ich möchte, dass der Name meiner Struktur SUB_34 lautet, z. SUB_34.field1. Aber ich weiß nicht, wie ich das machen soll.

Ich weiß, dass Sie Strings zu einem bestimmten Feldnamen zum Beispiel für Struktur S wenn ich field1 will zuweisen zu z dann

S=struct; 
field1='z'; 
S.(field1); 

Werken genannt werden, aber es funktioniert nicht für die Strukturnamen.

Kann jemand helfen?

Dank

+0

Eine Option würde 'eval' verwenden, obwohl es keine gute Programmierpraxis ist:' eval ([SUB '= struct']) 'erstellt eine Strukturvariable, deren Name der Inhalt von SUB ist. –

Antwort

7

Anstatt die Schaffung Strukturen genannt SUB_34 Ich würde stark empfehlen nur ein Array von Strukturen statt und der Benutzer einfach Eingang, der mit dem Thema Nummer.

number = input('Subject Number') 
S(number) = data_struct 

Dann können Sie einfach finden Sie es erneut verwenden:

subject = S(number); 

Wenn Sie wirklich darauf bestehen, Sie konnte die Methode im Kommentar von @Sembei vorgeschlagen verwenden eval mit der Struktur zu erhalten . Sie wirklich should not do this though

S = eval([SUB, ';']); 

Oder die Struktur

eval([SUB, ' = mydata;']); 

One (von vielen) einzustellen Gründen nicht dies zu tun, ist, dass ich könnte folgende an Ihren prompten eingeben:

>> prompt = 'Enter the subject number in the format SUB_n: '; 
>> SUB = input(prompt, 's'); 
>> eval([SUB, ' = mydata;']); 

Und ich gebe:

clear all; SUB_34 

Dies würde die unvorhergesehene Folge hat, dass es all Ihre Daten entfernen würde, da eval den Eingabestring als Befehl auswertet. Die Verwendung von eval für Benutzereingaben setzt voraus, dass der Benutzer nie etwas Falsches oder Falsches, versehentlich oder anderweitig schreiben wird.

+4

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde [in den Chat verschoben] (http: //chat.stackoverflow).com/rooms/117732/diskussion-auf-antwort-by-suverse-struct-name-from-variable-in-matlab). –

Verwandte Themen