|
|
Aus Base Workspace Variable mit unbekanntem Namen übernehme |
|
XeroX |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 20.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 22.08.2013, 13:31
Titel: Aus Base Workspace Variable mit unbekanntem Namen übernehme
|
 |
Hallo alle zusammen,
ich bin ein Matlab Anfänger und brauche dringend eure Hilfe
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
|
|
|
|
|
Paul_87 |

Forum-Anfänger
|
 |
Beiträge: 17
|
 |
|
 |
Anmeldedatum: 20.06.13
|
 |
|
 |
Wohnort: Oz
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2013, 16:01
Titel:
|
 |
Hilft es dir weiter eine struct anzulegen? ungefaehr so:
Das wuerde deine Signale durchnummerieren. Die originale Nummer kannste dann in dem struct auch mit speichern.
|
|
|
XeroX |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 20.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 23.08.2013, 08:41
Titel:
|
 |
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.
|
|
|
XeroX |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 20.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 23.08.2013, 13:23
Titel:
|
 |
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.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 25.08.2013, 17:06
Titel: Re: Aus Base Workspace Variable mit unbekanntem Namen übern
|
 |
|
 |
|
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".
|
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:
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
|
|
|
XeroX |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 20.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 26.08.2013, 08:58
Titel:
|
 |
|
 |
|
Besten dank für deine Hilfe Jan S
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.
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
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?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 26.08.2013, 11:12
Titel:
|
 |
.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
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 26.08.2013, 11:17
Titel:
|
 |
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
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 26.08.2013, 20:25
Titel:
|
 |
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:
Beschreibung: |
|
 Download |
Dateiname: |
mdfimport.m |
Dateigröße: |
108.54 KB |
Heruntergeladen: |
547 mal |
|
|
|
XeroX |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 20.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2011b
|
 |
|
|
 |
|
Verfasst am: 03.09.2013, 15:58
Titel:
|
 |
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?
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|