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 Base Workspace Variable mit unbekanntem Namen übernehme

 

XeroX
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.08.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 22.08.2013, 13:31     Titel: Aus Base Workspace Variable mit unbekanntem Namen übernehme
  Antworten mit Zitat      
Hallo alle zusammen,

ich bin ein Matlab Anfänger und brauche dringend eure Hilfe Wink

Also das ganze sieht folgendermaßen aus:

ich lade mit mdfimport eine .dat Datei ein. Dabei nehme ich allerdings nur ein bestimmtes Signal raus. Dieses hat z.B den Namen "PWG1".
mdfimport(string_FileName,'workspace',{PWG1},[],'ratestring');

Nun habe ich folgende Variablen im base Workspace:
PWG1_02963_MSG0
time_02963_MSG0

Da ich aber mehrere dat files habe, verändern sich die Nummern zwischen DK_ und _MSG0.
Meine Frage wäre jetzt: Wie schaffe ich es nun einer Variablen im globale Workspacee den Wert, der im base workspace hinterlegt ist, zu zuweisen, ohne die Nummer zu beachten?

Ich hoffe ihr versteht was ich meine
und danke euch tausend mal für eine Antwort Smile
Private Nachricht senden Benutzer-Profile anzeigen


Paul_87
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 20.06.13
Wohnort: Oz
Version: ---
     Beitrag Verfasst am: 22.08.2013, 16:01     Titel:
  Antworten mit Zitat      
Hilft es dir weiter eine struct anzulegen? ungefaehr so:

Code:

for i=1:number_of_signals
PWG1(i).signal=xxx;
PWG1(i).number=xxx;
PWG1(i).time=xxx;
end
 


Das wuerde deine Signale durchnummerieren. Die originale Nummer kannste dann in dem struct auch mit speichern.
Private Nachricht senden Benutzer-Profile anzeigen
 
XeroX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.08.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 23.08.2013, 08:41     Titel:
  Antworten mit Zitat      
Vielen dank für die Antwort Paul_87. Vor dem einladen der Dat Datei kenne ich die Nummer noch nicht. Das heißt ich muss jedes mal mit
evalin('base','whos'); den base Workspace auslesen um nach zu schauen welche Nummer die Variable hat, um dann die Variable im Workspace von meinem Programm ein zu lesen.
Also das sieht dann so aus:

zunächst mit MDFImport: mdfimport(string_FileName,'workspace',{'PWG1'},[],'ratestring');

dann schaue ich im base Workspace nach, wie die Variable mit der Nummer heißt: evalin ('base','whos');

Name Size Bytes Class Attributes

PWG1_ADMM_02963_MSG0_hy_f 866x1 6928 double
time_ADMM_02963_MSG0_hy_f 866x1 6928 double

und dann kann ich die Variable vom base Workspace übernehmen:
PWG1 = ('base', 'PWG1_ADMM_02963_MSG0_hy_f');

Das ganze sollte aber schon Automatisch funktionieren. Also müsste ich es iwie schaffen die Variable zu übernehmen, ohne dass ich die Nummer kenne.
Private Nachricht senden Benutzer-Profile anzeigen
 
XeroX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.08.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 23.08.2013, 13:23     Titel:
  Antworten mit Zitat      
Vielleicht gibt es irgendeine Art wildcard "*". Also ein Zeichen, dass die Nummer einfach ausgrenzen kann. So wie in der Suche und bei der strcmp funktion.
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: 25.08.2013, 17:06     Titel: Re: Aus Base Workspace Variable mit unbekanntem Namen übern
  Antworten mit Zitat      
Hallo XeroX,

"mdfimport" ist keine Funktion einer Matlab-Toolbox. Anstatt das Forum erraten zu lassen, um welchen Befehl es sich handelt, ist es viel sicherer, einen Link zu dem Tool anzugeben.

Das ferngesteuerte Erzeugen von Variablen im Base- oder aktuellen Workspace ist immer eine unsaubere Methode. Beim Debuggen ist es dann immer schwer heraus zu finden, welche Variable woher stammt.

Zitat:
Dieses hat z.B den Namen "PWG1".
Code:
mdfimport(string_FileName,'workspace',{PWG1},[],'ratestring');

Hier ist {PWG1} verwirrend. Was enthält diese Variable?

Die nun im Workspace entstehenden Variablen "PWG1_02963_MSG0" und "time_02963_MSG0" sehen gruselig aus. Hier scheinen wichtige Informationen im Namen der Variabeln verschlüsselt zu sein, und nicht im Inhalt. Es wäre deutlich einfacher, wenn die Variable z.B. "PWG1" hieße und ein Struct wäre. Dann könnte man "02963" und "MSG0" in Feldern speichern und einfacher dynamisch darauf zugreifen.

