Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Anwendungen der Linearen Algebra mit MATLAB

Fachkräfte:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Einlesen mehrerer .mat Dateien in Matlab

 

NoobKaddy
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2020, 13:54     Titel: Einlesen mehrerer .mat Dateien in Matlab
  Antworten mit Zitat      
Hallo zusammen,

ich muss für meine Projektarbeit eine große Menge an .mat Dateien analysieren. Diese haben alle unterschiedliche Namen, die Tabellen sind jedoch von ihren Spaltenanzahlen gleich aufgebaut.

Ich würde die Dateien gerne in einer Schleife automatisch nacheinander einlesen, um dort die relevanten Informationen ausgeben zu können. Leider habe ich bisher keinen passenden Beitrag darüber gefunden, wie ich das ganze anstellen könnte.

Ich wollte es mit load probieren. Erhalte hierbei jedoch immer die Fehlermeldung 'Input cannot be a directory'.

Code:
Matlab_Daten = data.folder;
Matlab_Daten = strcat(Pfad_Einsatzdaten,'\MATLAB\')

for j = 1:length(filename)
   
    filename{j}
   
    load([Matlab_Daten filename{j}], '.mat')



end


Die anderen Informationen habe ich erstmal rausgelöscht aus der Schleife, weil es mir hier erstmal speziell um das Einlesen der Daten geht.
Es wäre super, wenn mir jemand von euch helfen kann Smile

Vielen Dank und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2020, 17:11     Titel:
  Antworten mit Zitat      
Hallo,

sieht an sich gut aus.

Was ist filename?
Was ergibt
Code:
[Matlab_Daten filename{1}]


Bekommst du die Fehlermeldung schon bei der ersten Iteration oder erst später?

Variablen werden hier ggf. überschrieben. Ist das beabsichtigt?

Es kann einfacher sein, mit dir eine Liste der Dateien in einem Verzeichnis zu generieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2020, 09:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich dachte, dass filename sich auf alle Dateien in dem Ordner bezieht. Die Fehlermeldung kommt direkt bei der ersten Iteration leider.
Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.09.2020, 11:02     Titel:
  Antworten mit Zitat      
Hallo,

es gibt keine Funktion filename. Du musst also filename definiert haben, und die Frage wäre wie.
Ich darf auch nochmal auf die Alternative dir hinweisen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 11:07     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe das Problem mit dem Einlesen gelöst. Jetzt würde ich gerne die Table T, die ich für jede Datei erzeuge gesammelt in einer Table speichern und nicht in verschiedenen. Wie gehe ich hierbei vor? Ich habe bisher nur viele Dateien und wenn ich es versuche in einer zu speichern, wird jeweils nur die letzte Table T dort gespeichert, weil T ja immer überschrieben wird..

Code:
i = numel (filename);
for index =1:1:i
    load(fullfile(path,filename{index}),'-mat')
 
     T = E(ix,41:43)
    if size(T) == [0 3]
    else
    save([path 'Ergebnis\' erase(filename{index},'.mat')],'T');
      clear T
    end
end
 


Ich wäre für einen Tipp sehr dankbar. Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2020, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Jetzt würde ich gerne die Table T, die ich für jede Datei erzeuge gesammelt in einer Table speichern und nicht in verschiedenen.

Und wie? Untereinander schreiben?

Das ginge prinzipiell so:

Code:
T = table();
for k = 1:10
    newData = array2table(rand(10,3));
    T = [T; newData];
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 11:37     Titel:
  Antworten mit Zitat      
genau, ich möchte die Zeilen einfach untereinander in Tabellen schreiben. In den Tabellen befinden sich Texte statt zahlen.
Wenn ich dein Beispiel verwende, dann kommt bei mir leider wieder nur eine Tabelle mit einem Eintrag raus.

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

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2020, 11:41     Titel:
  Antworten mit Zitat      
Hallo,

in meinem Beispiel funktioniert es ja. Die Frage ist also, was bei dir anders ist. Der Datentyp der Spalten sollte nicht das Problem sein, solange er konsistent ist.

Um dir da weiter zu helfen, brauche ich mindestens den von dir verwendeten Code und am besten auch noch Beispieldaten, damit ich das reproduzieren kann.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 12:16     Titel:
  Antworten mit Zitat      
Hier mein verwendeter Code und drei Beispieltabellen.

Vielen Dank und Viele Grüße

Beispiel.m
 Beschreibung:

Download
 Dateiname:  Beispiel.m
 Dateigröße:  885 Bytes
 Heruntergeladen:  55 mal
Beispiel - 3.mat
 Beschreibung:

Download
 Dateiname:  Beispiel - 3.mat
 Dateigröße:  877 Bytes
 Heruntergeladen:  58 mal
Beispiel - 1.mat
 Beschreibung:

Download
 Dateiname:  Beispiel - 1.mat
 Dateigröße:  879 Bytes
 Heruntergeladen:  57 mal
Beispiel - 2.mat
 Beschreibung:

Download
 Dateiname:  Beispiel - 2.mat
 Dateigröße:  909 Bytes
 Heruntergeladen:  61 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2020, 12:54     Titel:
  Antworten mit Zitat      
Hallo,

das Beispiel ist sinnfrei, da E jeweils nur 4 Spalten hat, du aber aus der bis zu 43. Spalte extrahieren willst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 13:03     Titel:
  Antworten mit Zitat      
Hallo Harald,

entschuldige dafür. In meinem eigentlichen Skript gibt es eine deutlich größere Tabelle, von dieser interessieren mich nur bestimmte Bereiche, daher die entsprechende Codezeile.

Beispielhaft hier sollen jetzt die drei Tabellen in einer Schleife zu einer werden.

Danke und viele Grüße

Beispiel.m
 Beschreibung:

Download
 Dateiname:  Beispiel.m
 Dateigröße:  881 Bytes
 Heruntergeladen:  53 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2020, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

Vorschlag:

Code:
rawdata=[];
[filename, path, filterindex] = uigetfile( ...
    {  '*.mat','MAT-files (*.mat)'; ...
    '*.*',  'All Files (*.*)'}, ...
    'Bitte Dateien auswählen', ...
    'MultiSelect', 'on'); % um Dateien auszuwählen, die betrachtet werden sollen

% wenn filename nicht cell, dann mache eins
if ~iscell(filename)
    filename={filename};
end

i = numel (filename);
T = table();
for index =1:1:i    
    load(fullfile(path,filename{index}),'-mat') % Tabelle T öffnen
    %ix=any(ismember(E{:,13:24},{'MSE20';'MSE10';'MSE30'}),3); % sucht in welchen Spalten entsprechende Wörter vorkommen
    newData = E(:,1:3) % gibt Tabelle aus mit entsprechenden Zeilen
    T = [T; newData]    
end

if ~isequal(size(T), [0 3])
    save([path 'results.mat'],'T'); % hier würde ich gerne alle Tabellen speichern und nicht nur jeweils eine
end


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 15:12     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für deine ganzen Bemühungen!!
Leider klappt das Zusammenführen der ganzen tables T so nicht. Mit deinem Skript bekomme ich die Zeile, die schon in der table vorkommt nochmal darunter geschrieben und keine neue Zeile aus einer anderen table.

Hier nochmal genauer mein Problem:
Ich habe ein Skript geschrieben, was mir viele verschiedene Tabellen T in jeweils unterschiedlichen Dateinamen abspeichert. Die Tabellen haben alle die gleichen Zeilenüberschriften und verschieden viele Zeilen. Diese unterschiedlichen Tabellen würde ich nun gerne zu einer Tabelle zusammenführen.
Derzeit wird in der for Schleife ja für jedes T eine Datei gespeichert und dann wird das T überschrieben in ein neues T einer neuen Datei, was wieder gespeichert wird etc..

Ich kann mir gar nicht vorstellen, dass mein Problem so schwer ist zu lösen, da das ja bestimmt gängig so gemacht wird. Jedoch komme ich leider nicht auf die Lösung.

Viele Grüße und nochmals tausend Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.09.2020, 15:41     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider klappt das Zusammenführen der ganzen tables T so nicht. Mit deinem Skript bekomme ich die Zeile, die schon in der table vorkommt nochmal darunter geschrieben und keine neue Zeile aus einer anderen table.

Mit den von dir zur Verfügung gestellten .mat-Dateien bekomme ich einen 4x3-Table T mit lauter unterschiedlichen Zeilen. Das ist doch das gewünschte Ergebnis? Falls nicht, sag mir bitte, was denn das gewünschte Ergebnis ist.
Vielleicht ist da dann was in der Anpassung auf deine echten Daten schief gegangen. Was das ist, kann ich aber nicht erahnen.

Zitat:
Diese unterschiedlichen Tabellen würde ich nun gerne zu einer Tabelle zusammenführen.

Genau das ist bei mir in T der Fall.

Zitat:
Derzeit wird in der for Schleife ja für jedes T eine Datei gespeichert und dann wird das T überschrieben in ein neues T einer neuen Datei, was wieder gespeichert wird etc..

In meinem Vorschlag wird T nicht überschrieben, sondern es wird an T unten angehängt. Wenn du die Daten pro Iteration rausschreiben möchtest, dann das wie bei deinem bisherigen Ansatz innerhalb der Schleife, aber newData exportieren.

Zitat:
Ich kann mir gar nicht vorstellen, dass mein Problem so schwer ist zu lösen

Das ist es auch sicher nicht. Zumindest für mich ist das Problem eher, dass ich dein Problem genau verstehen muss, um dir bei der Lösung helfen zu können.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
NoobKaddy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 18.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2020, 16:23     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe es geschafft. Die Variable T musste ich neu benennen und jetzt klappt es zum Glück auch.

Vielen Dank nochmal!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.