在Matlab中保存未知工作空间的工作空间

时间:2014-02-15 03:18:10

标签: matlab workspace

是否可以从我正在调用的函数中保存工作区变量,并且在没有文件I / O的情况下无法显式编辑?

我知道我可以使用save函数来保存工作空间中的所有变量名,但是如果我想从我正在调用的函数中保存工作空间变量,比如内置函数(mean,sum,等等)。

我希望在返回到我正在编写的函数之前保存函数工作空间中的所有变量,并且我希望每次都不打开文件并添加额外的代码行;这可能吗?

2 个答案:

答案 0 :(得分: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 :(得分:-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