在 Matlab 中保存当前正在运行的脚本

Posted

技术标签:

【中文标题】在 Matlab 中保存当前正在运行的脚本【英文标题】:Save currently running script in Matlab 【发布时间】:2011-03-22 10:03:01 【问题描述】:

有没有办法?我有一个脚本,它会自动备份一组脚本,但如果我更改了当前脚本,那么保存的版本就会过时。

也许可以调用一些java?

谢谢

【问题讨论】:

你的意思是备份脚本也应该备份自己吗? 是的,在某种程度上,我有一个主脚本,它设置了很多参数,然后调用一个函数来备份整个脚本集。 我仍然不确定我是否 100% 了解您。您是通过将参数保存为 mat 文件还是将脚本本身保存为 m 文件来进行备份?您只是将副本保存在单独的文件夹/标签中吗?为什么保存的版本过期了?举个例子会有所帮助。 我将m个文件单独保存,然后将参数分别保存在mat文件中。我知道它有点令人费解。我保存了整套脚本,以便以后可以再次运行它们而无需进行太多更改。有时我忘记在设置当前参数的脚本上单击保存,因此复制到磁盘上的文件不包含正确的内容。如果我可以从脚本中保存它,那么保存的副本总是正确的。 好的,现在更清楚了。这意味着您并不总是通过在命令行中键入脚本名称来运行脚本,而是通过“评估单元格”按钮来运行脚本,对吗?否则,您正在运行保存的文件,而不是编辑的文件。 【参考方案1】:

在 Yair Altman 网站的某个地方(请参阅我的其他答案中的链接),他还提到了 a blog entry about editorservices,它是由 MATLAB R2009b 引入的。

editorservices.getActive().save

应该做你想做的。

【讨论】:

太好了,我什至可以通过查看 IsDirty 字段来判断文件是否已被修改。谢谢!【参考方案2】:

好的,我在这里写的都是Yair Altman从undocumentedmatlab.com那里学到的,特别是通过查看他的EditorMacro.m...很棒的东西!

我假设 Itamar Katz 正确理解了您,并且您正在使用“评估单元格”或“评估选择”从编辑器中运行未保存的代码;您希望您的代码意识到它没有被保存并将当前显示在编辑器中的版本保存到其他位置。

我还没有找到将文件直接保存到原始位置的方法,但至少我找到了访问当前文本的方法。然后,您可以使用 fprintf 将其保存到您想要的任何位置。我在 Matlab 7.11 (R2010b) 中对此进行了测试;如果你有不同的版本,你需要通过 EditorMacro.m 来找到 Matlab 6 的正确代码。

if  com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor.isDirty    
    thisdocument=com.mathworks.mlservices.MLEditorServices.getEditorApplication.getActiveEditor.getDocument;
    thisdocument_text=char(thisdocument.getText(0,thisdocument.getLength));
    fid = fopen('backupfile.m','w');
    fprintf(fid, '%s', thisdocument_text);
    fclose(fid);
else
    % saved file is unmodified in editor - no need to play tricks...
    ...
end

所以 if 条件检查当前活动的编辑器窗口是否包含未保存的文件(“脏”);如果是,我们需要检索代码的当前版本(到变量 thisdocument_text 中)并将这个字符串保存到某个文件中。

这有帮助吗?

【讨论】:

我决定留下这个答案,即使我现在有一个更好的答案,因为它们是不相关的,而且这个答案暗示了更深层次的方法来弄乱 MATLAB 内部。这是“无证”的答案,而另一个使用了被称为“半无证”的东西......

以上是关于在 Matlab 中保存当前正在运行的脚本的主要内容,如果未能解决你的问题,请参考以下文章

matlab怎么保存 matlab如何保存

终止通过 nohup 运行的 matlab 并访问工作区变量

matlab怎么保存工作文件

如何在 Matlab 中使用 onCleanup 保存变量?

保存Matlab音频输出

matlab,简述脚本M文件和函数M文件的区别?