ich habe eine Frage zu einem (vmtl) altbekannten Problem: Ich möchte in einer Schleife Variablen umbennen. Ich bin dabei schon auf die 'eval'-Funktion gestoßen, habe aber auch gelesen, dass man die nicht unbedingt nutzen soll.
Hier zu meinem konkreten Problem: Ich möchte Daten in Matlab einlesen und unter dem Variablennamen speichern, den die Ursprungsdatei hat. Nach einigem Suchen klappt das soweit auch super. Jetzt ist es aber so, dass in einem Ordner mehrerer Dateien liegen können, die ich einlesen möchte. Mein bisheriges Programm erzeugt die entsprechende Liste an einzulesenden Dateien und erzeugt die Vektoren. Diese möchte ich jetzt aber in einer Schleife umbennenen und zwar genau mit dem Wert, der aktuell gerade der Variablen 'filename' zugeordnet ist. Ich programmiere bisher in TCL, da nutzt man einfach das Dollarzeichen, um auf den Wert der Variablen zuzugreifen. In Matlab müsste das doch ähnlich gehen.
Mdir = dir(pathname);
nbentries = size(Mdir, 1);
Mfiles = [];
for entry_i = 1:nbentries
if Mdir(entry_i).isdir == false
filename = Mdir(entry_i).name;
if filename(1) ~= '.'
[p, n, ext] = fileparts(filename);
ifstrcmpi(ext, '.dat')
Mfiles = strvcat(Mfiles, filename);
end end end end
nbfiles = size(Mfiles, 1);
for i=1:nbfiles;
filename_info = Mfiles(i,:);
filename = strrep(filename_info, ' ', ''); %oder deblank(filename_info) [Time,Strain,Shearstress] = importfile(filename);
*****
end
An der Stelle ***** möchte ich nun Time etc umbennen in Time_"Wert der gerade in filename steckt". Irgendwie habe ich da gerade einen Knoten im Hirn, wie das gehen soll. Ich könnte auch eine neue Variable erzeugen und die Werte der alten reinkopieren, das wäre kein Problem für mich.
wie du schon schreibst, sind dynamische Variablennamen keine gute Idee.
Die Frage ist, warum du das willst. Momentan würdest du in jeder Iteration die Daten überschreiben. Wäre ein Cell oder Struct Array denn eine Alternative?
Grüße,
Harald
sbstn
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 01.07.2016, 10:59
Titel:
Ja, das ist in der Tat mein Problem mit dem Überschreiben. Daher ja auch die Idee mit dem Umbennen.
Am Ende des Projekts werden in einem Ordner, den ich auswähle mehrere Dat-Dateien sein mit jeweils drei Spalten: Time, Strain,Stress.
Diese muss ich Auf Phasen-Differenz und Maximal-Amplitude und einigem mehr untersuchen. Daher muss ich tatsächlich auch später nach dem import noch auseinander halten können. Ich bin, das gestehe ich ganz offen, kein geübter Programmierer. Aber verschiedene Vektoren mit "systematischen" Namen zu erzeugen erschien mir am einfachsten.
das mag einfach erscheinen, zieht aber einen Rattenschwanz an Problemen nach sich.
Die einzige Möglichkeit wäre, mit eval zu arbeiten. Blöderweise bleibt dann nichts anderes, als von dann an weiterhin mit eval zu arbeiten.
Wie wäre es stattdessen z.B. mit:
Code:
for i=1:nbfiles;
filename_info = Mfiles(i,:);
filename = strrep(filename_info, ' ', ''); %oder deblank(filename_info)
data(i).file = filename;
[data(i).Time,data(i).Strain,data(i).Shearstress] = importfile(filename);
end
Ich habe das mal übernommen und wenn ich meine Simulation umstelle, sodass die Daten anders sortiert werden, könnte das klappen. Immerhin sind jetzt alle Daten sauber importiert. Diese Darstellung hat vlt sogar am Ende noch einen Vorteil, weil ich die Ergebnisse, die in meiner Auswertung rauskommen, gleich in die gleiche Zeile (in einer Spalte weiter hinten) von data eintragen kann.
Ich versuche mir jetzt beizubringen, wie ich auf die einzelnen Teile von data zugreifen kann um dann die darin enthaltenen Daten weiter zu verarbeiten.
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.