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

Einlesen von *.mat über eine GUI

 

Stoph

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2009, 16:50     Titel: Einlesen von *.mat über eine GUI
  Antworten mit Zitat      
Hallo MATLAB-User!
Ich arbeite zur Zeit an einem Projekt, bei dem der Benutzer über eine GUI ein Verzeichnis auswählt, in dem eine bestimmte Anzahl an *.mat-files liegt. Nachdem das Verzeichnis gewählt wurde sollte der Inhalt des Verzeichnisses in einer listbox angezeigt werden. Bis dahin funktioniert es so grob... Ich habe versucht mich an einem Beispiel aus der Hilfe entlang zu hangeln (GUI Directory Reader). Die mat-files enthalten jeweils einen Vektor mit Messdaten.
Mein Problem ist nun folgendes: Wie kann ich die vom Benutzer ausgewählte mat-file und deren Daten einlesen, sodass ich den Datenvektor für andere Funktionen (wie z.B. plot oder in eine *.txt-file schreiben) verwenden kann?
Ich habe mich schon an verschiedensten Sachen mit load und save versucht, aber leider komme ich auf keinen grünen Zweig und bin so langsam aber sicher am Verzweifeln...
Danke für die Antworten.


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 27.04.2009, 18:05     Titel:
  Antworten mit Zitat      
Moin,

du kannst mit LOAD die Variablen des mat-files in ein Struct laden:
Code:
inhalt_mat = load('test.mat');


Schau auch mal in die Skripte-Ecke, dort ist ein Beispiel wie man Daten eines GUIs speichern und nach einem Neustart wieder einlesen kann - das sollte dir helfen.

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
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 27.04.2009, 18:22     Titel:
  Antworten mit Zitat      
Code:
[FileName,PathName] = uigetfile('*.mat','Load mat-File');

T=load(fullfile(PathName,FileName));


So können Sie aus jedem Ordner die mat-datei einlesen.

Gruß,

Jose
_________________

Simulation

Zuletzt bearbeitet von josekamara am 27.04.2009, 19:27, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 27.04.2009, 19:16     Titel:
  Antworten mit Zitat      
Moin,

@Jose: Warum FILEPARTS(FULLFILE(...))? Die beiden Funktionen machen doch genau das entgegengesetzte zueinander, oder?

Code:
[FileName,PathName] = uigetfile('*.mat','Load mat-File');

T=load(fullfile(PathName,FileName));

Das sollte eigentlich reichen.

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
 
josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 27.04.2009, 19:29     Titel:
  Antworten mit Zitat      
Sorry, Alex.
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
Stoph

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.04.2009, 11:24     Titel:
  Antworten mit Zitat      
Vielen Dank für Ihre Antworten. Aber leider bin ich noch nicht wirklich weitergekommen...
Wenn ich mit
Code:
inhalt_mat=load('filename.mat')
arbeite und die in der Listbox ausgewählte .mat-file übergebe, dann erhalte ich zwar eine struct, aber ich möchte ja auf die darin befindlichen Daten zugreifen.

Der zweite Vorschlag bringt mich schon ein bischen näher. Mich wundert nur, dass sich dabei noch ein weiteres Dialogfenster öffnet und ich die entsprechende *.mat-file noch ein zweites Mal auswählen muss Sad Eig sollte ja direkt die in der Lisbox angeklickte file übernommen werden... Als Ausgabe erhalte ich aber dann z.B.
Code:
T = PARAM_9403008X_0: [1x1312768 uint16]

Die Frage ist jetzt nur, wie ich auf diesen Vektor zugreifen kann? Das Problem dabei ist, dass in der Listbox gut 1000 *.mat-files liegen und je nach dem welche mat-file der Benutzer auswählt sollten die entsprechenden Parameterwerte zurückgegeben werden, so dass ich mir diese z.B. in einem anderen Vektor speichern kann.

Danke für Ihre Hilfe!
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 28.04.2009, 11:56     Titel:
  Antworten mit Zitat      
Wenn das Struct vorliegt, dann musst du doch nur noch den Variablennamen raussuchen und fertig:

z.B. für eine Variable a

Code:
inhalt_mat=load('filename.mat'); % Laden der mat-File
a=inhalt_mat.a; %  a aus struct inhalt_mat in die Variable a schreiben

_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2010, 14:35     Titel:
  Antworten mit Zitat      
Hallo!

Soweit verstehe ich alles. Aber in meiner .mat-File befinden sich lediglich Spalten und Zeilen mit Messwerten, ohne Variablenbenennung.
Wie greife ich dann zum Beispiel auf die 10. Spalte zu (ich lasse das Ganze über eine Dateiauswahl in einer GUI laufen)?

