2014-02-15 99 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

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