2017-11-14 1 views
0

in MATLAB zu verarbeiten, ist meine Funktion wie folgt aus:Wie eine Liste von Dateien in MATLAB

names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'} 
data_conversion(names)   %this function creat a folder in C001 to save results 

Ich habe 100 benannte Ordner als C001, C002, ..., C100. Jeder Ordner hat drei .csv Dateien wie folgt benannt: C001_Deo.csv, C001_Oxy.csv, C001_Tal.csv, C002_Deo.csv, C002_Oxy.csv, C002_Tal.csv ...

Hilft jemand kann mir eine Schleife zu schreiben, so kann ich data_conversion(names) zu einer Zeit laufen alle zu bekommen die Ergebnisse. Dann muss ich es nicht 100 mal laufen lassen. Ich habe es oft versucht, aber gescheitert. Vielen Dank!

+2

Zeigen Sie Ihre fehlgeschlagenen Versuche. Siehe [MCVE] –

Antwort

0

Sie können dies versuchen:

baseFolder = 'd:\'; 

for i=1:100 
    % get a string for 001 -> 100 
    strtmp = num2str(i); 
    str = cat(2,repmat('0',1,3-length(strtmp)),strtmp); 

    % reconstitute folder path 
    folderString = [baseFolder 'C' str filesep]; 

    % and the 3 file paths 
    f1 = [folderString 'C' str '_Deo.csv']; 
    f2 = [folderString 'C' str '_Oxy.csv']; 
    f3 = [folderString 'C' str '_Tal.csv']; 

    % run your data_conversion function 
    data_conversion({f1 f2 f3}) 


end 
+0

das ist was ich brauche. Vielen Dank! –

1

Ihre Dateinamen werden in einem cell array gespeichert. names(1) gibt die erste Zelle von names zurück. names{1} gibt den Inhalt der ersten Zelle, so dass Ihre Schleife wie diese

names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'} 

for loopi = 1:length(names) 
    data_conversion(names{loopi}) 
end 

Ich gehe davon aus schauen Sie alle Ihre Dateien in einem einzigen Ort sind, so dass Sie die Liste der Dateien automatisch erhalten möchten:

folders = dir('d:\C*'); 

for loopi = 1:length(folders) 
    % if order matters 
    folder = strcat(folders(loopi).folder,'\',folders(loopi).name); 
    f1 = dir([folder,'\*_Deo.csv']); 
    f2 = dir([folder,'\*_Oxy.csv']); 
    f3 = dir([folder,'\*_Tal.csv']); 
    data_conversion({f1(1).name, f2(1).name, f3(1).name}); 
end 

dir gibt eine struct array zurück, die mit Klammern statt Klammern indiziert wird.

+0

Wenn ich Ordner ausführen (Schleife) .Folder, habe ich einen Fehler: "Verweis auf nicht existente Feld 'Ordner". Aber irgendwie habe ich mein Problem gelöst. Vielen Dank! –

1

Wenn Ihre Funktion auf einmal das gesamte Zellenfeld braucht, dann ist hier eine Option:

Cnum  = strsplit(strtrim(sprintf('C%03d ', 1:100)))'; 
basepath = 'D:';  
complete = @(str) fullfile(basepath, Cnum, strcat(Cnum, '_', str, '.csv')); 
pths  = [complete('Deo') complete('Oxy') complete('Tal')]; 

Andernfalls mit Laure-Lösung gehen.

+0

es hilft mir. Vielen Dank! –

Verwandte Themen