ausführen. Die Ergebnisse sollen anschließend in einer neuen Variablen abgelegt werden. Die möchte ich dann schließlich mit anderen plotten.
Wie veranlasse ich Matlab in dem Cell Array ans auf die Pfade zuzugreifen die Unterordner zu öffnen die Datei "ausgewertet.mat" einzulesen, den Befehl auszuführen und den Ordner wieder zu schließen.
Ich hatte irgendwas mit fopen und fclose im Sinn, allerdings keine Ahnung wie ich das Umsetzen soll.
Ich verzweifel so langsam. Bitte hilft mir !! Danke
Am besten du sagst nochmal genau, was in deinem mat-file drin steht. Wenn dort die Variable "mittel_leistung_1of1" drin steht, dann müsste der Code so lauten (wie hast du denn das Cell-Array mit den Pfaden erstellt? Das heißt bei mir zumindest "PfadArray"):
Code:
anzahl = numel(pfadArray);
MittelWerte = zeros(1,anzahl);
for k=1:anzahl
zwischenspeicher = load(fullfile(pfadArray{k},'ausgewertet.mat'));
MittelWerte(k) = mean(zwischenspeicher.mittel_leistung_1of1{1});
end
Ich hoffe jetzt richtig verstanden zu haben, was du machst, bzw. machen möchtest. Sonst müsstest du nochmal von vorne erklären, was machst du wie und was möchstest danach wie machen...
Der Code, der mir aus meinen Unterordner ein Cell macht:
Code:
function auszuwertende_Ordner = selectfolders(start_path)
% Die via GUI (uigetdir) ausgewählten Ordner werden im Cell Array 'auszuwertende_Ordner' % zurückgegeben. Es können entweder einzelne Ordner nacheinander ausgewählt werden oder % ein einziger Ornder auf einer höheren Hirarchiestufe, in letzterem Fall werden dessen % Unterordner zurückgegeben.
%% Wurde Start Path als Input übergeben? Falls nein, wähle M:\ ifnargin == 0
start_path = 'N:\';
end
%% Ordner Auswahl: ausgwählte Ordner werden in "auszuwertende_Ordner" geschrieben % Abfrage: einen Überordner oder einzelne frei wählbare Ordner auswählen?
button = questdlg('Sollen Unterordner von "Über-Ordnern" oder einzelne Ordner gewählt werden?',...
'Ordnerauswahl','Übergeordnete wählen','Einzelauswahl','abbrechen','Übergeordnete wählen');
auszuwertende_Ordner = {}; %Variable erzeugen
switch button
case 'Übergeordnete wählen'
Auswahl = uigetdir(start_path,'Bitte einen übergeordneten Ordner wählen (Unterordner werden verarbeitet): zum Ordner navigieren, markieren, OK klicken.');
i = 1;
while Auswahl ~= 0
Ueberordner{i} = Auswahl; disp(Ueberordner{i});
Auswahl = uigetdir(Ueberordner{i},'Bitte einen übergeordneten Ordner wählen (Unterordner werden verarbeitet): zum Ordner navigieren, markieren, OK klicken. Wenn fertig: abbrechen klicken');
i = i+1;
end clear i Auswahl;
% jetzt vorhanden: eine Reihe mit x Ueberordnern
ind = 0;
for i = 1:size(Ueberordner,2)
Unterordner{i} = dir([Ueberordner{i} '\*.']); % jetzt vorhanden: x Spalten Unterordner unterschiedlicher Länge
for j = 3:numel(Unterordner{i})% überspringe '.' und '..' (beginne mit 3. Element); numel = Number of Elements
pathname = [Ueberordner{i}filesep Unterordner{i}(j).name]; % def. pathname als Directory+Eintrag(j).Name
auszuwertende_Ordner{ind + j-2} = pathname; % schreibe diesen String in auszuwertende_Ordner an die Stelle j-2 % (da Laufvariable j mit 3 beginnt) end
ind = ind + j-2; % ind erhöht sich immer um die Anzahl der "durchgelaufenen" Unterordner end
case 'Einzelauswahl'
Auswahl = uigetdir(start_path,'Bitte Ordner wählen: zum Ordner navigieren, Ordner markieren, OK klicken. Wenn alle Ordner gewählt, "abbrechen" klicken!');
i = 1;
while Auswahl ~= 0
auszuwertende_Ordner{i} = Auswahl
Auswahl = uigetdir((auszuwertende_Ordner{i}),'Bitte Ordner wählen: zum Ordner navigieren, Ordner markieren, OK klicken. Wenn fertig: abbrechen klicken.');
i = i+1;
end clear i;
auszuwertende_Ordner = auszuwertende_Ordner'; % transformiere Cell Array
mittel_leistung hat 3484x6 wird doch aber zu 1x6 gemacht durch die Mittelwertbildung mean.
pfadArray sind 242x1.
Muss ich den Vektor 242x1 transponieren und dann den Vektor 1x6 auf 1x242 aufblasen?
Wenn ja, wie funktioniert denn das?
Anmerkung: Ich bin sehr beruhigt, dass einem hier sehr schnell geholfen wird. DANKE !!!
Hättest du gleich gesagt, was "mittel_leistung" für Dimensionen hat, dann wär die Lösung gleich diese gewesen
Code:
anzahl = numel(pfadArray);
MittelWerte = zeros(anzahl,6); % da dein Mittelwert je ein Vektor 1x6 ist for k=1:anzahl
zwischenspeicher = load(fullfile(pfadArray{k},'ausgewertet.mat'));
MittelWerte(k,:) = mean(zwischenspeicher.mittel_leistung_1of1{1});
end
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.