【问题标题】:Save workspace of unknown workspace in MatlabMatlab中保存未知工作空间的工作空间
【发布时间】:2014-02-15 03:18:09
【问题描述】:

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

我知道我可以使用 save 函数将所有变量名称保存在工作区中,但是如果我想从我正在调用的函数中保存工作区变量,比如内置函数(意思是总和, ETC)。

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

【问题讨论】:

    标签: matlab workspace


    【解决方案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]);
    

    【讨论】:

      【解决方案2】:

      试试“保存”功能。 在你的调用函数中添加这一行:

          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
      

      【讨论】:

      • 这种类型的更改正是 O.P. 所禁止的。
      • @BobGilmore 我只是在阅读 Mathworks 问答网站以寻找类似问题的答案,然后你的名字出现了 :)
      • 呵呵,你知道什么? :-)
      • 我什么都不知道,只是看到了你的名字和签名……就是这样!我以为真是巧合:)
      猜你喜欢
      • 1970-01-01
      • 2022-08-08
      • 2016-05-30
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多