Zitat:
...verändern sich die Nummern zwischen DK_ und _MSG0.

"DK_"?

Zitat:
Wie schaffe ich es nun einer Variablen im globale Workspacee den Wert, der im base workspace hinterlegt ist, zu zuweisen, ohne die Nummer zu beachten?

Heißt "globaler Workspace" hier der "lokale Workspace", also der aktuelle?

Versuche mal dies:
Code:
ListOfVariables = who('PWG1*');
Name = ListOfVariables{1};
Data = eval(Name);

Und genau dieser EVAL-Ansatz ist es, der das Programm viel komplizierter macht als notwendig.
Ich würde also empfehlen, das Namens-Schema der Variablen zu ändern oder statt mdfimport eine Funktion zu verwenden, die den Output in eine Variable schreibt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
XeroX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.08.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 26.08.2013, 08:58     Titel:
  Antworten mit Zitat      
Besten dank für deine Hilfe Jan S Smile

Zitat:
Hier ist {PWG1} verwirrend. Was enthält diese Variable?

PWG1 ist ein Signal. Dieses Signal enthält die 2 Variablen PWG1_02963_MSG0 und time_02963_MSG0

Ich kann da leider nicht viel ändern von dem Namen her. Das ist so vorgeschrieben und muss erhalten bleiben.

Zitat:
Zitat:
...verändern sich die Nummern zwischen DK_ und _MSG0.

"DK_"?

Sorry ich meinte zwischen PWG1_ und _MSG0: Also nur die 5 stellige Nummer verändert sich.

Zitat:
Heißt "globaler Workspace" hier der "lokale Workspace", also der aktuelle?

Ja damit meine ich den lokalen Workspace.

Code:
ListOfVariables = who('PWG1*');
Name = ListOfVariables{1};
Data = eval(Name);

Also wenn ich "who('PWG1*')" anwende, greift er ja auf den lokalen Workspace zu. Ich habe versucht die Funktion mit evalin () zu kombinieren. Ohne Erfolg Sad

Zitat:
Ich würde also empfehlen .... statt mdfimport eine Funktion zu verwenden, die den Output in eine Variable schreibt.

Ich glaube auch, dass es die beste Möglichkeit wäre. Leider finde ich keine Funktion, die eine .dat Datei ausliest und die Variablen in den lokalen workspace übernimmt. Kennt einer von euch die Funktion dafür?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 26.08.2013, 11:12     Titel:
  Antworten mit Zitat      
.dat datei ist kein festgelegter standart. du solltest dir also selber eine import funktion schreiben. wie man daten automatisch einliest über textscan fread dlmread fread fscanf und so weiter wurde hier im forum schon oft besprochen.
grüße
winkow
_________________

richtig Fragen
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: 26.08.2013, 11:17     Titel:
  Antworten mit Zitat      
Hallo XeroX,

Das kommt ganz auf das Format der .DAT-Datei an. Diese Datei-Endung sagt noch nichts über den internen Aufbau, aber Du hattest ja MDFIMPORT verwenden können. Diese Funktion sollte man eigentilich ohne größeren Aufwand so ändern können, dass sie den Output nicht im Base-Workspace erstellt, sondern an die aufrufende Funktion zurückgibt. Hast Du schonmal im Code dieser Funktion gestöbert?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2013, 20:25     Titel:
  Antworten mit Zitat      
Am Besten ist es wohl, einfach den Programmcode so zu ändern, dass er etwas sinnvolles tut (siehe Anhang). Statt 'workspace' kann dann per 'struct' die Datei in ein Struct importiert werden:
Code:
data = mdfimport(string_FileName,'struct',{PWG1},[],'ratestring');
all_the_variables = fieldnames(data);


mdfimport.m
 Beschreibung:

Download
 Dateiname:  mdfimport.m
 Dateigröße:  108.54 KB
 Heruntergeladen:  547 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
XeroX
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 20.08.13
Wohnort: ---
Version: R2011b
     Beitrag Verfasst am: 03.09.2013, 15:58     Titel:
  Antworten mit Zitat      
Ok ich habe mich nun wieder dem Projekt zuwenden können. Ich bin froh, dass Ihr mich dabei unterstützt.
Ich habe nun mit mdfimport die Variablen in den lokalen Workspace geladen.
Jetzt stehe ich trotzdem vor dem Problem, dass ich den Variablennamen kennen muss, um ihn zu übernehmen. Ich möchte nähmlich die aus der .dat datei eingelesene Variable "PWG1_02963_MSG0" in "PWG1" umbenennen oder übernehmen. Dabei stört mich aber die Nummer zwischen PWG1_ und _MSG0, da ich vorher nicht weiß welche Nummer diesem Namen zugeordnet wird.
Habt Ihr Ideen wie ich die Nummer umgehen kann?
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.