【问题标题】:Shortcut for saving file in current directory with correct name?在当前目录中以正确名称保存文件的快捷方式?
【发布时间】:2017-04-19 01:14:47
【问题描述】:

是否有任何快捷方式可以将打开的文件以当前名称保存到当前目录中?如果我下载多个同名文件,它们会进入我的“下载”文件夹,最终会以 function (1).m 之类的名称结束,而不是 function.m

此时,通过我的网络浏览器打开文件很容易打开文件并查看内容 - MATLAB 会看到文件扩展名并打开它。但是,如果它是一个函数,我必须先另存为并移动/重命名文件,然后才能使用代码。

编辑:由于 MATLAB 坚持文件名与函数名相同,我希望有一个快捷方式可以将打开的文件直接保存到当前 MATLAB 路径并适当地命名。

由于 MATLAB 约定文件名与函数名相同,我希望有一个快捷方式可以将打开的文件直接保存到当前 MATLAB 路径并根据文件中指定的函数名对其进行命名。

【问题讨论】:

  • MATLAB 实际上并不要求函数名与文件名匹配。问题是括号使它成为无效的函数名
  • @Suever 啊,不知道。谢谢。
  • 这是您的网络浏览器而不是 matlab 的问题
  • @Suever 在 MATLAB 之外解决这个问题是一个很好的建议,我只花了几分钟。如果有所描述的那种快捷方式,我仍然会感兴趣,例如在编写新函数时使用。

标签: matlab


【解决方案1】:

您将需要一个始终位于 Matlab 路径上的目录。这可以通过adding one in the startup.m script来实现。

那么你应该把下面的函数savefunc.m保存到那个目录,这样你就可以随时调用它了。

function savefunc(FuncName, Directory)
    % Set directory if not given, default is working directory
    if nargin < 2; Directory = pwd; end
    % Get active document
    ActiveDoc = matlab.desktop.editor.getActive;
    % Set FuncName if not given, or if FuncName was empty string
    if nargin < 1 || strcmp(FuncName, '');
        % Get function name
        FuncName = ActiveDoc.Text;          % Entire text of document
        % Could use indexing to only take first n characters, 
        %   and not load entire string of long function into variable. 
        %   FuncName = ActiveDoc.Text(1:min(numel(ActiveDoc.Text), n));  
        FuncName = strsplit(FuncName, '('); % Split on parenthesis
        FuncName = FuncName{1};             % First item is "function [a,b,c] = myFunc"
        FuncName = strsplit(FuncName, ' '); % Split on space (functions don't always have equals)
        FuncName = strtrim(FuncName{end});  % Last item (without whitespace) is "myFunc"
    end
    % Save the file
    saveAs(ActiveDoc, fullfile(Directory, [FuncName, '.m']));    
end

现在,假设您刚刚创建了以下Untitled.m

function [a,b,c] = mytest()
    a = 1; b = 1; c = 1;
end

快捷方式:打开Untitled.m,然后在命令行窗口中输入

savefunc()

Untitled.m 将在当前工作目录中保存为mytest.m。请注意,如果您愿意,您还可以传递不同的函数名称和另存为目录,这对其他场合很有用。

如果你想指定目录但使用自动命名,你可以传递一个空字符串作为FuncName


您可以使用matlab.desktop.editor.getAll 扩展此功能以获取所有打开的文档,然后遍历它们进行保存。

如需更多信息,请在命令行窗口中输入help matlab.desktop.editor,似乎缺少在线文档。

matlab.desktop.editor:以编程方式访问 MATLAB 编辑器以打开、更改、保存或关闭 文件。


最后,请注意不需要“保存成功”类型的消息,因为您会看到文件名更改,并且如果失败也会收到错误消息(来自 saveAs 文档):

如果在 saveAs 操作期间发生任何错误,MATLAB 将引发 MATLAB:Editor:Document:SaveAsFailed 异常。如果操作返回而没有抛出异常,则假定操作成功。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多