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

Dateien ohne schleifen aufrufen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 12:51     Titel: Dateien ohne schleifen aufrufen
  Antworten mit Zitat      
Hi mit:
Code:

pathname=uigetdir('c:\');
temp = genpath(pathname);
temppathlist = regexp([temp ';'],'(.*?);','tokens'); % erzeugt Liste mit einzelnen Unterverzeichnissen
for i=1:length(temppathlist)
    teli=cell2mat(temppathlist{i});
    tempfilel = dir(teli); %dir für einzelne Unterverzeichnisse
   tempn = {tempfilel.name}; % Liste mit allen Namen in einem Unterverzeichnis    
    for n=1:length(tempn)
        a=a+1;
        temn=cell2mat(tempn(n));
        X=[teli temn];
    end
end
 


kann ich über X alle Dateien eines Ordners und seiner Unterordner aufrufen. Aber vielleicht weiss jemand wie das schneller (mit weniger Schleifen geht)? Als nächstes käm ja noch eine if abfrage für die richtige Endung...

CU Cool
Private Nachricht senden Benutzer-Profile anzeigen


mmz
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 18.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.09.2010, 13:06     Titel:
  Antworten mit Zitat      
Hi Thomas,

1. was genau macht dein a? (hochzählen schon klar....aber für was?)

2. Was genau ist dein Ziel? Alle Dateien die in dem ausgewählt unterordner sind finden? Ich kann dir so leider nicht weiter helfen

grüße

Michael
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:16     Titel:
  Antworten mit Zitat      
Ups,
a ist ein Überrest weil ich die Dateinamen mit Pfadangabe in einer Liste speichern wollt. Das hat allerdings nicht funktioniert und ist auch nicht so zwingend.

Ich möchte alle Dateien eines Ordners und seiner Unterordner (X) aufrufen und 1. gucken ob es Bilder sind (Endung .jpg . tif .gif steht allerdings auch noch nicht) und diese dann aufrufen (imread).

CU Wink
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, 13:57     Titel: Re: Dateien ohne schleifen aufrufen
  Antworten mit Zitat      
Hallo Thomas,

Du kannst mit CELL2MAT deutlich sparsamer umgehen.
Ich finde die Namen der Variablen ausgesprochen verwirrend: temp, teli, temn, tempfilel, a, X.
Ich versuche es deshalb einfach mal ganz neu:
Code:

PathName = uigetdir('C:\');
if ~ischar(PathName), return; end  % Give a chance to cancel ever!
PathDir = dir(PathName);

% Get list of files as {N x 1} cell string including the path:
FileList = strcat(fullfile(PathName, filesep), ...
   {PathDir(~[PathDir.isdir]).name});

% Get list of subfolders, ignore folders starting with '.':
SubfolderList = {PathDir([PathDir.isdir]).name};
SubfolderList(strncmp(SubfolderList, '.', 1)) = [];

for iSub = 1:length(SubfolderList)
  SubPath = fullfile(PathName, SubfolderList{iSub});
  SubDir = dir(SubPath);
  SubFileList = {SubDir(~[SubDir.isdir]).name};
  FileList = cat(1, FileList, ...
      strcat(fullfile(SubPath, filesep), SubFileList));
end

Nun stehen in "FileList" die Filenamen mit absolutem Pfad, was immer sicherer ist als relative Pfade.

Ich kann es gerade leider nicht debuggen, weil auf meinem Netzrechner kein Matlab läuft.

STRTOK kann Dir den Teil nach dem letzten Punk abtrennen:
Code:
[dummy, FileExt] = strtok({'pfad1\file1.jpg', 'pfad2\file2.bmp'});
isPicture = ismember(lower(FileExt), {'.jpg', '.bmp', '.gif'});
 

Die Werte in FileExt sind dabei falsch, wenn der Pfad einen Punkt enthält und das File keine Extension hat! Allerdings ist dann "isPicture" richtigerweise FALSE, sodass das hier nicht gefährlich ist.
Sicherer wäre es aber, FILEPARTS in einer Schleife aufrufen zu lassen. Ich habe mir übrigens ein FILEPARTS geschrieben, dass gleich Cell Strings akzeptiert - sehr zu empfehlen!

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, 14:32     Titel:
  Antworten mit Zitat      
Hi vielen Dank erstmal,

kann es sein das dein Code nur eine Ebene (Verzeichnis/Unterverzeichnis) tief sucht (Sorry bin nicht so fit in Matlab)?

FileList = cat(1, FileList,...

führt zu der Fehlermeldung: CAT arguments dimensions are not consistent.

MfG Laughing Laughing Laughing
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:04     Titel:
  Antworten mit Zitat      
Hallo


Das Thema ist doch ähnlich, wozu dazu 2 Threads aufzumachen? siehe dort den Vorschlag:

http://www.gomatlab.de/dateiliste-e.....-unterordnern-t14085.html
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, 16:45     Titel:
  Antworten mit Zitat      
Hallo Thomas_74,

ja, das Programm sucht nur in der ersten Unterordnerhierarchie. Da hatte ich Dich falsch verstanden.

ja, das ist ein Fehler:
FileList = cat(1, FileList,...
Besser:
FileList = cat(2, FileList,...

Um alle Ordner zu durchsuchen muss das Programm sich rekursiv aufrufen. Aber schau doch mal in ther Thread, den denny empfohlen hat.

Gruß, Jan
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.