我真的只是Matlab的一个菜鸟,所以如果我使用错误的语法,请不要生气。我目前正在编写一个小程序,我将所有.xlsx文件名从某个目录放入一个数组中。我现在想根据文件名将文件分成两个不同的数组。这就是我试过的:
files = dir('My_directory\*.xlsx')
file_number = 1;
file_amount = length(files);
while file_number <= file_amount;
file_name = files(file_number).name;
filescs = [];
filescwf = [];
if strcmp(file_name,'*cs.xlsx') == 1;
filescs = [filescs,file_name];
else
filescwf = [filescwf,file_name];
end
file_number = file_number + 1
end
这里的想法是strcmp(file_name,'*cs.xlsx')
检查file_name
最后是否包含'cs'。如果是,则将其放入filescs
,如果不是,则将其放入filescwf
。但是,这似乎不起作用......
有什么想法吗?
答案 0 :(得分:0)
strcmp
不适用于*cs.xlsx
等通配符。有关替代方法,请参阅this question。
答案 1 :(得分:0)
strcmp(file_name,'*cs.xlsx')
检查file_name
是否与*cs.xlsx
相同。如果没有该名称的文件(提示:少数文件系统允许'*'作为文件名的一部分),它将始终为false。 (顺便说一句:不需要'== 1'比较或相应行上的分号)
您可以在此处使用数组索引来提取要比较的文件名的相关部分。例如,file_name(1:5)
将为您提供前5个字符,file_name(end-5:end)
将为您提供最后6个字符。
答案 2 :(得分:0)
您可以使用regexp
检查每个文件的最终字母,然后cellfun
将regexp
应用于您的所有文件名。
此处,对于以getIndex
结尾的所有文件,cs.xlsx
将为1。 (?=$)
部分确保cs.xlsx
在最后。
files = dir('*.xlsx')
filenames = {files.name}'; %get filenames
getIndex = cellfun(@isempty,regexp(filenames, 'cs.xlsx(?=$)'));
list1 = filenames(getIndex);
list2 = filenames(~getIndex);