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

Dateinamen mit Schleife ausgeben

 

yangqiao94
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2016, 16:26     Titel: Dateinamen mit Schleife ausgeben
  Antworten mit Zitat      
Code:

path = uigetdir(pwd);
path = [path filesep];
file_all = dir(path);
file = file_all([file_all.isdir] == 0);

P = cell(1,numel(file));

if ~isempty(file)
for x = 1:numel(file)
[pathstr, name, ext] = fileparts([path file(x).name]);


if strcmp(ext,'.xlsx')
P{x} = xlsread([path file(x).name]);

while any(isnan(P{x}(:,8)))
P{x}(isnan(P{x}(:,8)),8)=P{x}(find(isnan(P{x}(:,8)))-1,8);
end


j = 1:60:length(P{x}(:,3));
k = 0.5:1:length(j);


P4 = zeros(ceil(length(P{x}(:,4))/60),1);
for n= 1:floor(length(P{x}(:,4))/60);
P4(n,1)=sum(P{x}(j(n):j(n+1),4))/61;
end
P4(ceil(length(P{x}(:,4))/60),1) = sum(P{x}(max(j):length(P{x}(:,4)),4))/(length(P{x}(:,4))-max(j)+1);

P6 = zeros(ceil(length(P{x}(:,6))/60),1);
for n= 1:floor(length(P{x}(:,6))/60);
P6(n,1)=sum(P{x}(j(n):j(n+1),6))/61;
end
P6(ceil(length(P{x}(:,6))/60),1) = sum(P{x}(max(j):length(P{x}(:,6)),6))/(length(P{x}(:,6))-max(j)+1);

P9 = zeros(ceil(length(P{x}(:,9))/60),1);
for n= 1:floor(length(P{x}(:,9))/60);
P9(n,1)=sum(P{x}(j(n):j(n+1),9))/61;
end
P9(ceil(length(P{x}(:,9))/60),1) = sum(P{x}(max(j):length(P{x}(:,9)),9))/(length(P{x}(:,9))-max(j)+1);

P11 = zeros(ceil(length(P{x}(:,11))/60),1);
for n= 1:floor(length(P{x}(:,11))/60);
P11(n,1)=sum(P{x}(j(n):j(n+1),11))/61;
end
P11(ceil(length(P{x}(:,11))/60),1) = sum(P{x}(max(j):length(P{x}(:,11)),11))/(length(P{x}(:,11))-max(j)+1);



A = zeros(ceil(length(P{x}(:,3))/60),1);
MaxA= zeros(ceil(length(P{x}(:,3))/60),1);
MinA= zeros(ceil(length(P{x}(:,3))/60),1);

for n= 1:(floor(length(P{x}(:,3)))/60);
A(n,1)=sum(P{x}(j(n):j(n+1),3))/61;
[maxV]=max(P{x}(j(n):j(n+1),3));
MaxA(n)=[maxV];
[minV]=min(P{x}(j(n):j(n+1),3));
MinA(n)=[minV];
end

A(ceil(length(P{x}(:,3))/60),1) = sum(P{x}(max(j):length(P{x}(:,3)),3))/(length(P{x}(:,3))-max(j)+1);
[maxV]=max(P{x}(max(j):length(P{x}(:,3)),3));
MaxA(ceil(length(P{x}(:,3))/60),:)=[maxV];
[minV]=min(P{x}(max(j):length(P{x}(:,3)),3));
MinA(ceil(length(P{x}(:,3))/60),:)=[minV];



B = zeros(ceil(length(P{x}(:,5))/60),1);
MaxB= zeros(ceil(length(P{x}(:,3))/60),1);
MinB= zeros(ceil(length(P{x}(:,3))/60),1);

for n= 1:floor(length(P{x}(:,5))/60);
B(n,1)=sum(P{x}(j(n):j(n+1),5))/61;
[maxV]=max(P{x}(j(n):j(n+1),5));
MaxB(n)=[maxV];
[minV]=min(P{x}(j(n):j(n+1),5));
MinB(n)=[minV];
end

B(ceil(length(P{x}(:,5))/60),1) = sum(P{x}(max(j):length(P{x}(:,5)),5))/(length(P{x}(:,5))-max(j)+1);
[maxV]=max(P{x}(max(j):length(P{x}(:,5)),5));
MaxB(ceil(length(P{x}(:,5))/60),:)=[maxV];
[minV]=min(P{x}(max(j):length(P{x}(:,5)),5));
MinB(ceil(length(P{x}(:,5))/60),:)=[minV];



C = zeros(ceil(length(P{x}(:,8))/60),1);
MaxC= zeros(ceil(length(P{x}(:,8))/60),1);
MinC= zeros(ceil(length(P{x}(:,8))/60),1);

for n= 1:floor(length(P{x}(:,8))/60);
C(n,1)=sum(P{x}(j(n):j(n+1),8))/61;
[maxV]=max(P{x}(j(n):j(n+1),8));
MaxC(n)=[maxV];
[minV]=min(P{x}(j(n):j(n+1),8));
MinC(n)=[minV];
end

