我有一个大型的Matlab脚本,我想只提取包含for
,while
,if
,end
等的行。应该包含缩进。例如:
%original
for i=1:2 %display text
disp('I like you')
if j==k % check if j=k
disp('very much')
end
end
%result
for i=1:2 %display text
if j==k % check if j=k
end
end
我想使用此概述来更好地概述代码的结构。我怎么能做到这一点?
答案 0 :(得分:3)
有些事情:
f = fopen('myfile.m', 'rt');
a = textscan(f, '%s', 'Delimiter', '\n', 'Whitespace', '');
fclose(f);
p = @(x) ~cellfun(@isempty, strfind(a{1},x));
b = a{1}(p('for') | p('while') | p('if') | p('end'));
请注意strfind
在识别一行中的子字符串时非常简单(读作:dumb);如果您需要更精确的搜索(例如仅限整个单词),您可以使用regexp
更安全。