2015-09-07 64 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