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 mit bestimmten Dateinamen verschieben

 

fireresq112
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 24.08.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 08.04.2010, 14:23     Titel: Dateien mit bestimmten Dateinamen verschieben
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Messreihe mit rund 1000 Dateien. Diese sind in einem Ordner und haben fortlaufende Nummern (entsprechen den Sekunden seit Beginn der Messung) als Dateiname. Nun möchte ich genau 9 Dateien haben.

Meine Idee ist, zunächst mein Soll-String mit den einzelnen Namen zu vergleichen und mir dann in der Variable "wert" die Position zu merken. Dann nehme ich die 9 Positionen und verschiebe diese Dateien in einen anderen Ordner.

Hierzu mal mein Skript:

Code:
%% Messdaten sortieren
clc
clear

cd('Scc11 LOGMAG')
A = dir;
a = size(dir);
g = a(1,1);

minus40 = '32';
minus20 = '44';
null = '55';
plus20 = '68';
plus40 = '79';
plus60 = '91';
plus80 = '103';
plus100 = '115';
plus120 = '127';


count1 = 0;
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
count6 = 0;
count7 = 0;
count8 = 0;
count9 = 0;

var_minus40 = [minus40,'0',count1];
var_minus20 = [minus20,'0',count2];
var_null = [null,'0',count3];
var_plus20 = [plus20,'0',count4];
var_plus40 = [plus40,'0',count5];    
var_plus60 = [plus60,'0',count6];
var_plus80 = [plus80,'0',count7];
var_plus100 = [plus100,'0',count8];
var_plus120 = [plus120,'0',count9];

