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

Kopieren, Einfügen, Name ändern

 

Platin
Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 13:23     Titel: Kopieren, Einfügen, Name ändern
  Antworten mit Zitat      
Hey an Alle,

ich habe folgendes Problem:
Ich habe viele verschiedene Ordner in denen verschiedene Dateien liegen. Die Struktur sieht so aus:
Hauptordner:
Ordner 1:
Datei1.txt
Datei2.txt
Datei3.txt
Ordner 2:
Datei1.txt
Datei2.txt
Datei3.txt
...
Nun will ich aus jedem Ordner diese Dateien kopieren und lediglich in den Hauptordner packen. Damit dann alles so ausschaut:
Hauptordner:
Datei1_1
Datei1_2
Datei2_1
Datei2_2
Datei3_1
Datei3_2
usw...
Das ist nämlich ein Problem für mich. Denn wie man sieht heißt Datei1.txt in jedem Ordner gleich, hat aber in jedem Ordner trotzdem einen anderen Inhalt. Ich möchte sie deswegen nicht überschreiben oder so, sondern jede Datei aus jedem Ordner seperat rauskopieren, umbenennen(z.Bsp im Ordner 1 immer ne "_1" ran, siehe oben) und in den Hauptordner einfügen.

Wisst ihr was ich meine? Ist das machbar ?

Grüße

Platin
Private Nachricht senden Benutzer-Profile anzeigen


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 25.08.2011, 13:43     Titel:
  Antworten mit Zitat      
Es ist alles machbar. 2x den Befehl dir() benutzen in 2 verschachtelten Schleifen und dann die Dateien mit renamefile() gemäß Schleifenvariable 1 und 2 umbennen.
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: 25.08.2011, 14:32     Titel: Re: Kopieren, Einfügen, Name ändern
  Antworten mit Zitat      
Hallo Platin,

Ja, das ist machbar. Du brauchst zwei FOR Schleifen, das erstellen des Neuen Namens geht mit SPRINTF, das Bewegen der datei geht per MOVEFILE.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2011, 15:12     Titel:
  Antworten mit Zitat      
Hey,

also ich dachte ggf. das man schaut wieiviel ordner exisitieren. Dann hat man schonmal den endwert der schleife.

dann würde ich das in ner For Schleife so in der art machen:

Code:

for j=1:anzahl
 movefile(datei1*(j), zielort)
 movefile(datei2*(j), ziellort)
 sprintf(datei1*(j), neuer name1)
 sprintf(datei2*(j), neuer name2)
end
 


ich komme nicht so recht zu rande ?
wozu brauche ich die 2. schleife denn ?
renamefile gibts doch garnicht als befehl, oder ?
und meine Dateinamen sind zeimlich lang. Kann man auch irgendwie wildcards benutzen ? Weil charakteristisch für jede datei sind die ersten 5 buchstaben. ? Ich habe das bei mir versucht mit sternchen deutlich zu machen.
ich hoffe ihr könnt mir helfen.

grüße
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: 25.08.2011, 21:17     Titel:
  Antworten mit Zitat      
Hallo Platin,

Zitat:
also ich dachte ggf. das man schaut wieiviel ordner exisitieren.
Das geht mit dem DIR Befehl.

Zitat:
Code:
movefile(datei1*(j), zielort)
 movefile(datei2*(j), ziellort)
 sprintf(datei1*(j), neuer name1)
 sprintf(datei2*(j), neuer name2)

Das ist weit entfernt von validem MATLAB code.

Zitat:
wozu brauche ich die 2. schleife denn ?

Erste Schleife über die Ordner, zweite Schleife über die enthaltenen Files.

Zitat:
renamefile gibts doch garnicht als befehl, oder ?

Es gibt zwar ein sehr schnelles FileRename in der FEX als C-mex, aber ich vermute Du sprichst nicht über mehrere tausend Files. Dann ist MOVEFILE geeignet um Files zu bewegen.

Zitat:
und meine Dateinamen sind zeimlich lang. Kann man auch irgendwie wildcards benutzen ?

Nein. Du wirst zwar Wildcards im DIR-Befehl benötigen, um die Listen der Files zu erhalten. Um alle Files eines Ordners in einen anderen zu bewegen sind Wildcards auch geeignet. Zum Umbenennen der Files musst Du aber die langen Dateinamen explizit verwenden. Ist das eine Schwierigkeit?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 26.08.2011, 08:13     Titel:
  Antworten mit Zitat      
