0

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

有什么想法吗?

4

3 回答 3

0

strcmp不适用于通配符,例如*cs.xlsx. 有关替代方法,请参阅此问题。

于 2013-10-10T11:22:15.120 回答
0

strcmp(file_name,'*cs.xlsx')检查是否file_name与 相同*cs.xlsx。如果没有该名称的文件(提示:很少有文件系统允许将 '*' 作为文件名的一部分),则它将始终为 false。(顺便说一句:不需要 '==1' 比较或相应行上的分号)

您可以在此处使用数组索引来提取要比较的文件名的相关部分。file_name(1:5), 会给你前 5 个字符,file_name(end-5:end)比如最后 6 个字符。

于 2013-10-10T11:22:22.503 回答
0

您可以使用regexp检查每个文件的最终字母,然后cellfun应用于regexp所有文件名。

在这里,getIndex所有以 . 结尾的文件都有 1 cs.xlsx。该(?=$)部分确保cs.xlsx在最后。

files = dir('*.xlsx')
filenames = {files.name}';   %get filenames

getIndex = cellfun(@isempty,regexp(filenames, 'cs.xlsx(?=$)'));
list1 = filenames(getIndex);
list2 = filenames(~getIndex);
于 2013-10-10T12:05:41.190 回答