根据数组是否包含短语来分隔数组

时间:2013-10-10 11:15:45

标签: matlab sorting

我真的只是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。但是,这似乎不起作用......

有什么想法吗?

3 个答案:

答案 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检查每个文件的最终字母,然后cellfunregexp应用于您的所有文件名。

此处,对于以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);