Pardon: Ich meinte natürlich movefile(). Mein Fehler Embarassed
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 11:11     Titel:
  Antworten mit Zitat      
Hey Leute,

ich habe mal ein wenig rumprobiert, aber ich komme nicht so recht vorran.
Hier mal mein Ergebniss:

Code:

list = dir(pwd());
list = list(~ismember({list.name}, {'.' '..'}));
unterordner={list.isdir} ;
unterordner=cell2mat(unterordner);
unterordner=unterordner(unterordner~=0);
Anzahl_Unterordner=length(unterordner) ;
ordner=pwd;
for j=1:Anzahl_Unterordner
     
       
       cd('Name_Unterordner_(j)') ;
               movefile('AD*.txt','AD_(j).txt');
               movefile('FT*.txt','FT_(j)');
               movefile('AD(j)','../ordner');
       cd ..
   
end

 


Ich habe erst die Anzahl der Unterordner bestimmt und dann wollte ich mittels der Schleife in jeden Ordner gehen und dort die Files erst umbenennen und anschließend in den übergeordneten Ordner kopieren.
Das Problem ist jetzt aber das in movefiles ja alles in Anführungszeichen geschrieben werden muss und deswegen das mit der Laufvariable nicht funktioniert. Das selbe Problem mit cd('').
Habt ihr ne Idee wie ich das machen könnte ?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 26.08.2011, 11:19     Titel:
  Antworten mit Zitat      
Hallo Platin,
Strings fügst du wie folgt zusammen
Code:
['String' num2str(Laufvariable)]


Gruß Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 12:12     Titel:
  Antworten mit Zitat      
Hey Super, jetzt habe ich es hinbekommen.
hier mal mein Code:
Code:

list = dir(pwd());
list = list(~ismember({list.name}, {'.' '..'}));
unterordner={list.isdir} ;
unterordner=cell2mat(unterordner);
unterordner=unterordner(unterordner~=0);
Anzahl_Unterordner=length(unterordner) ;
ordner=pwd;
for j=1:Anzahl_Unterordner
     
       
          cd(fullfile(ordner, ['Unterordner_' num2str(j)])) ;
               movefile('AD*.txt',['AD_' num2str(j) '.txt']);
               copyfile(['AD_' num2str(j) '.txt'],ordner);
       
   
endfor
 


Kann mir von euch noch jmd verraten was ich tuen kann, damit die Schleife vortfährt auch wenn mal ein Ordner oder so fehlt. weil sonst immer die Fehlermeldung auftaucht z,Bsp: "Name_Unterordner_11" exisitiert nicht, wenn Unterordner 11 nicht da ist. Weil das Problem ist, selbst wenn ich mal 100 ordner habe, dann bin ich teilweise gezwugen Ordner 23 oder 56 oder so im Vorhinein zu löschen. Dann stößt er in der schleife bei diesen ordner natürlich darauf das die garnicht exisitieren.
Habt ihr ne Idee ?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.08.2011, 12:52     Titel:
  Antworten mit Zitat      
Hallo

so könnte man das auch lösen:
Code:

start_path      = pwd();
dirlist         = dir(start_path);
dirlist         = {dirlist([dirlist.isdir]).name};
dirlist         = setdiff(dirlist,{'.','..'})   ;
num_dirs        = length(dirlist) ;

for dn=1:num_dirs
   
   filelist = dir(fullfile(start_path,dirlist{dn},'*.txt'));
   filelist = {filelist(~[filelist.isdir]).name};
   num_files= length(filelist);
   for fn=1:num_files
      filename = regexprep(filelist{fn},'(\.(.)+)',sprintf('_%d$0',dn));
      movefile(fullfile(start_path,dirlist{dn},filelist{fn}),fullfile(start_path,filename));
   end
   rmdir(fullfile(start_path,dirlist{dn}));
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.08.2011, 12:57     Titel:
  Antworten mit Zitat      
Zu der frage mit nicht existierenden Ordnern.
einfach EXIST oder ISDIR verwenden

Code:

if exist(fullfile(ordner, ['Unterordner_' num2str(j)]), 'dir')
  ...
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 13:14     Titel:
  Antworten mit Zitat      
danke dir !!

grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 13:27     Titel:
  Antworten mit Zitat      
Hey bin doch noch nicht ganz damit zufrieden.
ich habe jetzt 3 ordner. Ordner 1,2 und 4. Er wertet mir aber nur die ersten 2 aus. Es kommt zwar keine Fehlernachricht, aber er sollte den vierten auch auswerten.
Weiß du ne Idee ?
Code:

list = dir(pwd());
list = list(~ismember({list.name}, {'.' '..'}));
unterordner={list.isdir} ;
unterordner=cell2mat(unterordner);
unterordner=unterordner(unterordner~=0);
Anzahl_Unterordner=length(unterordner) ;
ordner=pwd;
for j=1:Anzahl_Unterordner
     
       if exist(fullfile(ordner, ['SUB_' num2str(j)]))
       cd(fullfile(ordner, ['Name_Unterordner_' num2str(j)])) ;
               movefile('AB*.txt',['AB_' num2str(j) '.txt']);
               copyfile(['AB_' num2str(j) '.txt'],ordner);
               movefile('CD_*.txt',['CD_' num2str(j) '.txt']);
               copyfile(['CD' num2str(j) '.txt'],ordner);
       movefile('ES*.txt',['ES_' num2str(j) '.txt']);
               copyfile(['ES_' num2str(j) '.txt'],ordner);
    endif
endfor
cd(ordner);
 


grüße
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: 26.08.2011, 14:02     Titel:
  Antworten mit Zitat      
Hallo Platin,

Es kommt keine Fehlermeldung? Es gibt in MATLAB keine "endif" und "endfor" Befehle. Beide heißen nur "end".

Ein paar Vereinfachungen:
Code:

list = dir(cd);
list = list(~ismember({list.name}, {'.' '..'}));
unterordner=[list.isdir] ;
unterordner=unterordner(unterordner~=0);
Anzahl_Unterordner=length(unterordner) ;
ordner = cd;
for j=1:Anzahl_Unterordner
   if exist(fullfile(ordner, ['SUB_' num2str(j)]), 'file')  % EXIST *Immer* mit
Specifier!


Dies verstehe ich gar nicht:
Code:
              movefile('AB*.txt',['AB_' num2str(j) '.txt']);
               copyfile(['AB_' num2str(j) '.txt'],ordner);
               movefile('CD_*.txt',['CD_' num2str(j) '.txt']);
               copyfile(['CD' num2str(j) '.txt'],ordner);
       movefile('ES*.txt',['ES_' num2str(j) '.txt']);
               copyfile(['ES_' num2str(j) '.txt'],ordner);
 

Bist Du sicher dass 'AB*.txt' nur auf ein einziges File passt? Ansonsten crashed das Program nämlich. Und wieso bennenst Du das File erst um und kopierst es dann? Ich dachte Du wolltest die Files einfach Verschieben und umbenennen.

Wenn das Programm nicht das macht, was Du erwartest, kannst Du ein paar Breakpoints im Editor sestzen und das Programm zeilenweise abarbeiten lassen. Der Debugger ist immer ein wertvolles Werkzeug beim Programmieren.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Platin
Themenstarter

Forum-Century

Forum-Century


Beiträge: 174
Anmeldedatum: 07.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2011, 18:22     Titel:
  Antworten mit Zitat      
Hey,

ja also es kommt keine Fehlermedlung wie "Ordner exisitert nicht" oder so, weil er ihn dann einfach auslässt, aber er nimmt die folgenden unterordner dann auch nicht.
Also wenn ich ordner 1,2 und 4 habe dann macht er alles für ordner 1 und 2, aber dann macht er das nicht mehr für ordner 4. keine ahnung warum.
Das ist mein problem.
Ja genau, richtig! Ich will den File kopieren und dann umbenennen, weil die files in jedem unterordner immer gleich heißen. also die AB-Files heißen alle Ab17_jkl.....txt. Das gleiche gilt für die CD.....txt files. Und wenn ich sie in den hauptordner kopiere ohne sie umzubennen dann streikt matlab denke ich, oder überschreibt sie einfach. Ja und es gibt wirklich immer nur ein File das so beginnt.
Also ich benenne erst um und kopiere dann. Gibt es eine möglichkeit erst zu kopieren und dann umzubenennen ohne das ich schwierigkeiten mit dem übschreiben bekomme ?

grüße
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 - 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.