2014-02-21 71 views
4

我嘗試在我的單元格中找到必須在其名稱中包含「HA」的數組。我在這裏找到了一個函數,但它不適用於我的問題。 我的手機是這樣的:matlab查找單元格數組中的子串

'HA1' 'HA1' 'HA1' 'HA1' 'HA1' 
'HA2' 'HA2' 'HA2' 'HA2' 'HA2' 
'HA3' 'HA3' 'HA3' 'HA3' 'HA3' 
'HA4' 'HA4' 'HA4' 'HA4' 'HA4' 
'HA5' 'HA5' 'HA5' 'HA5' 'HA5' 
'HA6' 'HA6' 'HA6' 'HA6' 'HA6' 
'HA7' 'HA7' 'HA7' 'HA7' 'HA7' 
'HA8' 'WA1' 'WA1' 'WA1' 'WA1' 
'HA9' 'WA2' 'WA2' 'WA2' 'WA2' 
'HA10' 'WA3' 'WA3' 'WA3' 'WA3' 
'HA11' 'WA4' 'WA4' 'WA4' 'WA4' 
'DA1' 'WA5' 'WA5' 'WA5' 'WA5' 
'DA2' [] [] [] 'WA6' 
'DA3' [] [] [] 'WA7' 
'DA4' [] [] [] 'WA8' 
'DA5' [] [] [] 'WA9' 
'DA6' [] [] [] 'WA10' 
[] [] [] [] 'WA11' 
[] [] [] [] 'WA12' 

我嘗試這個功能:

x = 'HA'; 
y = cellArray; 
substrfind = @(x,y) ~cellfun(@isempty,strfind(y,x)); 
logicalArray = substrfind(x,y); 

林應該拿到一個邏輯陣列輸出這是我的問題非常有用。但相反,我得到這個錯誤消息: 「如果任何輸入參數是單元陣列,第一個必須是一個字符串的單元數組,第二個必須是一個字符數組。」

我不明白錯誤是什麼,因爲第一個輸入y是一個單元格數組,第二個x是一個字符。

我希望你們能幫我解決我的問題! 謝謝您的期待! 致以問候

回答

8

假設C是您的單元陣列。然後一個方式做你想要將這個什麼:

>> C(cellfun('isempty', C)) = {''}; 
>> logicalArray = ~cellfun('isempty', strfind(C, 'HA')) 

strfind不接受電池陣列,其中一些值不是字符串。您的單元陣列恰巧具有空值,但是其類型爲,其類型爲 - []double,而不是char。這就是你得到這個錯誤的原因。

因此,我只需用空字符('')替換每個空的double,然後使用strfind

解決此問題的另一種方法:

>> logicalArray = cellfun(@(x)~isempty(strfind(x,'HA')), C) 

但這是慢了很多。

+0

謝謝!這幫了我很多!我沒有檢查空值。下次我不會忘記! –

相關問題