2016-10-01 2 views
2

Зачастую я делаю ошибку при запуске моего main.m, когда несколько файлов в редакторе загрязнены.Программно сохранить все грязные файлы в MatLab

Было бы хорошо, если бы у меня была команда в начале моего main.m, которая просто автоматически сохраняет каждый грязный файл.

Save currently running script in Matlab дает ответ с подсказкой для сохранения в настоящее время активного файла, но есть способ сделать это для ВСЕХ файлов?

+2

Я предлагаю вам разъяснить значение «грязный» здесь (файлы, которые были изменены, но не сохранены) в пользу новичков –

ответ

3

Вы можете использовать объект com.mathworks.mlservices.MLEditorservice для доступа к редактору и сохранения всех грязных файлов.

service = com.mathworks.mlservices.MLEditorServices; 

% Get a vector of all open editors 
editors = service.getEditorApplication.getOpenEditors(); 

% For each editor, if it is dirty, save it 
for k = 0:(editors.size - 1) 
    editor = editors.get(k); 

    if editor.isDirty() 
     editor.save(); 
    end 
end 

Вместо того, чтобы слепо экономии все файлы, вы можете изменить это немного, так что вы могли бы передать список функций (ваших зависимостей) и просто сохранить их.

function saveAll(varargin) 
    % Convert all filenames to their full file paths 
    filenames = cellfun(@which, varargin, 'uniformoutput', false); 

    service = com.mathworks.mlservices.MLEditorServices; 

    % Get a vector of all open editors 
    editors = service.getEditorApplication.getOpenEditors(); 

    % For each editor, if it is dirty, save it 
    for k = 0:(editors.size - 1) 
     editor = editors.get(k); 

     % Check if the file in this editor is in our list of filenames 
     % and that it's dirty prior to saving it 
     if ismember(char(editor.getLongName()), filenames) && editor.isDirty() 
      editor.save(); 
     end 
    end 
end 

И это можно назвать с несколькими именами функций (как строки)

saveAll('myfunc', 'myotherfunc') 
+0

Спасибо! (Кстати, появляется 'editors.get (k-1);' необходимо из-за индексации на основе 0). К сожалению, это решение не совсем работает. Если я загрязнил свой файл 'main.m' (содержащий этот скрипт), запустите его, я получаю ***« java.lang.Exception: java.lang.RuntimeException: не удается сохранить на main.m во время его отладки. и попробуйте еще раз ». *** –

+0

@Pi Спасибо, что указали на проблему с индексированием. В нем говорится, что вы находитесь в режиме отладки, это дело? Вы пытались запустить его, когда вы не находитесь в режиме отладки? – Suever

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