2

20*3 のセル配列を取得したので、"137"、"2"、および "n:T" を含む行を削除する必要があります

元のデータ:

'T'             ''          ''            
'NP(*)'         ''          ''            
[       137]    ''          ''            
[         2]    ''          ''            
'ARE'           'and'       'NP(FCC_A1#1)'
''              ''          '1:T'         
[      1200]    [0.7052]    ''            
[1.2051e+03]    [0.7076]    ''            
'ARE'           'and'       'NP(FCC_A1#3)'
''              ''          '2:T'         
[      1200]    [0.0673]    ''            
[1.2051e+03]    [0.0671]    ''            
'ARE'           'and'       'NP(M23C6)'   
''              ''          '3:T'         
[      1200]    [0.2275]    ''            
[1.2051e+03]    [0.2253]    ''            
[       137]    ''          ''            
[         2]    ''          ''    

そして、私はそれが好きであることを望みます

'T'             ''          ''            
'NP(*)'         ''          ''                  
'ARE'           'and'       'NP(FCC_A1#1)'       
[      1200]    [0.7052]    ''            
[1.2051e+03]    [0.7076]    ''            
'ARE'           'and'       'NP(FCC_A1#3)'     
[      1200]    [0.0673]    ''            
[1.2051e+03]    [0.0671]    ''            
'ARE'           'and'       'NP(M23C6)'   
[      1200]    [0.2275]    ''            
[1.2051e+03]    [0.2253]    ''            

regexp と strcmp を試しましたが、うまくいきません。さらに、セル配列も扱いにくいです。誰でも助けることができますか?

前もって感謝します。

4

3 に答える 3

1

すべてのセルが文字列または空の配列 (数値ではない) になるように元のデータを何らかの方法で読み取ることができる場合は、 strcmpandを使用してそれを行うことができますregexprep

% The variable 'data' is a 2D-cell array of strings or empty arrays

datarep = regexprep(data,'^\d+:T','2'); % replace 'n:T' with '2' for convenience
remove1 = strcmp('2',datarep); % this takes care of '2' and 'n:T'
remove2 = strcmp('137',datarep); % this takes care of '137'
rows_keep = find(~sum(remove1|remove2,2)); % rows that will be kept
solution = data(rows_keep,:)

たとえば、これでdata

'aa'     'bb'       'cc'  
'dd'     'dd'       '2'   
'137'    'dd'       'dd'  
'dd'     'dd'       '11:T'
'1:T'    '1:137'    'dd'  
'dd'     ''             []  

変数の結果solution

'aa'    'bb'    'cc'
'dd'    ''        []
于 2013-08-08T01:53:12.260 に答える
0

デスクトップで次のコードを試してみましたが、うまくいくようです。私はaあなたが持っていたセル配列として作成しました。

L = size(a, 1);
mask = false(L, 1);
for ii = 1:L
    if isnumeric(a{ii, 1}) && (a{ii, 1} == 137 || a{ii, 1} == 2)
        mask(ii) = true;
    elseif ~isempty(a{ii, 3}) && strcmp(a{ii, 3}(end-1:end), ':T')
        mask(ii) = true;
    end
end

b = a(~mask, :)

これで、b必要なセル配列になるはずです。基本的に、ルールを満たす行の位置を示す論理マスクを作成し、その逆を使用して行を呼び出します。

于 2013-08-07T23:18:33.473 に答える