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'.
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
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 ;)
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 ;)
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..
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 ;)
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.
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 ;)
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 ;)
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.
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), [03]) save([path 'results.mat'],'T'); % hier würde ich gerne alle Tabellen speichern und nicht nur jeweils eine end
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 ;)
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.
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 ;)
ich habe es geschafft. Die Variable T musste ich neu benennen und jetzt klappt es zum Glück auch.
Vielen Dank nochmal!!
Einstellungen und Berechtigungen
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.