有没有办法在Matlab中找到最近评估的变量?谁或谁似乎没有时间戳工作区中的变量.
这是一个用例.我想有一个泛型函数’probe()’,可以在Matlab脚本/代码中的任何地方调用.我想将最近评估的变量保存到.mat文件,而不必传递与保存的变量相关的任何自定义参数.这可能吗?
ans接近我想要实现的目标,但它不可用,因为我的代码在赋值的左侧有变量.
最佳答案 如果您在命令提示符中执行此操作,则可以执行
use this post by gnovice以检索整个命令历史记录,因为您已将MATLAB打开到文本数组.一旦你这样做,你只需在等号前面的第二行搜索变量….假设你做了一个lhs语句.您还需要考虑到您在命令提示符中回显变量而没有左侧语句.我们可以通过
regexp
轻松找到这个.
您需要搜索文本数组的倒数第二行,因为gnovice用于捕获历史记录的代码需要额外的代码行.此代码会在历史记录中捕获,而这不是您想要的.因此,您需要查看倒数第二行/条目.
因此,这样做:
history = com.mathworks.mlservices.MLCommandHistoryServices.getSessionHistory; %// From gnovice's post
historyText = char(history);
lne = historyText(end-1,:); %// Get second last line
%// Do a regexp and retrieve the text with or without the equals sign
var = regexp(lne, '\w*', 'match');
%// Get first match which is the variable before any symbols or just the word
var = var{1};
这是一个简单的例子.在尝试上述代码之前,这是我完整的命令历史:
>> A = rand(10,10);
>> B = A + 2;
>> D = B * 3;
运行上面的代码后,我得到了var:
var =
D
同样,如果我们只评估答案而不向左侧分配任何内容:
>> A = rand(10,10);
>> B = A + 3;
>> A
运行上面的代码,我得到:
var =
A
要最终结束这一切,如果要将此变量保存到磁盘,可以使用eval语句来实现此目的:
>> name_of_file = 'file.mat';
>> eval(['save ' name_of_file ' ' var]);
上面的代码将采用您指定的文件名…所以在这种情况下它将是test.mat,然后使用var作为您要保存的工作空间中的变量调用save命令.