用MATLAB命令保存特定文件

3
我正在尝试将模型保存为旧版本的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

1
'R2017b'?试试看'R2007b'。 - Daniel
哦,抱歉,:) 这只是一个错误(当然我使用的是2007b) - Lilou Mhr
我不知道是否有更好的函数。虽然 MATLAB 实际上已经编写了一个很好的函数来执行这个任务,但是我还是有点怀疑。然而,我也曾经遇到过类似的问题(但是针对的是 .mat 文件)。那时候的问题是网络连接非常慢。文件很大吗?文件很多吗?你尝试在拥有 MATLAB 的计算机和 M 驱动器之间传输文件了吗?如果你这样做了(没有加载或保存文件),你可以看到连接速度有多快。用相同的文件尝试一下,并比较一下这个时间是否成比例。 - patrik
@patrick,我还有第二个问题,如何说:“我想加载和保存所有的.mdl和.slx文件?” - Lilou Mhr
1个回答

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)


我忘了提到这个答案只包含以mdl=开头的内部循环。可能是因为缺少cd,所以dir没有返回任何内容。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接