要删除具有指定字符串的行,请阅读
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))但是我不确定。
答案 0 :(得分:3)
您正在使用strcmp()
,它会比较两个字符串的相等性。那不是你想要的;你想检查一些字符串是否是另一个字符串的子字符串。您可以使用strfind
或findstr
或regexp
或regexprep
来实现此目的。
另外,您没有关闭文本文件。这可能会导致各种各样的问题。习惯于始终将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);
答案 1 :(得分:1)
如果需要考虑性能,可以直接在Matlab中尝试invoking Unix's sed:
system('sed ''/omit/d'' text.txt > output.txt');
这是类似的命令,在Matlab中调用AWK:
system('awk ''!/omit/'' text.txt > output.txt');