2016-04-02 2 views
0

Ich möchte 3 Listen mit den Namen der Dateien erstellen, die mit PNG, JPG und BMP beginnen. Alle Dateien sind Bilder in der Verzeichnisstruktur:/year_month/year_month_day/wie Sie hier sehen können:erstellen Sie eine Tabelle mit spezifischen Namen von Dateien aus der Zeichenfolge in MATLAB ausgewählt

./20160203/20160203_png01_test1.png.tmp

./20160203/20160203_jpg01_test2.jpg.tmp

./20160203/20160203_bmp01_test3.bmp.tmp

./20160204/20160204_png01_test1.png.tmp

./20160204/20160204_jpg01_test2.jpg.tmp

./20160204/20160204_bmp01_test3.bmp.tmp

./20160205/20160205_png01_test1.png.tmp

./20160205/20160205_jpg01_test2.jpg.tmp

./20160205/20160205_bmp01_test3.bmp.tmp

jede Liste sollte enthalten soll, die Bilder Namen für jede Erweiterung (jpg, bmp und png) zum Beispiel list1 hat:

./20160203/20160203_png01_test1.png.tmp

./20160204/20160204_png01_test1.png.tmp

./20160205/20160205_png01_test1.png.tmp

list2 sollte:

./20160203/20160203_jpg01_test2.jpg.tmp

./20160204/20160204_jpg01_test2.jpg.tmp

./20160205/20160205_jpg01_test2.jpg.tmp

und list3 das gleiche, aber mit bmp ...

mein Code sieht wie folgt aus:

workdir = '/home/user/201602/'; 
cd(workdir); 

command =   ['find -name *test*.tmp']; 
[status,cmdout] = system(command); 
c =    strsplit(strtrim(cmdout)); 
n_files =   length(c); 
format_id =  cell(n_files,1); 

for ifile =1:n_files      
     d = textscan(c{ifile},'%s%s', 'Delimiter','_'); 
     s1 = d{2}{:}; 
     format_id{ifile} = s1; 
end 

format_id = unique(format_id); 
nformat = length(format_id); 

for iformat = 1:nformat 

    templist = [format_id{iformat} '.dat'];   
    fid = fopen(templist,'w'); 

    for ifiles =1:n_files 
     fprintf(fid, '%6s\n', c{iformat}); 
    end 

    fid = fclose(fid); 
end 

bekomme ich die Listen: png01.dat, jpg01.dat und bmp01.dat was in Ordnung ist, aber In jeder Liste habe ich alle Namen der Bilder und nicht nur die Namen mit der jeweiligen Erweiterung. Zuerst möchte ich einen "Index" machen, um nur die Dateien mit der jeweiligen Erweiterung (bmp jpg und png) auszuwählen und anschließend an eine Liste zu senden. Wie könnte ich das tun?

Ich hoffe, das Problem ist klar. Vielen Dank im Voraus für Ihre Hilfe.

+1

Bitte beachten Sie die zusätzlichen neuen Linien im gesamten entfernen Ihre Frage, damit es einfacher zu lesen aussieht. Als weiteren Vorschlag: Sehen Sie sich den ['dir'] (http://ch.mathworks.com/help/matlab/ref/dir.html) -Befehl an, um' system' zu ersetzen. – Matt

Antwort

0

Speichern Sie die Erweiterungen wie so:

extensions = {'.bmp', '.jpg', '.png'} 

können Sie greifen dann extensions{1}, die '.bmp' zurückkehren wird. Durch Verwendung einer Schleife mit einem Iterator i können Sie alle extensions{i} abrufen, bis Sie das Ende der Liste erreichen: length(extensions).

als Selektor zu verwenden:

command = [strcat('find -name *test*', extensions{1}, '.tmp')]; 
0

Wie @ Matt vorgeschlagen, die Verwendung von dir Funktion anstelle von system überlegen, welche nicht tragbar ist:

workdir = '/home/user/201602/'; 
jpg_files = dir(fullfile(workdir, '*.jpg.tmp')); 
png_files = dir(fullfile(workdir, '*.png.tmp')); 
bmp_files = dir(fullfile(workdir, '*.bmp.tmp')); 
Verwandte Themen