сохранить определенные файлы с помощью команд MATLAB

Я пытаюсь сохранить модели в самых старых версиях MATLAB, как показано ниже. Я ищу каждую папку и подпапку, чтобы найти любой .mdl или .slx, чтобы сохранить его как версию 2007b.

У меня проблема:

  1. это работает, если я просто ищу одно расширение, тогда как мне интересно сделать это для каждого .mdl и .slx .
  2. save_system занимает слишком много времени

Знаете ли вы, как я могу получить все .mdl и .slx, и есть ли оптимизированный способ сохранения?

Спасибо

rootPath = fullfile('M:\script\ytop','tables');
files = dir(rootPath );

for ii = 3:numel(files)

x = fullfile(rootPath ,files(ii).name);
cd(x);
mdl = { dir('*.mdl'),dir('*.slx')};  % here it works if only I set dir('*.mdl')
for jj = 1:numel(mdl)
    load_system(mdl(jj).name);
    save_system(mdl(jj).name,mdl(jj).name, 'SaveAsVersion','R2007b');
end   

end

person Lilou Mhr    schedule 20.02.2015    source источник
comment
«R2017b»? Попробуйте с «R2007b»   -  person Daniel    schedule 20.02.2015
comment
ой извините :) это просто ошибка (конечно я использовал 2007b)   -  person Lilou Mhr    schedule 20.02.2015
comment
Я не знаю, есть ли лучшая функция. Я немного сомневаюсь, поскольку MATLAB на самом деле написал функцию, которая должна делать именно это в хорошем смысле. Однако у меня были похожие проблемы (но для файлов .mat). Проблема заключалась в том, что сетевое соединение было ужасно медленным. Файлы большие? Файлов много? Вы пробовали передавать файлы между машиной, на которой у вас есть матлаб, и диском M? Если бы вы сделали это (без загрузки или сохранения файлов), вы могли бы увидеть, насколько быстрое соединение. Попробуйте это с теми же файлами и сравните, пропорционально ли это время.   -  person patrik    schedule 20.02.2015
comment
@patrick, у меня тоже вторая проблема, как сказать: я хочу загрузить и сохранить все .mdl и .slx?   -  person Lilou Mhr    schedule 20.02.2015


Ответы (1)


%here you used {} which created a cell array of two structs. cat creates a single struct which.
mdl=cat(1,dir('*.mdl'),dir('*.slx')); 
for jj = 1:numel(mdl)
    [~,sysname,~]=fileparts(mdl(jj).name);
    load_system(mdl(jj).name);
    %use only sysname without extension. R2007b is mdl only. You can't store files for R2007b in slx format
    save_system(sysname,sysname, 'SaveAsVersion','R2007b');
    %close system to free memory.
    close_system(sysname);
end   

Применяя только необходимые исправления, ваш код имеет одно странное поведение. Для mdls файл заменяется на исходный, для slx создается mdl рядом с исходным. Вы можете добавить delete(mdl(jj).name) после загрузки.

person Daniel    schedule 20.02.2015
comment
Я забыл упомянуть, что этот ответ содержит только внутренний цикл, начинающийся с mdl= Вероятно, dir ничего не вернул, потому что cd отсутствует. - person Daniel; 23.02.2015