2017-04-26 23 views
2

我遍历一个子目录,并获取每个文件的扩展名为.txt的字符变量的名称。MATLAB如何检查字符数组的一部分是否存在于另一个char数组中?

var1 = dir('*.txt'); 

%creating a loop with index i 
var2 = var1.name(i); %Getting first file name 
arr1 = ['C001','C002','C003','C010']; 
arr2 = ['C011','C012','C013','C014']; 

文件名格式的“C001.txt”等。我想检查文件名var2是否属于arr1arr2(可变var2或文件名的更精确,无一部分延伸)。我可以尝试使用,但它适用于字符串而不是字符。什么是做这个任务的好方法?

+0

['intersect'](https://www.mathworks.com/help/matlab/ref/intersect.html)? – excaza

回答

1

有几件事情错了你上面的方法......

  1. 线var2 = var1.name(i);是要给你一个错误。该dir函数返回一个structure array,如果你正在循环在阵列上,你需要访问数组元素第一,则结构域:

    var2 = var1(i).name; 
    
  2. name场也会包含文件名扩展名。它看起来像你会想,你可以做使用fileparts做比较,之前删除扩展:

    [~, var2] = fileparts(var1(i).name); 
    
  3. 当存储多个字符数组,你通常希望将它们存储在cell arrays,因为这使它们更易于处理和大多数功能的设计上无论如何操作cell arrays of characters

    arr1 = {'C001','C002','C003','C010'}; % Note the curly braces! 
    arr2 = {'C011','C012','C013','C014'}; 
    

一旦你做出上述更改,您可以轻松地检查是否var2是EI的成员疗法arr1arr2通过使用(便利地命名)ismember功能:

if ismember(var2, arr1) 
    % Do something 
elseif ismember(var2, arr2) 
    % Do something else 
end 
相关问题