2016-03-08 45 views
0

我有一个很大的Matlab脚本,我想只提取包含for,while,if,end等的行。应该包括缩进。例如:打印Matlab脚本的全局结构

%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 

我想使用此概述来更好地了解代码的结构。我怎么能做到这一点?

回答

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是相当简单的(要被读取:哑)在生产线中识别子串;如果你需要更精确的搜索(例如,只有整个单词),你会更安全使用regexp

+0

不错!我怎样才能包含原始缩进? (我编辑了这个问题。) – Karlo

+0

根据用户的确切目标,可以完成一些改进。例如,包含'if'的变量名也被保留。 – Karlo

+1

@MWc这就是为什么我指出,而不是'strfind'的人可能想要使用'regexp',它对匹配的内容有更精确的控制。 – 2016-03-08 13:51:11