Moin,
mit dem Befehl kann man auch mehrere Dateien auf einmal auswählen, deren Namen dann in einem Cell-Array gespeichert werden. Über eine Schleife kann man dann alle files abarbeiten lassen und zwischendurch noch Kaffee trinken gehen, da man das Programm ja nur einmal starten muss
Code:
[filename pathname] = uigetfile(...,'multiselect','on'); % filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files
ich möchte jedes m-file in einer scheife abarbeiten bis jetzt haben wir das so gelöst
Code:
clearall;
clc;
%
%[filename pathname] = uigetfile('*.m','multiselect','on');
%filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files
files=dir('*.m');
for i=1:length(files) ;
load(files(i).name,'-ascii');
[pfad, name, ext, vers]=fileparts(files(i).name);
%Auswertung
eval(['temp=',name]);
x=temp(:,1);
y=temp(:,2);
t = 0:0.1:2*pi;
x_ = mean(x) ;
y_ = mean(y) ;
r = 0.3;
%
Innen=length(find((x-x_).^2+(y-y_).^2<=r.^2));
Anteil_Innen=Innen/length(x)*100;
%
plot(x_,y_,'rx','LineWidth',4);
axis equal
axis([min(x)-0.2max(x)+0.2min(y)-0.2max(y)+0.2]);
hold on
plot(x_+r*cos(t),y_+r*sin(t),'r','LineWidth',3) plot(x,y);
leg = ['Inner Loop: ' num2str(Anteil_Innen) ' Prozent'];
legend(leg,'Location','SouthOutside') hold off
xlabel('COFx') ylabel('COFy') title(name) grid on
%
path = strcat(pwd,filesep,'2d',filesep);
mkdir(path);
print('-djpeg',[path name]);
%X=temp(:,1)*temp(:,2)';
%save([name,'.txt'],'X','-ascii');
end
clearall;
clc;
% % [filename pathname] = uigetfile('*.m','multiselect','on'); % filename ist ein cell array und pathname ist ein string zu dem Ordner mit den files
pathname = uigetdir;
files = dir(fullfile(pathname, filesep, '*.m'));
% [...]
Damit solltet ihr das Verzeichnis auswählen können und danach werden die Namen aller m-files aus diesem Verzeichnis eingelesen.
Ganz unten in eurem Code müsst ihr dann nur aufpassen, dass ihr jetzt nicht das current directory gewechselt habt.
Code:
path = strcat(pathname,filesep,'2d',filesep); % hier steht jetzt statt pwd pathname, da das ja jetzt der Ordner ist, "in" welchem ihr arbeitet mkdir(path);
Ahhh, ich wusste doch ich hab was übersehen
Der load-Befehl sucht ja im current directory nach der Datei - also müsst ihr den Aufruf noch etwas verändern:
jedoch gibts jetzt ein problem mit einer anderen "Funktion".
dadurch dass wir jetzt den current directory nicht mehr auswählen, funktioniert die zeile, dass er ein txt.file in den orner speichen soll nicht mehr
Hmm, ich verstehe euch nicht richtig glaub ich...
Aus welchem Ordner lest ihr denn die files ein? Aus ...\work\xxx oder aus ...\work?
Im 2. Fall müsste dann folgendes stehen:
Eine Sache gibt es noch die wir bei unserem anderen code abändern müssen. Grundsätzlich sind wir davon ausgegangen, dass wir nur wenige txt-files einlesen müssen, und einzeln aufrufen (mittels uigetfile).. jetzt sind es über 50 und daher würden wir es gerne in der gleichen art machen wie beim gerade besprochenen fall (mit uigetdir?). Der code soll also für alle, im ordner gespeicherten txt-files ausgeführt werden.
der code: (es ging dabei darum, aus einem txt file in dem 144 datensätze stehen, 144 einzelne m-files zu machen die wir später weiter verarbeiten)http://www.gomatlab.de/viewtopic,p,2018.html#2018
Code:
[filename, pathname]=uigetfile('*.txt', 'Select input data file:');
fid = fopen([pathname filename]) mkdir([pathname filename(1:end-4)]);
% Main-Header überspringen (14 Zeilen) for i=1:14;
fgetl(fid);
end % try
n = 0;
while1 %
n = n+1 % Type auslesen
test_type = sscanf(fgetl(fid),'Test Type: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
cond_num = sscanf(fgetl(fid),'Condition Number: %s');
trial_num = sscanf(fgetl(fid),'Trial Number: %s');
fgetl(fid);fgetl(fid);fgetl(fid);fgetl(fid);
%
tmp = fgetl(fid);
test_comm = strread(tmp,'%s');
%
test_comm = test_comm(3:end);
% '/' backslash eliminieren
test_comm(ismember(test_comm,'/'))=[];
%
% nur die erstn 2 Chars von jedem Keyword extrahieren
test_comm1 = [];
for i=test_comm'
test_comm1 = [test_comm1 i{1}(1:2)];
end% for % % filenamen bilden if(test_comm1>0)
fname = sprintf('%s_%d_%s_%s_%s.m', ...
test_type,n,cond_num,trial_num,test_comm1);
else
fname = sprintf('%s_%d_%s_%s.m', ...
test_type,n,cond_num,trial_num);
end
%file anlegen
fid1 = fopen([[pathname filename(1:end-4)filesep], fname],'wt');
%
% % startet bei Zeile: Test Comment %
%überspringt die nächsten 2 Zeilen (" " und "Units...") for i=1:3 ;
fgetl(fid);
end %
%speichert Zeile DP LF .... bis Zeile 20 -> (Units) %
flag = 0; % Hinweiszeichen, ob es sich um einen verkürzten Eintrag handelt
%
for i = 1 : 2000
zeile = strread(fgetl(fid),'%s','delimiter',' '); % wenn ihr die Spalten durch Tabs getrennt habt, ansonsten ' ' für Leerzeichen % zeile ist nun ein Cell-Array (mit in eurem Fall 10 Einträgen)
%
ifisempty(zeile)% Wenn die eingelesene Zeile leer ist (also keine Strings enthält), soll die For-Schleife abgebrochen werden, da das Einlesen der Messdaten beendet ist.
flag = 1; % Hinweis für verkürzten Eintrag auf "1" also "wahr" setzen. break end
%
zeile = [zeile{7} ' ' zeile{8}]; % hier wird nun ein String definiert, der nur die Werte der 1., 3. und 7. Spalte enthält fprintf(fid1, '%s \n', zeile);
end % % % % angelegten File schliessen fclose(fid1);
% % Zeilen überspringen bis nächster Header -> Test Type if ~flag % Für flag = 0 (und damit ~flag "wahr") wird eine Zeile eingelesen. Wenn flag = 1 ist (und damit ~flag "falsch"), wird keine weitere Zeile eingelesen, weil die Leerzeile ja schon in der For-Schleife eingelesen wurde. fgetl(fid);
end end% while end% try % fclose(fid);
wir haben schon versucht, den code so umzuschreiben wie beim anderen (mit uigetdir), bis jetzt aber leider ohne erfolg...
multiselect wäre auch eine möglichkeit, mit:
Mir ist es bisher leider nicht gelungen, ein Multiselect in mehreren Ordnern umzusetzen, allerdings habe ich auch nicht viel Recherche betrieben, weil ich es für meine Zwecke nicht brauche (alle Dateien im selben Ordner).
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
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.