Variablename ist als string bekannt, Werte in struct save
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 21.07.2011, 14:57
Titel: Variablename ist als string bekannt, Werte in struct save
Hallo,
ich habe sehr viele Variablen im Workspace gespeichert, die ich aus dem mdf File einlese. Nun möchte ich bestimme Variablen in einem struct speichern. Dort ist eine für die spätere Bearbeitung eine Auswahl der beötigten Vaiablen hinterlegt. In einer For-Schleife lese ich den benötigten Namen aus dem Struct aus und vergleiche ihn mit strmatch mit der im Workspace vorhandenen Variablen. Gibt es die benötigte Variable, sollen diesen Werte im Struckt gespeichert werden. Wie kann ich dann die Werte in dem Struct speichern. Mir liegt der gesuchte Variablenname nur als string vor.
Verfasst am: 22.07.2011, 11:42
Titel: Re: Variablename ist als string bekannt, Werte in struct sav
Hallo Gast,
"Sehr viele" Variablen aus einem File direkt in den Workspace zu speichern ist sehr ineefizient und unsicher. Z.B. kann eine importierte Variable den Namen einer bereits verwendeten oder einer Matlab-Funktion überschreiben. Schneller und sicherer wäre es, die Daten gleich in ein Struct zu importieren. Dann wäre auch das Problem bereits erledigt, da man auf die Felder eines Structs ja per dynamic fieldnames zugreifen kann:
Per "eval(Variablennamen_im_workspace(Index_Variblenname))" kannst Du zwar auch eine Variable aus dem WorkSpace zugreifen. Das bleibt aber eine Schwachstelle.
Gruß, Jan
Gast
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 26.07.2011, 20:59
Titel:
Hallo Jan,
genau dies hatte und habe ich ja ursprünglich schon vor. Der bisherige mdf Import von Matlab lädt alle Variablen einfach in den Workspace. Die Zeitkanäle werden entweder mit einem '_X' am ende gekennzeichnet oder sie heißen einfach 'time_1' etc. Den Import habe ich soweit umgeschrieben, dass ich ein Struckt erzeuge in dem die Variablen + Zeitsignale und Zusatzinfos gepeichert werden.
Der geschriebene Struct sieht z.B. wie folgt aus:
Nun habe ich aber bis 103000 Botschaften. Also geht MyStruct bis MyStruct(103000,1). Nun möchte ich in einer GUI über ein Popupmenue entsprechende Variablen zur Ansicht auswählen. Dazu möchte ich gerne eine Liste mit den Namen der Variablen erzeugen. Der Befehl 'fieldnemes(MyStruct)' liefert mir aber nur als Antwort 'Name, Daten, Zeitsignal, etc' wieder. Ich möchte aber nur die Variablen Namen haben.
Ich habe nun aber schon mit einer for Schleife experiment. Jedoch war dies nicht von erfolgt gekrönt.
Code:
Gesamtnamesliste = [];
for Namen_suchen = 1 : length(MyStruct)
Variablenname = MyStruct(Namen_suchen,1).Name;
Gesamtnamesliste = [Gesamtnamesliste;Variablenname];
end
Hallo Jan,
genau den import meine ich. In einer Veranstaltung hieß es, Matlab ist ein sehr gutes Datenverarbeitungs- bzw. Simulationsprogramm und es sieht für später besser aus, damit schon mal gearbeitet oder Erfahrungen gesammelt zu haben. Also setzte ich mich in meiner freien Zeit hin und stelle mir selbst Aufgaben und versuche die zu lösen. Entweder durch selbstausprobieren oder durch anschauen und debuggen jeder einzelnen Codezeile von File vom Matlab Exchange File. Auf die sache mdf Dateien einzulesen, kam ich während einer Hiwi Tätigkeit und dort hatte eine Canape Messung 103000 Botschaften. So steigere ich in kleinen Schritten immer weiter mein Wissen. Ist zwar mühsam, aber ich muss sagen es lohnt sich. Du und andere fleißige Helfer hier sind ja wissensmäßig schon viel weiter im Vergleich zu mir. Falls du oder die anderen Tipps für mich hab, damit ich wissensmäßig weiter komme. Ich bin für jede Anregung offen.
Als Kommentar für das Tool steht zwar da, dass Datenverloren gehen, aber zur Übung für mich reicht es sicher aus, oder was meinst du.
Als Üungsaufgabe ist dieser Import eine Herausforderung. Die Daten direkt in den WorkSpace zu schreiben ist immer eine Quelle munterer Bugs. Wenn z.B. eine Variable den gleichen Namen wie eine andere hat, die bereits benutzt wird, oder den Namen einer Matlab-Funktion wie z.B. "max".
Viel besser wäre es, die eingelsenenen Daten in ein Struct zu schreiben, wo sie kein Unheil anrichten können. Ich habe mir die Funktion nochmal angeschaut. Es ist nicht trivial es so zu ändern, dass die Daten in einem Struct landen. Aber falls Du es hinbekommen könntest - etwa als Übungsaufgabe -, wäre das von großem Interesse für alle MDF-File importierenden MATLAB User...
Viele Grüße, Jan
Einstellungen und Berechtigungen
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
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.