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

Variablename ist als string bekannt, Werte in struct save

 

Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2011, 14:57     Titel: Variablename ist als string bekannt, Werte in struct save
  Antworten mit Zitat      
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.

Code:

for Variable_suchen = 1:length(Datenstruktur)

benoetigter_Variablenname = Datenstruktur(Variable_suchen,1).Name

Variablennamen_im_workspace = who;

Index_Variblenname = strmatch(benoetigter_Variablenname,Variablennamen_im_workspace,'exact');

A = isempty(Index_Variblenname );

if A == 0
Datenstruktur(Variable_suchen,1).Daten = Variablennamen_im_workspace(Index_Variblenname);
end
end
 


Martin1986
Forum-Century

Forum-Century


Beiträge: 121
Anmeldedatum: 20.06.11
Wohnort: ---
Version: Win 2016b Linux 2016b
     Beitrag Verfasst am: 21.07.2011, 18:59     Titel:
  Antworten mit Zitat      
ein Möglichkeit wäre eval()
guck mal in der ob dich das weiterbringt
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.07.2011, 11:42     Titel: Re: Variablename ist als string bekannt, Werte in struct sav
  Antworten mit Zitat      
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:
Code:
f = fieldnames(S);
S.(f{1})   etc.


Per "eval(Variablennamen_im_workspace(Index_Variblenname))" kannst Du zwar auch eine Variable aus dem WorkSpace zugreifen. Das bleibt aber eine Schwachstelle.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2011, 20:59     Titel:
  Antworten mit Zitat      
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:

MyStruct(1,1).Name = Geschwindigkeit;
MyStruct(1,1).Daten = [0 1 3 4];
MyStruct(1,1).Zeitsignal = [0 0.1 0.2 0.3];
MyStruct(1,1).Kommentar= 'CAN1';
MyStruct(1,1).Physikalische_Einheit= 'km/h';

MyStruct(2,1).Name = Weg;
MyStruct(2,1).Daten = [0 0.3 0.6 1.2];
MyStruct(2,1).Zeitsignal = [0 0.1 0.2 0.3];
MyStruct(2,1).Kommentar= 'CAN3';
MyStruct(2,1).Physikalische_Einheit= 'm';

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
 

Leider schaffe ich es einfach nicht die Liste zu erstellen.

Hat jemand von euch eine Idee.
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 26.07.2011, 21:44     Titel:
  Antworten mit Zitat      
Wie wäre es damit:

Code:

MyStruct(1,1).Name = 'Geschwindigkeit';
MyStruct(1,1).Daten = [0 1 3 4];
MyStruct(1,1).Zeitsignal = [0 0.1 0.2 0.3];
MyStruct(1,1).Kommentar= 'CAN1';
MyStruct(1,1).Physikalische_Einheit= 'km/h';

MyStruct(2,1).Name = 'Weg';
MyStruct(2,1).Daten = [0 0.3 0.6 1.2];
MyStruct(2,1).Zeitsignal = [0 0.1 0.2 0.3];
MyStruct(2,1).Kommentar= 'CAN3';
MyStruct(2,1).Physikalische_Einheit= 'm';

Gesamtliste={MyStruct.Name} % cell array mit 2 Einträgen
Gesamtliste{1} % Zugriff erstes Element
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.07.2011, 12:12     Titel:
  Antworten mit Zitat      
Hallo Gast,

Welches ist denn der "bisherige mdf Import von MATLAB"?

Meinst Du dies: http://www.mathworks.com/matlabcent.....-import-tool-and-function?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2011, 12:37     Titel:
  Antworten mit Zitat      
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.
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.07.2011, 16:35     Titel:
  Antworten mit Zitat      
Hallo Gast,

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