2015-09-07 141 views
0

我有一个函数可以遍历一堆约10-20次的代码,从而生成一个n * 1的结构,并在结构的每一行中包含大量数据。贯穿每行代码需要一段时间,当我运行它时,有可能我犯了一个错误或需要手动更正。我不想停止运行代码,因为那样我就不得不失去我之前完成的所有工作。是否有可能将结构的每个迭代保存到工作空间中,即使该函数尚未运行,然后在下一次迭代中用新的版本覆盖该版本? (例如,如果我运行了第一次迭代,我有一个1 * 1的结构,并且会保存,然后函数继续,给出一个2 * 1结构。我可以重写第一个版本,然后继续这样做,以防万一我停止功能,在中间?)在运行MATLAB函数的中间保存struct

+1

包括'内循环保存文件名myStruct'?这里'myStruct'代表你的结构变量,'filename'是你想要保存的文件。或者更好的是,在覆盖之前制作一个旧文件的副本。在Windows上,'!复制filename.mat filename.bak' –

回答

0

可以包括环路,其中myStruct代表您结构变量中save fileName myStructfilename是要保存的名称。

如果程序在保存完成时停止或崩溃,最好在覆盖之前复制旧文件。你可以用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 
0

我会用一个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