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

String als Variable nutzen

 

Neulingg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 11:20     Titel: String als Variable nutzen
  Antworten mit Zitat      
Hallo,

ich bin auf der Suche nach einer Lösung um automatisch einen Zeitvektor zu einer Datei zu erstellen. Zunächst mal mein Ansatz:

Code:


[Dateiname,Pfad] = uigetfile('*.mat' , 'load mat file);
load(fullfile(Pfad, Dateiname));

t = 0:1/fs:(length("Variablenname")/fs)-(1/fs);
t = t';

 


Dadurch werden meine zuvor gespeicherten Variablen wieder eingelesen. Allerdings weiß ich ja vorher nicht wie meine Variable heisst und kann dementsprechend auch den Zeitvektor keinen Variablennamen zuordnen.
Der Name ist im String Dateiname vorhanden allerdings mit der Endung .mat und somit auch nicht nutzbar für mich. Kennt jemand dafür eine Lösung? Dürfte ja nichts unbekanntes sein!

Mit freundlichen Grüßen


Neulingg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 11:55     Titel:
  Antworten mit Zitat      
Hab es selber noch herausgefunden.

Code:


[Dateiname,Pfad] = uigetfile('*.mat' , ' Load mat file ');
load(fullfile(Pfad,Dateiname));

Dateiname = Dateiname(1:length(Dateiname)-4);

t = 0:1/fs:(length(eval(Dateiname))/fs)-(1/fs);
t = t';

 


so funktioniert es!
 
Jan S
Moderator

Moderator


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

EVAL ist und bleibt tückisch. Falls jemand den Namen "system('format C:').mat" verwendet, wird Dir Dein Programm ganz schön um die Ohren fliegen.

Nein, wird es natürlich nicht. Erstens sind Doppelpunkte im File-Namen nicht erlaubt unter Windows, zweitens kann man als Nicht-Admin nicht ohne weiteres die System-Platte löschen.

Trotzdem rate ich dringend davon ab.
Code:

[Dateiname,Pfad] = uigetfile('*.mat' , ' Load mat file ');
Data = load(fullfile(Pfad,Dateiname));
DataC = struct2cell(Data);

t = 0:1/fs:length(DataC{1})-(1/fs);
 

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 12:47     Titel:
  Antworten mit Zitat      
Alles klar kommt aufs selbe hinaus aber wenn es da ohne mögliche Komplikationen läuft, vielen Dank!
 
Neulingg

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2011, 13:00     Titel:
  Antworten mit Zitat      
Ah jetzt bemerke ich gerade, dass dadurch aber mein Dateiname verschwindet. Den wollte ich ja variabel halten, damit ich mehrere gleichzeitig einlesen könnte! Also doch wieder eval!
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.12.2011, 14:34     Titel:
  Antworten mit Zitat      
Moin,

wie Jan S schon sagte: EVAL ist EVIL!!!

Schaue dir mal die Doku zu STRUCT, GETFIELD, FILEPARTS an, mit diesen Funktionen lässt sich dein Code wunderbar vereinfachen und robuster gegen Fehler machen.

Zusätzlich schaue dir mal diesen Eintrag in der Hilfe an: Generate Field Names from Variables

Bei Fragen zur Umsetzung dieser Hilfestellungen kannst du gerne deinen Code posten und wir helfen weiter Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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: 14.12.2011, 16:08     Titel:
  Antworten mit Zitat      
Hallo Neulingg,

Nun, wenn es mit EVAL funktioniert, funktioniert es natürlich.
Ich habe in verschiedenen Matlab Foren bestimmt über tausend verzweifelte User gesehen, die auch harmlos mit einem kleinen Programm angefangen haben, bei dem es mit EVAL noch funktionierte. Dann wuchs das Programm und als es die 1000 Zeilen-Größe überschritt und ein paar "kleine" Erweiterungen nötig waren, ging plötzlich nichts mehr. Das Programm benötigt entweder Stunden statt Sekunden, das Debuggen raubt den letzten Nerv und statt einer weiteren Pflege löscgte man das Programm am besten vollständig.

EVAL zu vermeiden ist wie Zähneputzen. Es tut nicht gleich weh, wenn man das mal macht. Aber irgendwann hilft nur noch Zähne ziehen und ein Gebiss.

Gruß, 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.