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

wie kann ich eine mat file laden???

 

xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 28.04.2010, 11:08     Titel: wie kann ich eine mat file laden???
  Antworten mit Zitat      
hallo leute,
hatte schon einen beitrag geschrieben, habe aber leider keine richtige antwort bekommen.
mein problem :
ich möchte mit einem button eine mat datei auswählen und laden damit ich es später verarbeiten kann.meine mat dateien heissen zB messung.202322_12334.meas.mat
diese mat dateien beinhalten geschwindigkeit,beschleunigung vektoren usw.

kann mir bitte jemand helfen
bei gui funktioniert das nicht
Code:
[fname] = uigetfile('*.mat','select MAT-file');
evalin('caller',sprintf('load %s %s',fname))
set(handles.text,'String',fname); % Ausgabe



...und noch was.
nachdem ich die variablen wie geschwindigkeit,beschleunigung geladen habe, habe ich hier gelsen das man auf die nicht zugreifen kann. also vpm gui auf das workspace. was für ne lösung gibts denn da. denn ich will mein algorithmus in mein gui m-file einfügen.
Private Nachricht senden Benutzer-Profile anzeigen


michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:01     Titel:
  Antworten mit Zitat      
Ok. Der erst Punkt ist das eval('caller'... Damit lädst du die Variablen in den Workspace der aufrufenden Funktion. Weißt du welche das ist, wenn du den Code in deiner Button-Callback aufrufst? und was dann damit passiert?
Um sicher zu sein, könntest du auch 'base' statt 'caller' nehmen. Dann weißt du sicher, wo alles landet, nämlich im Base-Workspace.

Allerdings würde ich dir davon abraten irgendwas in den base-Workspace zu packen!
Spar dir das eval() lieber ganz. Dann werden die Variablen zunächst in den Workspace deiner Callback geladen. Du kannst sie dann z.B. mit Hilfe der Funktion guidata (siehe >> doc guidata) über deine Funktionsgrenzen hinaus "retten" und in anderen Funktionen zugänglich machen oder auch direkt verarbeiten.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2010, 12:02     Titel:
  Antworten mit Zitat      
Hallo

1)Das Laden geht über LOAD-Befehl
EVALIN ist dabei nicht nötig
2) Damit du Variablen in anderen Teilen benutzen kannst, sollst du diese Zwischenspeichern, das kann man z.B mit GUIDATA über handles -Struktur machen, oder über SETAPPDATA/ GETAPPDATA eigene Variable definieren

Code:

function load_callback(hObject,eventdata, handles)

[fname,fpath] = uigetfile('*.mat','select MAT-file');
handles.myvar = load(fullfile(fpath,fname));
set(handles.text,'String',fname);

guidata(hObject, handles);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:07     Titel:
  Antworten mit Zitat      
wenn ich anstatt 'caller' 'base' schreibe dann funktioniert es.danke. was war denn der unterschied?
sollte ich jetzt lieber im workspace nichts laden? aber ich will doch die variablen in meinem algo ja verwenden. was für ne alternative gibts denn noch?
ich bedank mich schon vorraus
Private Nachricht senden Benutzer-Profile anzeigen
 
michai
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 22.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:55     Titel:
  Antworten mit Zitat      
Bei 'base' wird im Base-Workspace gespeichert, also in dem Workspace, den du in deinem Matlab-Fenster siehst.

Bei Funktionsaufrufen ist das so, dass jede Funktion ihren eigenen Workspace hat. Also wenn du da eine Variable anlegst, ist sie NICHT im Base-Workspace sichtbar und wird auch wieder gelöscht, wenn die Funktion beendet wird.
Das gilt auch für Unterfunktionen, also wenn du in einer Funktion eine weitere Funktion aufrufst, sehen die beiden nur ihren jeweils eigenen Workspace. Ein Zugriff auf Variablen, die in der anderen Funktion angelegt wurden ist nicht möglich.
Mit eval() weichst du diese Kapselung auf und kannst über die Funktionsgrenzen hinweg auf andere Workspaces zugreifen. Und 'base' ist eben dein Base-Workspace.

Wenn du eval('caller'...) aufrufst, bezieht es sich auf den Workspace der aufrufenden Funktion also etwa so (Achtung Pseudocode):

Code:

a = 1 % Base-Workspace

func1()
   a = 2 % func1-Workspace, überschreibt NICHT das Base-Workspace a!!!
   func2()
      a = 3 % func2-Workspace, überschreibt NICHT das Base-Workspace a und auch NICHT das func1-Workspace a!
      func3()
         eval('caller', 'a=4') % überschreibt das func2-Workspace a
         eval('base', 'a=5') % überschreibt das base-Workspace a
 


