创建一个表,其中包含从MATLAB

时间:2016-04-02 20:24:48

标签: matlab

我想创建3个列表,其中包含以png,jpg和bmp开头的文件名。所有文件都是目录树中的图像:/ year_month / year_month_day /,如下所示:

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

每个列表应包含每个扩展名(jpg,bmp和png)的图片名称,例如list1应具有:

./ 20160203 / 20160203_png01_test1.png.tmp

./ 20160204 / 20160204_png01_test1.png.tmp

./ 20160205 / 20160205_png01_test1.png.tmp

list2应该有:

./ 20160203 / 20160203_jpg01_test2.jpg.tmp

./ 20160204 / 20160204_jpg01_test2.jpg.tmp

./ 20160205 / 20160205_jpg01_test2.jpg.tmp

和list3相同,但有bmp ......

我的代码看起来像这样:

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

我得到了列表:png01.dat,jpg01.dat和bmp01.dat这很好,但在每个列表中我都有图片的所有名称,而不仅仅是具有相应扩展名的名称。首先,我想制作一个"索引"为了只选择具有相应扩展名(bmp jpg和png)的文件,然后将它们发送到列表。我怎么能这样做?

我希望问题很清楚。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

像这样存储扩展名:

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

然后,您可以访问extensions{1},这将返回“.bmp”。通过使用带迭代器i的循环,您可以检索所有extensions{i},直到到达列表末尾:length(extensions)

用作选择器:

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

答案 1 :(得分:0)

根据@Matt的建议,考虑使用dir函数而不是system这是不可移植的:

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') );