2014-02-15 95 views
4

是否可以從我調用的函數中保存工作空間變量,並且無需在沒有文件I/O的情況下進行顯式編輯?在Matlab中保存未知工作空間的工作空間

我知道我可以使用保存功能將所有變量名稱保存在工作區中,但是如果我想從我調用的函數中保存工作區變量,如內置函數(平均值,和等)。

我想在函數的工作區中保存所有變量,然後再返回到我正在編寫的函數中,並且我希望在不每次打開文件並添加額外的一行代碼的情況下執行此操作。這可能嗎?

回答

1

如果有人有興趣: 我還沒有找到解決問題的具體問題,但我發現了一個解決方案,運行良好,點亮額外的文件跟蹤。

使用函數onCleanup,可以指定在函數返回給調用者之前保存所有變量。使用這個和一個小文件解析,你可以打開有問題的代碼作爲一個簡單的文本文件,並插入onCleanup代碼在文件的任何地方(比插入保存作爲最後一行更容易)。然後,您可以運行代碼並使用先前的文件名或您選擇的任何命名方法來跟蹤新的.mat文件。

這將使您在工作區中的所有變量保存剛函數退出之前,但它確實需要文件的解析,請參見下面簡單的例子:

readFile = fopen('filename.m'); 
writeFile = fopen(['filename_new.m']); 
%Ignore the first line (hopefully the function header, may need extra parsing if not) 
functionHeader = fgets(readFile); 
%Print the function header 
fprintf(writeFile,functionHeader); 
%Print the clean-up code 
%NOTE: This can go anywhere in the file 
fprintf(writeFile,sprintf('onCleanup(@()save(''%s.mat''))\n',filename))); 
nextLine = fgets(readFile); 
while ischar(nextLine) 
    fprintf(writeFile,nextLine); 
    nextLine = fgets(readFile); 
end 

通過上述,創建一個新的文件(filename_new.m),它將創建一個包含所有工作空間變量的mat文件(filename.mat)。

eval(newFileName(1:end-2)); 

現在,通過跟蹤.mat文件,您可以在此之後做任何必要的操作。出於我的目的,我對所述函數使用的內存感興趣,該函數通過訪問.mat文件的mat對象可用。

matObj = matfile('filename.mat'); 
stats = whos(matObj); 
fileSize = sum([stats.bytes]); 
-1

嘗試「保存」功能。 在添加此行您稱爲功能:

save('filename') 

這裏是我的示例代碼:

a=10; b=6; 

    c=addition(a,b); 

和函數的定義爲:

function [out]=addition(a,b) 
    out=a+b; 
    temp1=a; 
    temp2=b; 
    temp3=a-b; 
    save('C:\data.mat'); 
    end 
+1

這種類型的改變正是O.P.狀態不允許的。 –

+0

@BobGilmore我剛剛在閱讀Mathworks問答網站,回答類似的問題,並且你的名字出現了:) –

+0

嗯,你知道什麼? :-) –