2017-04-26 151 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 
相關問題