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

Dateiliste erstellen mit Unterordnern

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 12:28     Titel: Dateiliste erstellen mit Unterordnern
  Antworten mit Zitat      
Hi,

ich möchte alle Dateien aus einem Ordner und seinen Unterordnern öffnen. Dazu möchte ich eine Liste mit den Dateinamen oder besser den Pfaden inklusive Dateinamen anlegen.

Ich habees mit
Code:
x=dir
for 1:n
y=x(n)name
end
 

versucht. Allerdings müsste ich das dann in jedem Ordner einbauen und aufrufen.

Mit dos(tree) bekomm ich alle infos in einer reihe und da ist mir nicht klar wie ich da die Pfade und Dateinamen sauber raus ziehen kann?


Oder gibt es bei uigetfile die möglichkeit das so zu pimpen das es auch Unterordner mit einbezieht?

CU Smile
Private Nachricht senden Benutzer-Profile anzeigen


Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 13:15     Titel: genpath regexp dir
  Antworten mit Zitat      
Hi vielleicht hat ja jemand ne Idee was bei meinem 2. Ansatz nicht stimmt?


Code:

pathname=uigetdir('c:\');
tmp=genpath(pathname);
telist   = regexp([temp ';'],'(.*?);','tokens');
filenames      = {};
for i=1:length(telist)
tempfilel = dir(cell2mat(telist{i}));
teli=telist{i}';
temp   = {tempfilel.name}';
Liste=horzcat(teli, temp);
end
 


Liste mäüsste doch die Liste mit den Vollständigen Pfaden für das jeweilige Unterverzeichnis sein??
Crying or Very sad Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.09.2010, 15:08     Titel: Re: genpath regexp dir
  Antworten mit Zitat      
Hallo Thomas,

ich habe ein Beispiel in Deinem anderen Thread gepostet.

Code:

pathname=uigetdir('c:\');
tmp=genpath(pathname);
telist   = regexp([temp ';'],'(.*?);','tokens');
filenames      = {};
for i=1:length(telist)
tempfilel = dir(cell2mat(telist{i}));
teli=telist{i}';
temp   = {tempfilel.name}';
Liste=horzcat(teli, temp);
end
 


GENPATH ist hier nicht nützlich. Du brauchst nicht alle Unterordner und Unter-...-Unterordner, oder? Ein einfaches DIR tuts auch, wenn Du aus dem Ergebnis die Ordner-Namen herausfilters.
"telis = regexp([temp ';'],'(.*?);','tokens');" hier greifst Du auf die undefinierte Variable "temp" zu.
"filenames" ist zwar initialisiert, wird aber nicht benutzt.
In "dir(cell2mat(telist{i}))" ist das CELL2MAT überflüssig.
"teli=telist{i}';" braucht keine Transponierung.
Danach ist "teli" immer noch ein Cell String. Mit HORZCAT verbindest Du zwei cells - ich vermute, du möchtest ein STRCAT ausführen. An den String kämst Du zumindest mit "teli{1}{1}" dran.

Aber ich glaube, Du solltest noch mal ganz von vorn beginnen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 15:34     Titel:
  Antworten mit Zitat      
Hi Danke erstmal für die Tips.

und ja ich möcht wirklich alle Unterordner in x Ebenen durchforsten.

MfG Sad Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 15:43     Titel:
  Antworten mit Zitat      
Hi so läuft der Code (nicht schön, nicht schnell)
X ist die jeweils Aktulle Datei mit absolutem Pfad.

Code:

pathname=uigetdir('c:\');
temp = genpath(pathname);
temppathlist = regexp([temp ';'],'(.*?);','tokens');
for i=1:length(temppathlist)
    teli=cell2mat(temppathlist{i});
    tempfilel = dir(teli);
   tempn = {tempfilel.name};  
    for n=1:length(tempn)
        temn=cell2mat(tempn(n));
        X=[teli temn];
    end
end

 


allerdings funktioniert das ohne cell2mat nicht?

CU Confused Confused
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.09.2010, 15:58     Titel:
  Antworten mit Zitat      
Hallo, so könnte das auch erreicht werden
Code:

[stat,filelist] = system(sprintf('DIR %s /B /S',pwd))

% wenn als cell gewünscht dann splitten
regexp(filelist,'\n','split')
 


Du hast 2 Threads mit ähnlicher Thematik aufgemacht:
http://www.gomatlab.de/dateien-ohne.....ifen-aufrufen-t14138.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2010, 10:00     Titel: ÄÜÖ in Dateinamen
  Antworten mit Zitat      
Hi,

ich hab jetzt beide Probleme kombiniert und die Lösung die ich verwende ist die mit dem DOS befehl. Die erzeugt eine schöne Liste mit Den Dateinamen.
Und für den Bildercheck rufe ich de dann auf.
Allerdings haut Matlab mir immer eine Fehlermeldung raus wenn der Dateiname ä,ö,ü enthält.
Vielleicht kennt jemand einen Bildbetrachter den ich mit der command line aufrufen könnte (anstatt imread zu benutzen) oder kann ich Matlab beibringen auch ä,ö,ü in Dateinamen zu akzeptieren.

Für den Bildercheck wäre es außerdem ein gewinn wenn ich aus meiner Liste direkt alles aussortieren könnte was nicht jpg png gif tiff ... ist. Geht so etwas?


Embarassed Embarassed
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.09.2010, 11:38     Titel:
  Antworten mit Zitat      
Also Umlaute sollen grundsätzlich in Dateien vermieden werden. Deswegen ist es günstiger Dateien gleich richtig zu benennen.
Also Umweg wäre dann einfach wie zuvor mit MATLAB-Befehlen zu arbeiten.


Filter kann mit REGEXP formuliert werden:
Code:

[stat,filelist] = system(sprintf('DIR %s /B /S',pwd))
filelist = regexp(filelist,'\n','split')

% filter definition
filt_pos = regexp(filelist ,'\.(jpg|png|gif|tif(f)?)');
filt_pos = ~cellfun(@isempty ,filt_pos);
% filter anwenden
filelist  = filelist(filt_pos)  
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.09.2010, 12:22     Titel:
  Antworten mit Zitat      
Hallo,

nur ein kleiner Kommentar:
Code:
filt_pos = ~cellfun(@isempty ,filt_pos);

CELLFUN arbeitet deutlich schneller mit dem Argument 'isempty' anstatt @isempty. Das gilt für alle String-Befehle, die in "help cellfun" aufgezählt werden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2010, 15:55     Titel: ü ä ö
  Antworten mit Zitat      
Für einen Anfänger,

wie geb ich das denn ohne @isempty ein (schneller)?

P.S. hat jemand eine Idee für ä,ü,ö ich meine ich hätt Matlab schon mal irgendwo Dateien damit aufrufen sehen (weiss natürlich nicht wie es gemacht wurde)

P.P.S. arggghhh ich hab festgestellt das Matlab Ordner mit Lehrzeichen im Namen (wie Neuer Ordner) schlicht und einfach ignoriert Evil or Very Mad Evil or Very Mad Evil or Very Mad
ich hoffe jemand hat eine Idee die nicht heist ca. 200 Ordner und 100000 Bilder per Hand umbenennen


Könnte es sein das das gar nicht an Matlab sondern an dem DIR befehl liegt?? bzw. das der string (%s) da keine äöüs kann im dos fenster läuft das reibungslos

Shocked
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



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



Zitat:
Könnte es sein das das gar nicht an Matlab sondern an dem DIR befehl liegt?? bzw. das der string (%s) da keine äöüs kann im dos fenster läuft das reibungslos

Nein es liegt einfach, dass DOS anderen Format verwendet.
Du siehst zwar in der DOS-Fenster richtig dargestellt.
Bei Kommunikation kommt es aber zu den Verlusten, weil anderer Format angenommen wird als es DOS verwendet

Probiere folgendes:

Code:

tmp_fname  = fullfile(tempdir, 'tempfile.tmp' );
 path2image = pwd;
 
 % Ausgabe in ein File umleiten
 system(sprintf('DIR %s > %s /B /s', path2image ,tmp_fname) )
 
 % einlesen
 fid      = fopen(tmp_fname,'r','n','windows-1252');
 filelist        = fread(fid);
 fclose(fid);
 
% umlaute ersetzen
filelist(filelist==142)  = double('Ä');
filelist(filelist==153)  = double('Ö');
filelist(filelist==154)  = double('Ü');
filelist(filelist==132)  = double('ä');
filelist(filelist==148)  = double('ö');
filelist(filelist==129)  = double('ü');
filelist(filelist==225)  = double('ß');
%
% Rücklauf Zeichen löschen (\r)
filelist(filelist==13)   = [];
 
filelist= char(filelist)';
 

filelist = regexp(filelist,'\n','split');

% filter definition
filt_pos = regexp(filelist ,'\.(jpg|png|gif|tif(f)?)');

% Jan meint es so einsetzen:
filt_pos = ~cellfun('isempty' ,filt_pos);
% filter anwenden
filelist  = filelist(filt_pos);  
 



Zitat:
wie geb ich das denn ohne @isempty ein (schneller)?

Jan meint es so, Hochkommas sind für Abwärtskompatibilität gedacht.
Da wird wohl ein Auswerteschritt gespart.
Code:

filt_pos = ~cellfun('isempty' ,filt_pos);
 



Zitat:
P.P.S. arggghhh ich hab festgestellt das Matlab Ordner mit Lehrzeichen im Namen (wie Neuer Ordner) schlicht und einfach ignoriert Evil or Very Mad Evil or Very Mad Evil or Very Mad
ich hoffe jemand hat eine Idee die nicht heist ca. 200 Ordner und 100000 Bilder per Hand umbenennen


Und hier sollte man Leerzeichen vermeiden, aber es sollte mit Leerzeichen schon funktionieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2010, 11:12     Titel:
  Antworten mit Zitat      
Respekt,

funktioniert wunderbar mir ist noch nicht ganz klar warum aber funktioniert.
Einzig ich muss das Matlab Programm wieder in dem zu durchsuchenden Ordner haben.


Vielen Dank
Very Happy Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 09.09.2010, 11:28     Titel:
  Antworten mit Zitat      
Hallo

nicht zu danken, musste aber einige Zeit mit dem Problem selbst herumschlagen.



Zitat:
Einzig ich muss das Matlab Programm wieder in dem zu durchsuchenden Ordner haben.

Das kannst auch ganze als Funktion schreiben,
dann kann man den Pfad über Funktionskopf eingeben.

oder Zeile
Code:

path2image = pwd;
 


ersetzen durch
Code:

path2image = uigedir(pwd,'select directory with images');
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.09.2010, 11:36     Titel:
  Antworten mit Zitat      
WOW

Jetzt macht es genau das was ich will!

Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy
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.