在运行MATLAB函数的中间保存struct
问题描述:
我有一个函数可以遍历一堆约10-20次的代码,从而生成一个n * 1的结构,并在结构的每一行中包含大量数据。贯穿每行代码需要一段时间,当我运行它时,有可能我犯了一个错误或需要手动更正。我不想停止运行代码,因为那样我就不得不失去我之前完成的所有工作。是否有可能将结构的每个迭代保存到工作空间中,即使该函数尚未运行,然后在下一次迭代中用新的版本覆盖该版本? (例如,如果我运行了第一次迭代,我有一个1 * 1的结构,并且会保存,然后函数继续,给出一个2 * 1结构。我可以重写第一个版本,然后继续这样做,以防万一我停止功能,在中间?)在运行MATLAB函数的中间保存struct
答
可以包括环路,其中myStruct
代表您结构变量中save fileName myStruct
和filename
是要保存的名称。
如果程序在保存完成时停止或崩溃,最好在覆盖之前复制旧文件。你可以用copyfile
来做到这一点。
所以,代码如下:
%// ...
fname = 'filename'; %// string contianing the file name
fid = fopen([fname '.mat'],'w'); %// create file, even if myStruct doesn't exist yet
fclose(fid); %// close file
for [...] %// your loop
%// loop operations
copyfile([fname '.mat'], [fname '.bak'], 'f') %// back up file
save(fname, 'myStruct') %// overwrite file with updated myStruct
end
答
我会用一个try/catch
控制结构。这使您可以定义出现错误或运行时异常时应该发生的情况。
假设你的函数返回有问题的结构,
function foo = bar(baz)
try
% your code here
catch some_exception
warning(some_exception.msg);% print the exception so you can correct the error later.
return % instead of exiting with an error message, return to the caller, the last value of foo is returned
end
包括'内循环保存文件名myStruct'?这里'myStruct'代表你的结构变量,'filename'是你想要保存的文件。或者更好的是,在覆盖之前制作一个旧文件的副本。在Windows上,'!复制filename.mat filename.bak' –