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

multiselect von ordnern

 

noob
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2008, 09:24     Titel: multiselect von ordnern
  Antworten mit Zitat      
hallo zusammen, da unserer letzten thred
( http://www.gomatlab.de/hilfestellun.....tdatei-t812,start,15.html ) ins stocken geraten ist, posten wir hier nochmal die problematik:

wir haben 50 ordner in denen jeweils ca 50 m-files gespeichert sind. von diesen 50x50 m-files wird weiters eine fft gemacht...
Der code ist schon fertig, jedoch muss bislang jeder ordner einzeln bearbeitet werden. wir würden gerne mit einem multiselect zb 20, oder alle oder einen ordner auswählen können.

hier ist der code:


Code:


clear all;
clc;

pathname = uigetdir;
files = dir(fullfile(pathname, filesep, '*.m'));
%
for i=1:length(files) ;
load([pathname filesep files(i).name],'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp;
n=length(x);
y=fft(x,n);
y(1)=[];
lele=length(y) ;
%power=abs(y(1:lele/40)).^2
le=(1:lele/66.6);
power=abs(y(le));
%
psum =sum(power);
%
ppower= (power)./psum;
%
%ppower= (log10((power)./psum)).*10
%
%
frq=(le)/20;
%
%
stem(frq,ppower)
%
%
grid on
xlabel('f [Hz]')
ylabel('Power [%]')
title(name)
%
path = strcat(pathname,filesep,'fft',filesep);
mkdir(path);
print('-djpeg',[path name])
save([path, name,'_spek.txt'], 'ppower', '-ascii');
save([path, name,'_freq.txt'], 'frq', '-ascii');
end
 


vielen dank im voraus!!
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 12.02.2008, 12:42     Titel:
  Antworten mit Zitat      
Moin,
eine kleine Frage vorab: Befinden sich alle 50 Ordner in einem, oder in unterschiedlichen Ordnern?

Wenn sich alle in einem befinden, könnte man mit dem dir()-Befehl und einer if-Anweisung weiter kommen:
Code:

clear all;
clc;

dirname = uigetdir('','uebergeordneten Ordner auswählen'); % hier den Ordner auswählen, der die 50 Ordner beinhaltet

names = dir(dirname);

for j = 1:numel(names)

if isequal(names(j).isdir,1)

pathname = [dirname names.name];
files = dir(fullfile(pathname, filesep, '*.m'));
%
for i=1:length(files) ;
load([pathname filesep files(i).name],'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp;
n=length(x);
y=fft(x,n);
y(1)=[];
lele=length(y) ;
%power=abs(y(1:lele/40)).^2
le=(1:lele/66.6);
power=abs(y(le));
%
psum =sum(power);
%
ppower= (power)./psum;
%
%ppower= (log10((power)./psum)).*10
%
%
frq=(le)/20;
%
%
stem(frq,ppower)
%
%
grid on
xlabel('f [Hz]')
ylabel('Power [%]')
title(name)
%
path = strcat(pathname,filesep,'fft',filesep);
mkdir(path);
print('-djpeg',[path name])
save([path, name,'_spek.txt'], 'ppower', '-ascii');
save([path, name,'_freq.txt'], 'frq', '-ascii');
end % zweite for-Schleife

end % if-Anweisung

end % erste for-Schleife
 


Ich denke das sollte funktionieren Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2008, 13:56     Titel:
  Antworten mit Zitat      
erstmal danke!
ja, die 50 ordner sind in einem übergeordneten ordner gespeichert.
wenn wir den code laufen lassen passiert aber nach dem auswählen des ordners überhaupt nichts mehr... Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 12.02.2008, 14:06     Titel:
  Antworten mit Zitat      
Passiert nix mehr und ihr könnt einfach weitermachen oder steht unten neben der Schaltfläche "Start" im Matlab-Window "Busy"?
Ich weiß ja nicht wie lange euer Programm für einen Durchlauf braucht, aber bei 50x50 = 2500 Dateien kann das schonmal 'ne Weile dauern.

Wenn ihr allerdings nach dem Auswählen des Ordners einfach ohne Probleme weiterarbeiten könnte und auch keine Fehlermeldung kommt, dann sollte mich das wundern...

Ansonsten nehmt doch probehalber das Semikolon hinter der Zeile
Code:
names = dir(dirname)
weg und schaut was dabei rauskommt.
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2008, 14:21     Titel:
  Antworten mit Zitat      
es passiert tatsächlich nichts mehr, der code wird scheinbar bis zur ordnerauswahl abgespielt und dann beendet...

wenn wirdas semikolon entferne schreibt er:


names =

4x1 struct array with fields:
name
date
bytes
isdir

und dann ist es aus...
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 12.02.2008, 17:20     Titel:
  Antworten mit Zitat      
Hmmmm...
Das sieht mir danach aus, als ob ihr einen Ordner auswählt, der nicht die 50 Ordner enthält, sondern nur 4 Dateien.
Sonst müsste es so aussehen:
Zitat:
names =

50x1 struct array with fields:
name
date
bytes
isdir
und die if-Anweisung müsste einen Fehler oder sonstwas ausspucken. Um es zu überprüfen könnt ihr mal folgendes machen:
Ihr setzt vor das end der if-Anweisung noch
Code:
else
display('kein Ordner');
Damit wird bei jedem Schleifendurchlauf wenigstens irgendetwas ausgespuckt und ihr kommt damit vllt. bei der Fehlersuche voran...
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2008, 09:11     Titel:
  Antworten mit Zitat      
wir haben es erstmal mit wenigen ordnern getestet

momentan sind in dem ausgewählten ordner 2 unterordner in denen jeweils ca 150 m-files gespeichert sind, von welchen ca 50 m-files verwendet werden.
komischer weise schreibt er 4x1 struct array with fields:...
wenn wir 3 ordner drinnen haben sind es 5x1 (er gibt also immer 2 dazu?!)

die anweisung:
else
display('kein Ordner')
ändert nichts, er bricht genauso ab wie vorher...

wir haben probehalber einige TXT-files in den ausgewählten ordner gespeichert (da werden später ebenfalls die txt-files drinnen sein aus denen die unterordner und deren m-files erstellt werden). für jedes txt-file schreibt er dann einmal
"kein ordner"

2 ordner und 1 txt file ergibt:
names =

5x1 struct array with fields:
name
date
bytes
isdir

kein Ordner



wir suchen auf jeden fall mal weiter was wir da verpfuscht haben...
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.02.2008, 11:46     Titel:
  Antworten mit Zitat      
Hmmm...
Sonst lasst euch doch mal ausgeben, welche Ordner er einliest:
Code:
dir(dirname) % ohne semikolon

Ich denke Matlab liest zusätzlich noch 2 Ornder "." und ".." ein?!
Warum die Schleife allerdings abgebrochen wird, kann ich im Moment nicht sagen...
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2008, 12:00     Titel:
  Antworten mit Zitat      
hi
wir haben jetzt ingesamt 64 ordner bzw datein im ordener
32 unterordner und 32 gleichnamige txt dateien

wenn ich einfach nur dir (dirname) eingebe, bekommen wir als antwort eben alle 64 plus "." und ".."

hast du eine ahnung, wo das problem liegen könnte?

kann das irgendwie mit dem befehl 1:numel(names) zu tun haben


ps:wenn wir jetzt den code den du unsgegeben hast ausführen, schreibt er 32 x kein Ordner hin

lg noob
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.02.2008, 12:10     Titel:
  Antworten mit Zitat      
Aha...
Das bedeutet wenigstens schonmal, dass die Schleife vernünftig ausgeführt wird und die if-Abfrage auch funktioniert.
Der Befehl numel() gibt nur die Anzahl von Elementen in dem Array aus.

Der Fehler liegt irgendwo in der Schleife, wo die einzelnen files abgearbeitet werden sollen.
Überprüft doch mal, ob denn die files eingelesen werden oder nicht:
Code:
files = dir(fullfile(pathname, filesep, '*.m')) % Semikolon weg

Evtl. kommt ihr an der Stelle ja schon weiter.
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2008, 12:20     Titel:
  Antworten mit Zitat      
wenn wir die semikolons streichen kommt, beim ordner wo 2 unterordner und ein txt file drin sind:

names =

5x1 struct array with fields:
name
date
bytes
isdir


files =

0x1 struct array with fields:
name
date
bytes
isdir


kein Ordner

die ausgabe: files=..... , schreibt er 4 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.02.2008, 16:37     Titel:
  Antworten mit Zitat      
Ich hab den Fehler gefunden, er steckt mal wieder im Detail Sad

Folgendes müsstet ihr ändern:
Code:

for j = 3:numel(names)-2 % 1 zu 3 , damit er die beiden "Ordner" "." und ".." nicht berücksichtigt

if isequal(names(j).isdir,1)

pathname = [dirname names(j).name]; % hier fehlte das (j)


Damit sollte es jetzt aber klappen!!! Bei mir funktioniert es zumindest - wenn ich die Ordnerstruktur richtig nachempfunden habe Wink

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2008, 09:14     Titel:
  Antworten mit Zitat      
Wir traun uns ja fast nicht es zu sagen, aber es geht leider immer noch nicht... was uns gerade aufgefallen ist, im workspace steht folgendes

pathname C:\Programme\MATLAB704\work\Neuer OrdnerHugo

"Neuer Ordner" ist unser Übergeordneter Ordner und Hugo ein Untergeordneter in dem die m-files gespeichert sind. sollte da nicht ein backslash zwischen Neuer Ordner und Hugo stehen? wir denken das dass der grund sein sollte.
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.02.2008, 09:25     Titel:
  Antworten mit Zitat      
Och menno... Sad

Dann fehlt da wohl noch ein "filesep" Embarassed

Code:
pathname = [dirname filesep names(j).name];


Ich hoffe mal das wars dann jetzt Confused

Diese ollen Schusseligkeitsfehler immer Evil or Very Mad
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
noob
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 70
Anmeldedatum: 15.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2008, 09:47     Titel:
  Antworten mit Zitat      
yeah, es geht! wir lassen mal alles durchlaufen obs auch wirklich reibungslos funktioniert!

1000dank
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.