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

 

Caidence
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 01.04.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2010, 11:10     Titel:
  Antworten mit Zitat      
Zenon hat Folgendes geschrieben:
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...


Mit den Klammern geht es auch nicht. Ich hab schon soviel getippt und probiert, aber er greift einfach nicht drauf zu. Aber dann muss ich das jetzt einfach mal aussen vor lassen. Wird die Auswahl von *.mat-Files eben nicht ermöglicht, fertig 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:20     Titel:
  Antworten mit Zitat      
So also ich habs bei mir nochmal ausprobiert...

Code:

data = daten.gespeicherteVariableName(:,10);
 


So geht es.

Deine gespeicherte Variable heißt einfahc nicht daten...hätte gleich bei mir nachshcauen sollen...ich hatte an ein ganz anderes Problem gedacht...

Welche Variablen es im mat-File gibt siehst DU über:

Code:

whos (-file, FILENAME)
 
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, 11:58     Titel:
  Antworten mit Zitat      
Zenon hat Folgendes geschrieben:
So also ich habs bei mir nochmal ausprobiert...

Code:

data = daten.gespeicherteVariableName(:,10);
 


So geht es.

Deine gespeicherte Variable heißt einfahc nicht daten...hätte gleich bei mir nachshcauen sollen...ich hatte an ein ganz anderes Problem gedacht...

Welche Variablen es im mat-File gibt siehst DU über:

Code:

whos (-file, FILENAME)
 


Hmm, also ich wüsste keine andere Variable, weil ich keine zuvor definiert habe.
Und, ich scheine schon wieder zu doof zu sein, wenn ich den whos Befehl nehme, um zu checken, was für Variablen ich habe, kommt:
Code:
??? Error using ==> whos
Could not open readData3.m as a valid MAT-file

Ich bin im richtigen Verzeichnis und meine Datei heißt so. Ich hab es auch schon ohne '.m' versucht (laut Hilfe geht das ja so), aber dann meckert er auch rum...
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, 12:29     Titel:
  Antworten mit Zitat      
Okay...Du hast also ein M-File und kein MAT-File (EIN NICHT GERINGER UNTERSCHIED!!!).

Oder ist es ein MAT-File mit *.m Endung (was in jedem Fall ungünstig wäre). Ist dies der Fall solltest Du das ändern.

Code:

daten = load('FILE','-mat');
 


Versucht auch Dateien ohne mat Endung als MAT-File zu interpretieren (wirft aber einen Fehler wenns schief geht, also kein MAT-File ist).

Öffne Dein File mal mit dem Editor, kannst Du es lesen bzw. enhält es nicht nur kryptische Zeichen dann hast Du ein M-File vor dir...

das kannst Du starten indem du den namen in der Command-Zeile eingibst (wenn es im Matlab-Pfad liegt).
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, 12:35     Titel:
  Antworten mit Zitat      
Ja, ich habe eine .m-File. Ich dachte, das wäre Standard, wenn man in Matlab Programme schreibt...
Und wie bekomme ich die Variablen raus, wenn es nun eine .m-File ist und whos anscheinend nur mit .mat funktioniert?
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, 12:40     Titel:
  Antworten mit Zitat      
Die solltest Du einfach in den MATLAB Workspace geschrieben bekommen, wenn Du das M-File startest.

einfach den Namen (ohne Endung) in die Command-Zeile schreiben und <ENTER> drücken.

Wenn die Datei nicht auf dem MATLAB Pfad liegt (Fehler: nicht gefunden), geht:

Code:

run vollstPfad
 
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, 13:01     Titel:
  Antworten mit Zitat      
Okay, File funzt (das wusste ich ja). Aber ich besitze einfach keine Variablen Very Happy Vermutlich weil das alles über die Dateiauswahl in der GUI läuft und ich keine Variablen vorher definiere.
Ich kann ja mal den Code zu dem dataread_Callback schreiben, darin werden die Daten ausgewählt und geöffnet.
Code:
function dataread_Callback(hObject,handles)
    [Dateiname, Dateipfad,fi]=uigetfile({'*.xls';'*.csv';'*.mat'},'File Selector');
   
    if fi == 1
        data = xlsread(fullfile(Dateipfad,Dateiname));
        setappdata(0,'Data',data)
    elseif fi == 2
        daten = csvread(fullfile(Dateipfad,Dateiname));
        data = daten(:,11);
        setappdata(0,'Data',data)
    elseif fi == 3
         daten = load(Dateiname);
% Hier ist der Problemfall mit der .mat-File
%          data = data(:,10);
         setappdata(0,'Data',data)
    else
        msgbox('No Data retrieved');
    end  
 
end
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, 13:13     Titel:
  Antworten mit Zitat      
Kannst Du bitte einfach nochmal zusammenfassen wo jetzt Dein Problem ist? Hast Du nun versucht ein *.m File über load einzulesen oder willst Du ein *.mat File über load einlesen? Willst Du Variablen aus dem *.mat File oder aus dem *.m File.