for i =1:g
     B=A(i).name;
     size(B');
%%  
     
    if(strfind(A(i).name,var_minus40))
        wert(1) = i
        %count1 = 0;
    else
        count1 = count1+1;
        if(count1 < 10)
        var_minus40 = [minus40,'0',int2str(count1)];
        else
        var_minus40 = [minus40,int2str(count1)];
        end
    end
%%    
  %  count2 = 0;
   
    if(strfind(A(i).name,var_minus20)==0)
        wert(2) = i;
       % count2 = 0;
    else
        count2 = count2+1;
        if(count2 < 10)
        var_minus20 = [minus20,'0',int2str(count2)];
        else
        var_minus20 = [minus20,int2str(count2)];
        end
    end
   
%%
  %  count3 = 0;

    if(strfind(A(i).name,var_null))
        wert(3) = i;
        %count3 = 0;
    else
        count3 = count3+1;
        if(count3 < 10)
        var_null = [null,'0',int2str(count3)];
        else
        var_null = [null,int2str(count3)];
        end
    end
%%    

%%
   % count4 = 0;
    var_plus20 = [plus20,'0',count4];
    if(strfind(A(i).name,var_plus20))
        wert(4) = i;
        %count = 0;
    else
        count4 = count4+1;
        if(count4 < 10)
        var_plus20 = [plus20,'0',int2str(count4)];
        else
        var_plus20 = [plus20,int2str(count4)];
        end
    end
%%

%%
    var_plus40 = [plus40,'0',count5];
    if(strfind(A(i).name,var_plus40))
        wert(5) = i;
        %count = 0;
    else
        count5 = count5+1;
        if(count5 < 10)
        var_plus40 = [plus40,'0',int2str(count5)];
        else
        var_plus40 = [plus40,int2str(count5)];
        end
    end
%%

%%
    var_plus60 = [plus60,'0',count6];
    if(strfind(A(i).name,var_plus60))
        wert(6) = i;
        %count6 = 0;
    else
        count6 = count6+1;
        if(count6 < 10)
        var_plus60 = [plus60,'0',int2str(count6)];
        else
        var_plus60 = [plus60,int2str(count6)];
        end
    end
%%


%%
    var_plus80 = [plus80,'0',count7];
    if(strfind(A(i).name,var_plus80))
        wert(7) = i;
        %count7 = 0;
    else
        count7 = count7+1;
        if(count7 < 10)
        var_plus80 = [plus80,'0',int2str(count7)];
        else
        var_plus80 = [plus80,int2str(count7)];
        end
    end
%%

%%
    var_plus100 = [plus100,'0',count8];
    if(strfind(A(i).name,var_plus100))
        wert(8) = i;
        %count = 0;
    else
        count8 = count8+1;
        if(count8 < 10)
        var_plus100 = [plus100,'0',int2str(count8)];
        else
        var_plus100 = [plus100,int2str(count8)];
        end
    end
%%

%%
    var_plus120 = [plus120,'0',count9];
    if(strfind(A(i).name,var_plus120))
        wert(9) = i;
        %count = 0;
    else
        count9 = count9+1;
        if(count9 < 10)
        var_plus120 = [plus120,'0',int2str(count9)];
        else
        var_plus120 = [plus120,int2str(count9)];
        end
    end
%%

end


Leider spring MATLAB hierbei nie in die if-Schleifen, sondern gleich immer in den else-Teil. Die Variablen "count" zählen bis 107 (es sind 107 Dateien im Ordner) hoch und die Variable "wert" wird schon gar nicht initialisiert Sad

Weiß jemand Rat?

Danke! Smile
Private Nachricht senden Benutzer-Profile anzeigen


derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.04.2010, 14:50     Titel:
  Antworten mit Zitat      
Hallo,

ich würde ersteinmal generell dein Programmdesign anprangern. Du machst ja im Grunde genommen immer wieder etwas ähnliches, dass muss auch kompakter gehen. Wahrscheinlich musst du dafür zunächst ein cell array mit den Dateinamen Strings erstellen. Um dass zu ändern müsstest du mir aber bitte genau erklären was deine Eingaben und was deine Ausgaben sein sollen.

Von der generellen Idee sollte dein Code natürlich trotzdem funktionieren. Kontrolliere noch einmal deine Anfangsvariablen:

plus... minus... sind strings, count... sind aber Zahlen. Und var... setzt du dann aus strings und zahlen zusammen. Du solltest also bei count... vor dem Zusammensetzen ein num2str() benutzen.

Noch ein paar generelle Tipps:

i und j sollten nicht als Laufvariable benutzt werden
null auch nicht, ist eine Funktion
size(dir,1);

Hoffe das hilft dir meld dich obs jetzt klappt und zum kompakt machen.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
fireresq112
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 24.08.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 08.04.2010, 15:03     Titel:
  Antworten mit Zitat      
Hallo,

danke für deine Tipps und deine Kritik.

Ich habe nun das num2str mit eingebaut. Es hat sich nichts verändert.

Mit cellArrays habe ich noch nie gearbeitet Sad

Die Sache ist die:
Ich möchte beispielsweise für die Messung plus20 eine Datei herausfiltern die in ihrem Namen eine Zahl von 6800 bis 6899 hat. count4 erzeugt mir hierzu die laufende Zahl in var_plus20.

Mein aktueller Code:


Code:
%% Messdaten sortieren
clc
clear

cd('Scc11 LOGMAG')
A = dir;
a = size(dir);
g = a(1,1);

minus40 = '32';
minus20 = '44';
null0 = '55';
plus20 = '68';
plus40 = '79';
plus60 = '91';
plus80 = '103';
plus100 = '115';
plus120 = '127';


count1 = 0;
count2 = 0;
count3 = 0;
count4 = 0;
count5 = 0;
count6 = 0;
count7 = 0;
count8 = 0;
count9 = 0;

var_minus40 = [minus40,'0',num2str(count1)];
var_minus20 = [minus20,'0',num2str(count2)];
var_null0 = [null0,'0',num2str(count3)];
var_plus20 = [plus20,'0',num2str(count4)];
var_plus40 = [plus40,'0',num2str(count5)];    
var_plus60 = [plus60,'0',num2str(count6)];
var_plus80 = [plus80,'0',num2str(count7)];
var_plus100 = [plus100,'0',num2str(count8)];
var_plus120 = [plus120,'0',num2str(count9)];

for i =1:g
     B=A(i).name;
     size(B');

     
    if(strfind(A(i).name,var_minus40))
        wert(1) = i
        %count1 = 0;
    else
        count1 = count1+1;
        if(count1 < 10)
        var_minus40 = [minus40,'0',num2str(count1)];
        else
        var_minus40 = [minus40,num2str(count1)];
        end
    end


   
    if(strfind(A(i).name,var_minus20)==0)
        wert(2) = i;
       % count2 = 0;
    else
        count2 = count2+1;
        if(count2 < 10)
        var_minus20 = [minus20,'0',num2str(count2)];
        else
        var_minus20 = [minus20,num2str(count2)];
        end
    end



    if(strfind(A(i).name,var_null0))
        wert(3) = i;
        %count3 = 0;
    else
        count3 = count3+1;
        if(count3 < 10)
        var_null0 = [null0,'0',num2str(count3)];
        else
        var_null0 = [null0,num2str(count3)];
        end
    end


   % count4 = 0;
    var_plus20 = [plus20,'0',count4];
    if(strfind(A(i).name,var_plus20))
        wert(4) = i;
        %count = 0;
    else
        count4 = count4+1;
        if(count4 < 10)
        var_plus20 = [plus20,'0',num2str(count4)];
        else
        var_plus20 = [plus20,num2str(count4)];
        end
    end


    var_plus40 = [plus40,'0',count5];
    if(strfind(A(i).name,var_plus40))
        wert(5) = i;
        %count = 0;
    else
        count5 = count5+1;
        if(count5 < 10)
        var_plus40 = [plus40,'0',num2str(count5)];
        else
        var_plus40 = [plus40,num2str(count5)];
        end
    end


    var_plus60 = [plus60,'0',count6];
    if(strfind(A(i).name,var_plus60))
        wert(6) = i;
        %count6 = 0;
    else
        count6 = count6+1;
        if(count6 < 10)
        var_plus60 = [plus60,'0',num2str(count6)];
        else
        var_plus60 = [plus60,num2str(count6)];
        end
    end


    var_plus80 = [plus80,'0',count7];
    if(strfind(A(i).name,var_plus80))
        wert(7) = i;
        %count7 = 0;
    else
        count7 = count7+1;
        if(count7 < 10)
        var_plus80 = [plus80,'0',num2str(count7)];
        else
        var_plus80 = [plus80,num2str(count7)];
        end
    end


    var_plus100 = [plus100,'0',count8];
    if(strfind(A(i).name,var_plus100))
        wert(8) = i;
        %count = 0;
    else
        count8 = count8+1;
        if(count8 < 10)
        var_plus100 = [plus100,'0',num2str(count8)];
        else
        var_plus100 = [plus100,num2str(count8)];
        end
    end


    var_plus120 = [plus120,'0',count9];
    if(strfind(A(i).name,var_plus120))
        wert(9) = i;
        %count = 0;
    else
        count9 = count9+1;
        if(count9 < 10)
        var_plus120 = [plus120,'0',num2str(count9)];
        else
        var_plus120 = [plus120,num2str(count9)];
        end
    end

end


Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 08.04.2010, 15:33     Titel:
  Antworten mit Zitat      
beschreibe lieber nach welchen Kriterien die Dateien ausgewählt werden sollen. Bin mir sicher, dass man das ganze in paar Zeilen zusammenpresst.


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
derOli
Forum-Meister

Forum-Meister


Beiträge: 579
Anmeldedatum: 19.03.08
Wohnort: Leipzig
Version: 2010a
     Beitrag Verfasst am: 08.04.2010, 15:36     Titel:
  Antworten mit Zitat      
Hi,

ahh ok, das was du beschreibst machst du aber nicht in deinem Code, deswegen geht es nicht. Du bräuchtest im Grunde genommen 2 For Schleifen: eine geht durch alle Dateinamen, die andere durch alle möglichen Endungen. Zurzeit machst du beides gleichzeitig in einer For Schleife.

Besser ist es aber du ersparst dir die For Schleifen mit regexp:

Code:

regexp('5600','55\d\d')
 


So kannst du deine Dateiendungen kontrollieren ob Sie noch von 01 bis 99 gehen. Allerdings musst du dich schon noch etwas mit regexp beschäftigen. Du willst es ja auf einen Pfad anwenden.

Viele Grüße,

der Oli
Private Nachricht senden Benutzer-Profile anzeigen
 
fireresq112
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 24.08.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 08.04.2010, 15:36     Titel:
  Antworten mit Zitat      
Kriterien wären:

- im Dateinamen muss zum Beispiel irgendeine Zahl zwischen 6300 bis 6399 vorkommen.
Private Nachricht senden Benutzer-Profile anzeigen
 
outsider
Forum-Meister

Forum-Meister


Beiträge: 806
Anmeldedatum: 03.09.07
Wohnort: München
Version: R2012b
     Beitrag Verfasst am: 08.04.2010, 15:59     Titel:
  Antworten mit Zitat      
Code:
file = dir('C:************')
filenames = {file(~[file.isdir]).name};

tmp = zeros(1,length(filenames));
for i=6300:6399
   tmp = or(tmp,~cellfun(@isempty ,strfind(filenames,num2str(i))));
end
filenames = filenames(tmp)


Variable "filenames" beinhaltet nun die Namen von den betrofennen Dateien.
Jetzt musst Du die nur noch per COPYFILE (oder MOVEFILE) copieren (oder bewegen)


MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
fireresq112
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 24.08.09
Wohnort: ---
Version: R2009a
     Beitrag Verfasst am: 08.04.2010, 16:14     Titel:
  Antworten mit Zitat      
Super danke, das klappt! Smile
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.