Code:

daten = load(Dateiname);
data = daten.???;
setappdata(0,'Data',data)
 


Vielen Dank schon mal (ich werde langsam verrückt deswegen)!
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 12.04.2010, 17:04     Titel:
  Antworten mit Zitat      
Ich seh gerade das Problem nicht. Smile
Könntest du mal eine Beispiel-Datei hochladen.
Wie die 10. Spalte einer Matrix aufzurufen ist sollte klar sein --> M(:,10)
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 09:14     Titel:
  Antworten mit Zitat      
Maddy hat Folgendes geschrieben:
Könntest du mal eine Beispiel-Datei hochladen.

"Die Erweiterung mat ist hier verboten" Irks? Very Happy Die Dateien sind auch rieeesig. 540140 x 40 Matrix
Maddy hat Folgendes geschrieben:
Wie die 10. Spalte einer Matrix aufzurufen ist sollte klar sein --> M(:,10)

Ja,wie man auf Spalten zugreift ist mir bewusst. Aber wenn ich
Code:

  daten = load(Dateiname);
  data = daten.daten(:,10);
  setappdata(0,'Data',data)
 


hatte, hat es auch nie geklappt. Er sagt er kann darauf nicht zugreifen. "??? Reference to non-existent field 'daten'."
Ich bin vermutlich zu blond oder inzwischen betriebsblind Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 09:17     Titel:
  Antworten mit Zitat      
Vielleicht verpeil ich was, aber müsste es nicht einfach nur:

Code:

daten = load(Dateiname);
data = daten(:,10);
setappdata(0,'Data',data)
 


heißen um zu funktionieren? daten ist doch keine struct...
Private Nachricht senden Benutzer-Profile anzeigen
 
Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 10:20     Titel:
  Antworten mit Zitat      
Zenon hat Folgendes geschrieben:
Vielleicht verpeil ich was, aber müsste es nicht einfach nur:

Code:

daten = load(Dateiname);
data = daten(:,10);
setappdata(0,'Data',data)
 


heißen um zu funktionieren? daten ist doch keine struct...


"??? Index exceeds matrix dimensions."
Daten ist ein struct von 1x1, in dem dann die 540104 x 40 Matrix abgelegt ist. So hatte ich es auch schon öfter versucht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 10:30     Titel:
  Antworten mit Zitat      
Lass dir mal mittels

Code:

assignin('base','DATEN', daten);
 


daten in den MATLAB workspace ausgeben (es sei denn sie sind schon da) und probier dann doch einfach mal aus welche ausgaben du erhälst, wenn Du unterschiedlich zugreifst...das mach ich wenn ich mal wieder ein Brett vorm kopf hab...

vielleicht hilft auch:

Code:

data = daten{1};
data = data(:,10);
 


Damit könntest Du den Inhalt des struct-Feldes data zuweisen und dann mit data wie mit einer Matrix verfahren...
Private Nachricht senden Benutzer-Profile anzeigen
 
Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 10:42     Titel:
  Antworten mit Zitat      
Zenon hat Folgendes geschrieben:
Lass dir mal mittels

Code:

assignin('base','DATEN', daten);
 


DATEN struct 1x1 - wie erwartet.
Zitat:

vielleicht hilft auch:

Code:

data = daten{1};
data = data(:,10);
 


Damit könntest Du den Inhalt des struct-Feldes data zuweisen und dann mit data wie mit einer Matrix verfahren...


"??? Cell contents reference from a non-cell array object.

Error in ==> readData3>dataread_Callback at 46
data = daten{1};"

Seufz. Wink Aber danke, dass ihr so bemüht seid.Hier (Arbeit) will ich keinen fragen, weil ich ja sonst Blicke sehen muss, die sagen, wie wenig ich doch im Studium mitgenommen habe Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenon
Forum-Guru

Forum-Guru


Beiträge: 292
Anmeldedatum: 20.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 11:03     Titel:
  Antworten mit Zitat      
Ich meinte nicht das Du dir DATEN dann nur ausgeben lassen sollst sondern alles durchprobieren, bis es sinnvoll wird z.B.

Code:

data = daten(1);
data = data(:,10);
 


Wenn er nur 1x1 struct ohne Feldnamen ausgespuckt hat funktioniert das mit dem Punkt schon mal nicht und da {} nicht gint bleibt nur noch (1).

Irgendwo habe ich das Problem schon mal gelöst...vielleicht find ich das noch...
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.