C(ceil(length(P{x}(:,8))/60),1) = sum(P{x}(max(j):length(P{x}(:,8)),8))/(length(P{x}(:,8))-max(j)+1);
[maxV]=max(P{x}(max(j):length(P{x}(:,8)),8));
MaxC(ceil(length(P{x}(:,8))/60),:)=[maxV];
[minV,minI]=min(P{x}(max(j):length(P{x}(:,8)),8));
MinC(ceil(length(P{x}(:,8))/60),:)=[minV];



D = zeros(ceil(length(P{x}(:,10))/60),1);
MaxD= zeros(ceil(length(P{x}(:,10))/60),1);
MinD= zeros(ceil(length(P{x}(:,10))/60),1);

for n= 1:floor(length(P{x}(:,10))/60);
D(n,1)=sum(P{x}(j(n):j(n+1),10))/61;
[maxV]=max(P{x}(j(n):j(n+1),10));
MaxD(n)=[maxV];
[minV]=min(P{x}(j(n):j(n+1),10));
MinD(n)=[minV];
end

D(ceil(length(P{x}(:,10))/60),1) = sum(P{x}(max(j):length(P{x}(:,10)),10))/(length(P{x}(:,10))-max(j)+1);
[maxV]=max(P{x}(max(j):length(P{x}(:,10)),10));
MaxD(ceil(length(P{x}(:,10))/60),:)=[maxV];
[minV]=min(P{x}(max(j):length(P{x}(:,10)),10));
MinD(ceil(length(P{x}(:,10))/60),:)=[minV];


Y = [transpose(k) A MaxA MinA P4 B MaxB MinB P6 C MaxC MinC P9 D MaxD MinD P11];
xlswrite('Data(x).xlsx',Y);
end
end
end


Guten Tag,
mein Code sieht zwar lang aus, ist aber nicht sehr viel, man liest damit nur Exceldateien rein und verändert diese, und gibt die veränderte wieder aus. Der Befehl für das Ausgeben ist ganz unten, xlswrite('Data(x).xlsx',Y);. Mein Problem liegt darin, dass mehrere Dateien geändert werden und ich will, dass für jede Datei ein neuer Name bekommt, Data(1) Data (2)... ,am besten so, dass es mit der Schleife for x = 1:numel(file) funktioniert. So wie der Code jetzt aussieht, werden die Ausgegebene Dateien immer in der selben Datei Data(x) überschrieben. Danke für jede Hilfe
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.02.2016, 16:35     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich kannst du den Dateinamen so konstruieren:
Code:
filename = ['Data(' num2str(x) ').xlsx'];
xlswrite(filename,Y);


Ein Problem ist allerdings, dass du ja geschachtelte Schleifen hast und die Datei in den inneren Iterationen ständig überschrieben wird.

Ja, dein Code ist lang. Bitte in Zukunft versuchen, den Code auf den wirklich relevanten Teil zu kürzen. Das macht die Hilfestellung deutlich leichter.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
yangqiao94
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 11.02.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2016, 17:13     Titel:
  Antworten mit Zitat      
vielen Dank für deine schnelle Antwort, es klappt.
Und auch Danke für deinen Tipp, werde in Zukunft versuchen meinen Code auf das nötige zu verringern.
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: 11.02.2016, 17:25     Titel: Re: Dateinamen mit Schleife ausgeben
  Antworten mit Zitat      
Hallo yangqiao94,

Ein paar Kommentare zum Code:
path ist eine sehr wichtige Matlab-Funktion. Sie mit einer Variable zu überschreiben kann zu extrem seltsamen Dingen führen, während des Debuggens z.B.

Automatisch eingerückter Code sieht viel übersichtlicher aus.

Die Ausdrücke "length(P{x}(:,3))" sind umständlich, da hierfür zunächst ein Vektor erstellt wird, den Du gar nicht benötigst. Einfacher und effizienter:
Code:

Es verwirrt mich, dass Du die Größe der ersten Dimension auf unterschiedliche Weisen bestimmst:
Code:
length(P{x}(:,4))
length(P{x}(:,6))
length(P{x}(:,9))
... usw

Dies sollte doch eigentlich immer den gleichen Wert liefern. Und dann ließe sich der Code massiv entschlacken, wenn Du einmal diese Länge bestimmst:
Code:
L = size(P{x}, 1);

und dies überall einsetzt.
Die Referenzierung von "P{x}" benötigt übrigens ebenfalls Zeit. Auch hierfür einfach eine temporäre Vriable zu verwenden, räumt den Code auf:
Code:
for x = 1:numel(file)
  C = xlsread([path file(x).name]);
  P{x} = C;
  % Und ab hier immer C verwenden...
 


Außer dem bereits gezeigten Ansatz mit
Code:
gibt es noch dies:
Code:
filename = sprintf('Data(%03d).xlsx', x);

%03d hat den Vorteil, dass die Dateien beim alphabetisch sortierten einlesen gleich auch numerisch korrekt sortiert sind.

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