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

*.mat Dateien nacheinander per Schleife laden

 

brillion
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 17:03     Titel: *.mat Dateien nacheinander per Schleife laden
  Antworten mit Zitat      
Hallo Forumsgemeinde,

ich habe vor kurzem mit meiner Diplomarbeit begonnen und dafür benötige ich Matlab. Habe hier schon viele Hilfen gefunden, dafür schonmal Danke.

Da ich bei 0 gestartet bin, hat es etwas gedauert, mich in die Grundlagen reinzuarbeiten.

Allerdings steh ich jetzt vor einem Problem, das ich via Bücher und Forum nicht mehr lösen kann.

Ich habe in mehreren Ordnern eine Menge *.mat Dateien. Diese will ich nacheinander öffnen und mit den Werten Berechnungen anstellen.

Der code dazu sieht so aus:

Code:
d = dir('*.mat');                   % nur *.mat-Dateien betrachten
Anzmat = length(d);             % anzahl der *.mat-Dateien

for i=0:Anzmat                    %die 1. mat-Datei heißt datalog0_dec.mat

    load('*i*.mat')  - > Fehler : Unable to read file *i*.mat: Invalid argument.
   
    load('*',i,'*.mat') - > Fehler Argument must contain a string.
 


Ich glaube, mir fehlt da nur die passende Syntax, kann mir kurz jemand helfen?

Wüsste zudem noch jemand Hilfe, wie ich den code nicht nur auf den aktuellen Ordner, sondern auch für alle *.mat Dateien der Unterordner anweden könnte? Da ich sonst die Datei in mehrere Ordner kopieren müsste und dort jedesmal starten müsste. Fürs erste reichts allerdings auch so.

Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich würde es so machen:
Code:
d = dir('*.mat');                   % nur *.mat-Dateien betrachten
Anzmat = length(d);             % anzahl der *.mat-Dateien
for i=1:Anzmat                    
    load(d(i).name)  
end


Was das Suchen in Unterverzeichnissen angeht, müsste sich hier einiges finden lassen. Geht letztlich auch über den dir-Befehl.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
brillion
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2012, 17:37     Titel: funktioniert
  Antworten mit Zitat      
Hallo Harald, vielen Dank, funktioniert. Mit den Unterordnern suche ich mal.
Private Nachricht senden Benutzer-Profile anzeigen
 
brillion
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2012, 20:10     Titel: Probleme mit der Sortierung
  Antworten mit Zitat      
Hallo nochmal,

nachdem ich es erfolgreich geschafft habe, auch die Unterordner mit einzubeziehen, habe ich festgestellt, dass die Sortierung anscheinend nicht numerisch geschieht, da die Dateinamen bei 1 beginnen und nicht bei 001. Also ist die Reihenfolge bei bspw. 11 Dateien folgende:
-10.mat
-11.mat
1.mat
2.mat
.
.
9.mat
Würden die Dateien 01.mat usw. heißen, wäre das Problem wohl nicht schlimm.
Da es in meinem Fall auf die korrekte Reihenfolge ankommt, wollte ich fragen, wie man das Matlabseitig umgehen kann (Alternative wäre die Dateienbenennung zu ändern, aber das kann ich nicht so leicht beeinflussen).

Hier im Forum habe ich leider nichts gefunden (was mich wundert), allerdings bin ich hierauf gestoßen:
http://www.mathworks.de/support/sol.....U22/index.html?product=ML

Den code habe ich so übernommen, gibt aber den Fehler:

Subscripted assignment dimension mismatch.

Error in test (line 69)
filenums(a,b+1) = str2num(token);

Gibts noch eine andere Möglichkeit die mat Dateien in der Reihenfolge 1-100 zu laden anstatt 100, 10-19, 20-29,...,1-9 ?

Falls ich den Beitrag dazu übersehen habe, bin ich auch über linkangabe glücklich.
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.11.2012, 20:53     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Dateien durchgehend numeriert sind, geht es so:

Code:
for i=1:Anzmat                    
    load(['datei' num2str(i) '.mat'])  
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
brillion
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 20.11.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2012, 11:58     Titel:
  Antworten mit Zitat      
super, so funktionierts erstmal, danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Linda

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.06.2017, 14:11     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

ich würde es so machen:
Code:
d = dir('*.mat');                   % nur *.mat-Dateien betrachten
Anzmat = length(d);             % anzahl der *.mat-Dateien
for i=1:Anzmat                    
    load(d(i).name)  
end


Was das Suchen in Unterverzeichnissen angeht, müsste sich hier einiges finden lassen. Geht letztlich auch über den dir-Befehl.

Grüße,
Harald




Ich habe dies für meine Anwendung adaptiert, leider zeigt er bei mir die Fehlermeldung "Index exceeds matrix dimensions." an. Da ich Anfängerin bin, versteh ich nicht, warum.


Hier mein Code:

Code:
Unterord =dir( 'X:\Simulation\Vvar_T10\Sim_1');
Liste = dir('*.mat');
for i=3:length(Unterord);
    a= load(Liste(i).name);
end



Ich habe den Unterordner Sim_1 und daraus möchte ich nur die mat-Dateien, da die weiterverarbeitet werden sollen.
Und auch bei mir sind mehrere Ordner vorhanden, also Sim_2, Sim_3.., die gleichermaßen behandelt werden sollen.

Danke schonmal !

Linda
 
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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.