Verfasst am: 28.03.2018, 19:25
Titel: Browser nutzen, um .mat-file in GUI zu laden
Guten Abend miteinander,
ich möchte ein GUI erstellen, mit welchem ein .mat-file geöffnet werden kann, welches Messwerte enthält, die danach in einem Plot angezeigt werden sollen.
Die files entstammen enthalten Messdaten aus einem Versuch in Form mehrerer eintzelner structs. Ein Bild von Dem GUI habe ich angehängt.
Mein Code sieht folgendermaßen aus:
Mein Plan war es, über das GUI bzw. den Browser das .mat-file auszuwählen, und über die Variable, die den Dateinamen enthält, die Datei in den Workspace zu laden.
Mein Problem ist, dass ich nicht weiß, wie ich mit dem load-Befehl verfahren soll. Die Regeln für load habe ich bereits in der MATLAB-Hilfe nachgeschaut. MATLAB erwartet unter anderem die im zweiten Codeblock genutzte Form des load-Befehls. In meinem Fall würden jedoch keine amerikanischen Anführungszeichen in load() stehen, da diese in der Variable filename nicht enthalten sind. der folgende Code führt auch nicht zum gewünschen Ergebnis, da sich dieser auf eine Datei bezieht:
Da ich noch ein Neuling im Umgang mit MATLAB bin, habe schon den ganzen Nachmittag nach einer Lösung gesucht und konnte keine brauchbare Lösung finden. Auch gehen mir langsam die Möglichkeiten aus, wo ich Informationen einholen könnte. Ich würde mich sehr freuen, wenn Ihr mir helfen könnt.
Kann es sein, dass der Fehler darin liegt, dass die Datei nicht geladen werden kann, da in der Variable filename der Name der Datei nicht in Anführungszeichen steht?
Ich habe ja versucht den Code so aufzubauen, dass der Name der Datei eingelesen wird und dann über den load-Befehl geöffnet wird, jedoch erfordert der Befehl den Namen der Datei in Anführungszeichen.
Oder könnte der Fehler beim plot Befehl liegen? Wenn ich diesen Befehl entferne, dann läuft alles ohne Fehler, aber liefert auch kein Ergebnis.
ich habe ein paar Bilder von der Struktur der Messdaten angehängt. Wollte man einen plot einer bestimmten Größe in Y über X ausgeben lassen, würde man den folgenden Code nutzen:
Code:
load('Firma_Datum_001.mat');
x = Firma_Datum_Messreihe.X.Data;
y = Firma_Datum_Messreihe.Y(1).Data;
plot(x,y);
Damit funktioniert es fehlerfrei. Das Problem ist aber, dass ich ein GUI erstellen möchte, welches entweder mehrere Diagramme erstellt oder verschiedene Messdaten in einem Diagramm darstellt. Im folgenden Code werde ich kurz anmerken, was ich mit den jeweiligen Befehlen erreichen wollte.
Code:
function suchbutton_Callback(hObject, eventdata, handles)
[filename pathname] = uigetfile({'*.mat'}, 'File Selector');
fullpathname = strcat(pathname, filename);
text = fileread(fullpathname);
% in den beiden Textfeldern sollen der Pfas und der Dateiname angezeigt werden set(handles.text1, 'String', fullpathname);
set(handles.text2, 'String', filename);
% mit dem folgenden Befehl soll die vorher über den Browser ausgewählte Datei in den Workspace geladen werden load(filename);
% im Folgenden wird der Dateipfasd zerlegt, dies ist im weiteren Verlauf sehr wichtig [filepath,name,ext] = fileparts(fullpathname) % Darstellung in den Textfeldern text3 und datei zur Kontrolle set(handles.text3, 'String', name);
set(handles.datei, 'String', [name '.mat']);
% Nun soll beschrieben werden, welche Daten innerhalb des .mat-files auszuwählen sind % für die X-Komponente des späteren plots werden die Daten im file benötigt, % die sich unter Firma_Datum_Messreihe.X.Data befinden. Es soll also % genau dieser "Pfad" erstellt werden und später in der Variable varexdata % gespeichert werden.
v = name
vx = '.X';
varext = [v,vx];
varextzus = '.Data';
varextdata = [varext,varextzus];
x = varextdata;
% Die Erstellung des Pfades für die Messwerte bzw.Y-Werte wird auf gleiche % Weise wie der der X-Werte erstellt. Für die Messwerte ist jedoch noch die % Information wichtig, welche Reihe unter Firma_Datum_Messreihe.Y von % Interesse ist. Dies wird durch die Variable messreihe erreicht.
% Das Vorgehen funktioniert sowohl für die X- als auch für die Y-Komponente. % Dies habe ich durch Darstellung der einzelnen Variablen im Textfeld test % feststellen können. set(handles.test, 'String', messdaten);
bitte auf die Antwort eingehen. Als erstes solltest du mal den Tippfehler beheben, auf den dich die Fehlermeldung hinweist (varextdata statt varexdata).
Du musst schon zwischen Zeichenketten (alles in ' ') und Variablen (das, was du plotten willst) unterscheiden.
Du kannst entweder
eval
nutzen, um die zusammengestückelten Strings auszuwerten. Würde ich aber nicht empfehlen, weil es schwierig zu debuggen ist. Besser wäre dynamische Indizierung, z.B. statt data.X
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.