2016-03-08 2 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', который имеет более четкий контроль над согласованным контентом. –

Смежные вопросы