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

(.m) Files aus einem Ordner und dessen Unterordnern filtern

 

Roland_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 08:01     Titel: (.m) Files aus einem Ordner und dessen Unterordnern filtern
  Antworten mit Zitat      
Hallo,

ich bin ein totaler neueinsteiger at matlab und bräuchte mal eure hilfe bitte. Wie im titel schon beschrieben brauche ich ein "script" bzw befehlfolge die mir alle matlab files aus einem verzeichnis auslesen und dann am bildschirm schön nacheinander anzeigen (liste).

durch google konnte ich bereits in erfahrung bringen das ich mit genpath die ordner struktur auslesen kann.

Code:
mfiles = genpath('C:\UserData\blabla\')


mit dem dir befehl kann ich ja zb nach "*.m*" files suchen, also wo irgendwo vorkommt ".m" egal ob .mat oder sonst was.. hilft mir aber für mein problem nicht weiter.

Any ideas? :/

lg roland


Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 06.05.2010, 09:43     Titel:
  Antworten mit Zitat      
list=dir(ordnerpfad);
names={list.name}

das wäre ein anfang, names gefällt mir noch nicht ganz wegen '.' und '..'

ich warte auch auf eine antwort mit dir

gruss
Private Nachricht senden Benutzer-Profile anzeigen
 
Roland_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 09:55     Titel:
  Antworten mit Zitat      
list=dir(ordnerpfad);
names={list.name}

--

das sind aber bei mir n-pfade, darum kann ich das ja nicht verwenden? oder geht das mit einer schleife? wenn ja wie verknüpf ich das mit genpath? das er da bei der schleife dann die pfade abarbeitet? UND nach .m files durchsucht? sind ja mehrere filetypen in den ordnern
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.05.2010, 10:55     Titel:
  Antworten mit Zitat      
Hallo

Die Idee mit GENPATH und DIR ist schon richtig,
muss du noch entsprechend über Schleifen kombinieren
Code:


pfadliste  = genpath(ordnerpfad);
pfadliste  = regexp(pfadliste(1:end-1),pathsep,'split');
for k=1:length(pfadliste)
  mfiles= dir(fullfile(pfadliste{k},'*.m'));
  mfiles={mfiles.name};
  if ~isempty(mfiles)
     fprintf('In Ordner %s:\n',pfadliste{k})
     for l=1:length(mfiles)
          fprintf('%3d): %s\n',l,mfiles{l})
     end
   end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Roland_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 13:09     Titel:
  Antworten mit Zitat      
danke!!

was macht genau:
mfiles={mfiles.name};

es wäre ja auch möglich nachdem schon ein vektor besteht mit den pfaden, diese zu erweitern das in der 2ten spalte die .m files stehen

list(1:2)
= 1: Path 2: mfile

Code:

>> pathlist = genpath('C:\UserData\lnzlabadmin\SMARTi_LU\CV_trunk\units\' )
>> pathlist=regexp(pathlist (1:end-1), '\;', 'split');      
>> pathlist=pathlist';
...
 


[/code]
 
Roland_123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2010, 13:12     Titel:
  Antworten mit Zitat      
sry für doppelpost, internet spinnt rum.

aber dafür muss ich mich noch weiter damit beschäftigen.. kopf raucht
gibt es vllt ein tipp um es anzugehen?
 
Roland_123
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 06.05.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 06.05.2010, 13:22     Titel:
  Antworten mit Zitat      
bitte die beiden post über diesen löschen / dachte ich kann mich als angemeldeter user dann doch noch editieren.

danke!!

was macht genau:
mfiles={mfiles.name};

es wäre ja auch möglich nachdem schon ein vektor besteht mit den pfaden, diese zu erweitern das in der 2ten spalte die .m files stehen

list(1:2)
= 1: Path 2: file

hab mir das so gedacht

mfiles= dir(fullfile(pfadliste{k},'*.m'));
mfiles={mfiles.name}; -- oder das nicht weiß nicht was das macht^^

und dann schreibt er auf den vektor X

X =[pfadliste(k):mfiles(l)];

würde das so gehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.05.2010, 14:19     Titel:
  Antworten mit Zitat      
Roland_123 hat Folgendes geschrieben:

was macht genau:
mfiles={mfiles.name};

Das ist nichts besonders, nur eine Umformung.
Aus Struct Array wird Ein Cell Array of Strings
Das ist aber Geschmackssache.


Roland_123 hat Folgendes geschrieben:


hab mir das so gedacht

mfiles= dir(fullfile(pfadliste{k},'*.m'));
mfiles={mfiles.name}; -- oder das nicht weiß nicht was das macht^^

und dann schreibt er auf den vektor X

X =[pfadliste(k):mfiles(l)];

würde das so gehen?


Meinst du so:
Code:

pfadliste  = genpath(pwd);
pfadliste  = regexp(pfadliste(1:end-1),pathsep,'split');

S = '';
for k=1:length(pfadliste)
   mfiles= dir(fullfile(pfadliste{k},'*.m'));
   mfiles={mfiles.name};
   
   for l=1:length(mfiles)
      S = sprintf('%s;%s',fullfile(pfadliste{k},mfiles{l}),S);
   end
end

pfadliste  = regexp(S(1:end-1),pathsep,'split');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Roland_123
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 06.05.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 06.05.2010, 14:39     Titel:
  Antworten mit Zitat      
fast
in spalte eins sollte nur der pfad ohne dateiname, erst in spalte 2 sollte die datei

Pfad | Datei |
-----|----------|
-----|----------|
c:... | blub.m |
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.05.2010, 16:32     Titel:
  Antworten mit Zitat      
Okay verstehe jetzt dann so:

Code:

pfadliste  = genpath(pwd);
pfadliste  = regexp(pfadliste(1:end-1),pathsep,'split');


for k=1:length(pfadliste)
   mfiles     = dir(fullfile(pfadliste{k},'*.m'));
   mfiles     = {mfiles.name};
   cur_len    = length(mfiles);
   if k == 1
     last_len = 0;
     X          = cell(last_len + cur_len,2);
   else
     tX       = X;
     last_len = size(X,1);
     X          = cell(last_len + cur_len,2);
     X(1:last_len,1) = tX(:,1);
     X(1:last_len,2) = tX(:,2);
   end
   X(last_len+1:cur_len+last_len,1)= pfadliste(k);
   X(last_len+1:cur_len+last_len,2)= mfiles(:);
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Roland_123
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 06.05.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 07.05.2010, 07:49     Titel:
  Antworten mit Zitat      
boa soviel bahnhof ^^

interpretiere ich das richtig:

Code:

for k=1:length(pfadliste)  
 

#Abfrage 1 bis letzten pfad
Code:

   mfiles     = dir(fullfile(pfadliste{k},'*.m'));  
 

#durchsuchen der pfade auf .m files
Code:

   mfiles     = {mfiles.name};                      
 

# umformung: struct array zu sring array
Code:

   cur_len    = length(mfiles);                      
 

# derzeitige länge des vektors
Code:

   if k == 1                                                
 

#abfrage auf ersten schleifendurchlauf (1.pfad)
Code:

     last_len = 0;                                        
 

#letzte vektorlänge = 0
Code:
   
     X          = cell(last_len + cur_len,2);      
 

#beschreibe zelle, letzer + jetziger vektorlänge und schreibe es in die 2te spalte der zelle X
Code:
 
  else                                                      
 

#was passiert wenn nicht 1. schleifendurchlauf
Code:

     tX       = X;  
 

Code:

     last_len = size(X,1);                            
 

#vergangene vektorlänge schreibe in die erste spalte der zelle X
Code:

     X          = cell(last_len + cur_len,2);      
 

#beschreibe zelle, letzer + jetziger vektorlänge und schreibe es in die 2te spalte der zelle X
Code:

     X(1:last_len,1) = tX(:,1);                      #
     X(1:last_len,2) = tX(:,2);
   end
   X(last_len+1:cur_len+last_len,1)= pfadliste(k);
   X(last_len+1:cur_len+last_len,2)= mfiles(:);
end
 


unteren teil versteh ich nicht :/ kannst du mir den bitte erklären?
besonders last_len / cur_len

viele dank. dumm c/p bringts nicht^^
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.05.2010, 09:42     Titel:
  Antworten mit Zitat      
Hallo

ich kommentiere einfach den Code

Code:

% lese alle Unterverzeichnisse aus
pfadliste  = genpath(pwd);
%
% splitte string to cell array  
pfadliste  = regexp(pfadliste(1:end-1),pathsep,'split');
%
% schaue durch alle Verzeichnisse
for k=1:length(pfadliste)
%
% suche in aktuellen Verzeichnis M-Files raus
   mfiles     = dir(fullfile(pfadliste{k},'*.m'));
%
% umformen zu cell array
   mfiles     = {mfiles.name};
%
% anzahl  der m-files in aktuellem Vezeichnis
   cur_len    = length(mfiles);
%
% bei ersten Durchlauf
   if k == 1
     last_len = 0;
%
% intialisiere cell array der Größe  "Anzahl gefundener Files" x 2
     X          = cell(last_len + cur_len,2);
   else
%
% merke letzten Stand von X
     tX       = X;
%
% bestimme die Anzahl schon gefundener Files
     last_len = size(X,1);
%
% erzeuge neue größeren Cell Array,
% welcher die Größe aus Anzahl zuletzt gefundener und
% aktuell gefundener Files haben soll
     X          = cell(last_len + cur_len,2);
%
% kopiere die zuletzt gefundene Files wieder zurück in X
     X(1:last_len,1) = tX(:,1);
     X(1:last_len,2) = tX(:,2);
% jetzt ist
   end
%
% kopiere pfad, dabei muss angefangen werden,
% eine Position von letztem Eintrag bis in Prinzip bis
% Ende, deswegen kann man hier sogar vereinfachen
%  
   X(last_len+1:end,1)= pfadliste(k);
%
% kopiere aktuelle gefundene M-Files, gleicher Prinzip
   X(last_len+1:end,2)= mfiles(:);
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Roland_123
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 06.05.10
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 07.05.2010, 10:14     Titel:
  Antworten mit Zitat      
denny hat Folgendes geschrieben:


Code:
% intialisiere cell array der Größe  "Anzahl gefundener Files" x 2
     X          = cell(last_len + cur_len,2);
 



wie darf ich "x 2" verstehen? Mal 2?
help cell, gibt irgendwie garnix aus was irgendwie ,2 darstellen soll

btw danke für die tolle erklärung.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.05.2010, 10:33     Titel:
  Antworten mit Zitat      
Hallo,

sollte bloß in Matrixschreibweise Dimension eingeben:
Zeilen Mal Spalten /Zeilen x Spalten/ m x n / A(m,n)

Code:

% statt help doc
doc cell
 
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
.





 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.