Verfasst am: 06.05.2013, 16:02
Titel: Daten Importieren von einem Fig File mit mehreren Plots
Guten Tag,
ich versuche gerade die Daten von einem Figure File zu importieren. Dieses File enthält allerdings 3 Plots.
Ich habe mit folgendem code Probiert :
Code:
[filename, pathname, filterindex] = uigetfile({'*.fig', 'Matlab Figure(*.fig)'}, 'Pick a file');
h = openfig([pathname filename]);
a = get(h);
b = get(a.Children);
for i = 1:length(b.Children),
c = get(b(i,1).Children);
for j = 1:length(c) evalin('base',['t_' num2str(i) '_' num2str(j) ' = c(j,1).XData;']);
evalin('base',['y_' num2str(i) '_' num2str(j) ' = c(j,1).YData;']);
end end
Verfasst am: 06.05.2013, 16:20
Titel: Re: Daten Importieren von einem Fig File mit mehreren Plots
Hallo calipso,
Und wieder ein EVALIN-Problem. Es würde sich wirklich lohnen, die Hilfetexte mit einer ausdrücklichen Warnung in fetten roten Buchstaben zu versehen, dass man sich im Allgemeinen mit EVAL/EVALIN keinen Gefallen tut.
EVALIN werten den Ausdruck im Base-Workspace aus, also im Command-Window. Die Daten von "c" befinden sich aber im lokalen Workspace, also noch nicht im Base-Workspace -- ansonsten bräuchtest Du ja kein EVALIN!
Noch sicherer wäre meine Vermutung, wenn Du postest, welche Fehlermeldung auftritt oder inwiefern das Ergebnis von Deinen Erwartungen abweicht.
Vorschlag: erstelle eine Funktion und übergib die Daten als Output:
Code:
function Imported = myImport
[filename, pathname, filterindex] = uigetfile({'*.fig', 'Matlab Figure(*.fig)'}, 'Pick a file');
h = openfig([pathname filename]);
a = get(h);
b = get(a.Children);
Imported.T = cell(1, length(b.Children));
Imported.Y = cell(1, length(b.Children));
for i = 1:length(b.Children)
c = get(b(i,1).Children);
Imported.T{i} = cell(1, length(c));
Imported.Y{i} = cell(1, length(c));
for j = 1:length(c)
Imported.T{i}{j} = c(j,1).XData;
Imported.Y{i}{j} = c(j,1).YData;
end end
Das hat den weiteren großen Vorteil, dass Du diese Funktion auch aus anderen Funktionen heraus aufrufen kannst, ohne dass Dein Base-Workspace mit Variablen geflutet wird. Dann kann man im Laufe der Evolution eines Programms auch hunderte Unterprogramme einführen, ohne dass man befürchten muss, dass zwei verschiede die Variable "c" im Base-Workspace für verschiedene Daten benutzen und sich damit gegenseitig behindern.
Gruß, Jan
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.