1

指定された文字列を含む行を削除するには、次を読みます

http://www.mathworks.com/matlabcentral/answers/34567-remove-row-with-matching-string

やったけど失敗。

text.txt は次のようになります

123     A omit B
2323    C omit D
333         oh

そして、私はコーディングしました

fid = fopen('text.txt');
tttt = textscan(fid, '%s %s','delimiter','\t','HeaderLines',0)
tttt(strcmp(tttt{2}, 'omit'), :) = []
strcmp(tttt{2}, 'omit')

しかし、MatLab は「空のセル配列: 0 行 3 列」を表示し、

ans =

     0
     0
     0

ファイルのタイプ「tttt」が間違っていると思います (tttt(:,2) ではなく「tttt{2}」と書く必要があったため) が、よくわかりません。

4

2 に答える 2

3

strcmp()2 つの文字列の等価性を比較するを使用しています。それはあなたが求めているものではありません。ある文字列が別の文字列の部分文字列であるかどうかを確認したい。strfindそのためにorfindstrまたはregexporを使用できますregexprep

また、テキスト ファイルを閉じていません。これはあらゆる種類の問題につながる可能性があります。常に1 つのfid = fopen(...); fclose(fid);コマンドであるかのように記述し、その間にコーディングを続けることを習慣にしてください。

小さな例:

fid = fopen('text.txt');

    tttt = textscan(fid, '%s %s','delimiter','\t');
    tttt{2}(~cellfun('isempty', strfind(tttt{2}, 'omit'))) = [];

fclose(fid);

編集:あなたのコメントに基づいて、私はあなたがこれをしたいと思います:

fid = fopen('text.txt');

% Modified importcommand
tttt = textscan(fid, '%s%s',...
    'delimiter','\t',....
    'CollectOutput', true);
tttt = tttt{1};

% Find rows for deletion 
inds = ~cellfun('isempty', strfind(tttt(:,2), 'omit'));

% aaaand...kill them!    
tttt(inds,:) = [];


fclose(fid);
于 2013-07-05T14:04:25.813 に答える