在Matlab中保存未知工作区的工作区

4

如果我调用的函数不能进行显式编辑而需要进行文件I/O,那么是否有可能保存工作区变量?

我知道可以使用save函数保存工作区中的所有变量名,但是如果我想要保存从我所调用的函数(如mean、sum等内置函数)中的工作区变量呢?

在它返回到我编写的函数之前,我希望保存从函数的工作区中获取的所有变量,并且我希望不需要每次打开文件并添加额外的代码行。这种情况是否可能实现?

2个回答

1
如果有人感兴趣: 我还没有找到解决我提出的确切问题的方法,但是我找到了一种解决方案,只需稍微跟踪文件即可。使用onCleanup函数,您可以指定在函数返回给调用者之前保存所有变量。使用这个和一些文件解析,你可以打开需要处理的代码作为一个简单的文本文件,并在文件中任意位置插入onCleanup代码(比将save作为最后一行插入更容易)。然后,您可以运行代码并使用以前的文件名或任何您选择的命名方法跟踪新的.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. 所禁止的。 - Bob Gilmore
@BobGilmore,我刚刚在Mathworks的问答网站上阅读了一个类似问题的答案,并看到了你的名字 :) - Autonomous
呼,你知道什么? :-) - Bob Gilmore
我什么都不知道,只是看到了你的名字和签名...就这样!我想这真是太巧了 :) - Autonomous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接