Diese Kapselung macht aber schon Sinn, denn du weißt nicht immer sicher, ob nicht vielleicht noch eine andere Funktion eine Variable mit dem gleichen Namen im Base-Workspace abgelegt hat und du die damit ausversehen überschreibst und 'caller' macht auch nur Sinn, wenn die aufrufende Funktion deine eigene ist. Denn sonst sind die Variablen ja auch wieder weg, sobald diese aufrufende Funktion beedet wird.

Wenn du einfach sagst load(fullfile(fpath,fname)) werden die Daten zunächst nur im Funktionsworkspace abgelegt. Um sie vor dem Löschen bei Funktionsende zu bewahren kannst du sie z.B. mit Hilfe der Funktion guidata "in" deiner GUI abspeichern und zu einem späteren Zeipunkt einfach wieder auslesen und weiterbenutzen bzw. -verarbeiten.

Schau dir mal denny's Lösung an. Er hat schon geschrieben, wie man's macht: Mit Hilfe der guidata Funktion.
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 28.04.2010, 12:56     Titel:
  Antworten mit Zitat      
es gibt also den tatsächlichen workspace da wo wir die variablen sehen und einen workspace für gui. habe ich das richtig verstanden? kann man den inhalt vom gui workspace nicht sehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2010, 13:20     Titel:
  Antworten mit Zitat      
xPashAx hat Folgendes geschrieben:
es gibt also den tatsächlichen workspace da wo wir die variablen sehen und einen workspace für gui. habe ich das richtig verstanden? kann man den inhalt vom gui workspace nicht sehen?


Es gibt nicht speziell GUI Workspace, jede Funktion hat eigenen Space.

Jede Funktion reserviert Platz in Speicher um eigene Variablen anzulegen/ Berechnungen durchzuführen. Diese Variablen nennt man lokale Variablen.
Weil sie sind außerhalb dieser Funktion für andere Funktionen nicht sichtbar.
Und nur den Lebensdauer ihrer Funktion besitzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 28.04.2010, 13:52     Titel:
  Antworten mit Zitat      
vielen dank Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 28.04.2010, 19:09     Titel:
  Antworten mit Zitat      
ihr seid super, dank euch hab ich wieder vieles gelernt.
denny ich hab deine lösung aufgeschrieben und es hat geklappt.

so jetzt will ich mit einem 2. button ja meine daten verarbeiten mit for schleife usw.
Code:

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles.myvar.geschwindigkeit
 

sooo und sehe tatsächlich meinen vektor geschwindigkeit.
mein problem ist ich habe schon ein m file geschrieben wo die daten verarbeitet werden.
muss ich da jetzt vor jedes signal wie beschleunigung das handles.myvar dranhängen (handles.myvar.beschleunigung). dann muss ich ja in meinem m-file an jedes variabel das handles.myvar dranhängen. gibts da ne einfachere lösung so das ich nur mit copy paste in das pusbutton2 einfüge.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 28.04.2010, 19:54     Titel:
  Antworten mit Zitat      
Muss Du nicht du kannst am Anfang der Funktion
die Werte an Lokale Variablen übergeben.


Code:


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
geschwindigkeit  = handles.myvar.geschwindigkeit;
beschleunigung  = handles.myvar.beschleunigung;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.04.2010, 06:55     Titel:
  Antworten mit Zitat      
ok das ist jetzt auch klar.
danke denny
und wenn ich 30 signale habe. muss ich die dann einzeln eintippen oder gibt es auch ein befehl der das automatisiert durchführt.

geschwindigkeit = handles.myvar.geschwindigkeit;
beschleunigung = handles.myvar.beschleunigung;
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.04.2010, 08:48     Titel:
  Antworten mit Zitat      
Hallo

nicht wirklich ,aber du kannst dafür so ein Konstrukt nutzen

Code:

fnames = fieldnames(handles.myvar)
for f=1:length(fnames )
  eval(sprintf('%s = handles.myvar.%s;',fnames{f},fnames{f}))
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.04.2010, 11:27     Titel:
  Antworten mit Zitat      
noch ne frage denny.
nachm betätigen des buttons läuft ja mein algo und während des algos werden ergebnisse als x,y,z....da werden schon viele vektoren als ergebniss gespeichert.
diese ergebnisse werde ich aber wieder später brauchen. wie kann ich die denn seperat speichern und wieder aufrufen?
du hattest ja die variablen als handles.myvar gespeichert und nun jetzt ?
die anderen vllt so handles.anderevar ?
super wäre natürlich wenn ich die ergebnisse meines algos komplett speicher.

ich bedank mich schon vorraus.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 29.04.2010, 12:26     Titel:
  Antworten mit Zitat      
Hallo,
natürlich kannst du diese wieder in deiner handles-Struktur abspeichern.

Code:


% zuerst in Struktur ablegen
handles.berechnungen.x=x
handles.berechnungen.y=y
handles.berechnungen.z=z
% usw..
% und dann abspeichern
guidata(hObject, handles)

 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 29.04.2010, 12:53     Titel:
  Antworten mit Zitat      
vielen dank denny
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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.