Wo sollen die Variablen den schließlich landen? Im MATLAB Workspace oder woanders.

Für den Matlab Workspace:

Code:

assignin('base', DATEN,data);
 


bei setappdata schreiben...
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, 13:19     Titel:
  Antworten mit Zitat      
Ich habe ein *.m-File als Programm, darin will ich über eine GUI ein *.mat-File einlesen. Das Einlesen an sich klappt, nur speichert er es eben als struct und ich kann auf die Spalten des Files nicht zugreifen. Die Daten, die in diesem Callback 'gespeichert' werden, sollen dann später durch andere Callbacks weiterverwendet werden.

Das ist das Problem.

Aber wie gesagt, ich werde es wohl einfach rauslassen müssen.

Vielen Dank für die Mühe Smile
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, 13:24     Titel:
  Antworten mit Zitat      
Du musst den oben genannten whos befehl mit dem MAT-File ausführen, nicht mit dem M-File dann gibt er dir die Namen der enthaltenen Variablen aus. dann musst du wie ich schon vor gefühlten 10 Nachrichten schrieb...

Code:

daten.NameDerVorhandenVariable(:,10);
 


...benutzen, so geht es jedenfalls bei mir...
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, 13:33     Titel:
  Antworten mit Zitat      
Zenon hat Folgendes geschrieben:
Du musst den oben genannten whos befehl mit dem MAT-File ausführen, nicht mit dem M-File dann gibt er dir die Namen der enthaltenen Variablen aus. dann musst du wie ich schon vor gefühlten 10 Nachrichten schrieb...

Code:

daten.NameDerVorhandenVariable(:,10);
 


...benutzen, so geht es jedenfalls bei mir...


Ja, dit is klar Wink Er schreibt mir dann mit whos nur den Namen der Datei, deren Größe,Bytes und Class (Attribute ist leer). Und dieser Befehl ist ja nur für mich, zur Überprüfung. Wenn ich da den Namen den er mir gibt, als 'NameDerVorhandenenVariable' einsetze, greift er darauf ja nicht zu, hatten wir ja alles schon.

Wie gesagt, ich lasse es ruhen, ich hab den ganzen Tag vertrödelt damit. Gibt sonst Mecker,wenn ich nicht voran komme Wink
Vielen Dank nochmal!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.04.2010, 14:17     Titel:
  Antworten mit Zitat      
Hallo,
im Prinzip sehe ich hier kein Problem:

wenn du load einer Variablen zuweist, dann werden Variablen aus .mat -File als Struktur-Felder zugewiesen.

mit who kannst in Mat-File reinschauen, welche Variablen in Mat-File sind:
Code:

who('-file',fullfile(Dateipfad,Dateiname))
 


Code:

 daten = load(fullfile(Dateipfad,Dateiname));
 % z.B du hast Variable data in Mat-File
 % dann wäre Zugriff so:
 data= daten.data(:,10)  
 %
 % mit fieldnames kannst direkt Strukturfelder abfragen
 var_names =fieldnames(daten)
 
% du kannst auch dynamisch auf Felder zugreifen
data= daten.(var_names{1})(:,10)  
 


sonst kannst du Variablen auch direkt in Workspace holen:
Code:

 load(fullfile(Dateipfad,Dateiname));
 if exist('data','var')
   data= data(:,10)  
 end
 
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, 14:34     Titel:
  Antworten mit Zitat      
Ich dachte,ich hatte das schon alles ausprobiert. Anscheinend nicht.
Also es klappt bei mir mit dem dynamischen Zugriff! Vielen Dank! Smile

Der statische Zugriff (data = daten.data(:,10)) klappt bei mir nur, wenn ich direkt den Variablennamen eintippe. Da ich aber mehrere Files einlese, muss das dynamisch funktionieren. Da Dateiname bei mir gleichzeitig der Variablenname ist, hatte ich

Code:
data = daten.Dateiname(:,10);
geschrieben. So geht das aber nicht... Aber egal, mit dem dynamischen Zugriff klappt es, so wie es jetzt aussieht!

Vielen Dank und sorry für die Umständlichkeiten Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
kahn
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 26.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2014, 22:25     Titel:
  Antworten mit Zitat      
Guten TAg,


ich versuche genauso einzulesen von *.mat über eine GUI

Code:

liste1 = dir('Y_C*');
load(liste1(end).name);

Tests = [1:length(Y_C.Test)];

 



Aber bekomme einen Fehlermeldung Undefined variable "Y_C" or class "Y_C_.Test".

freue mich auf Ihre Vorschläge..

Grüße,
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.08.2014, 22:32     Titel:
  Antworten mit Zitat      
Hallo,

neue Fragen bitte in einen neuen Thread.

Die Fehlermeldung ist doch recht klar: es gibt keine Variable mit Namen Y_C.
Wo soll sie denn herkommen?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  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.