从 App Designer 到通用 .m 脚本文件的变量传输

问题描述 投票:0回答:1

我正在尝试将字符串(文件位置)从 App Designer 传输到 .m 脚本文件。

到目前为止,在应用程序设计器中我有:

       app.matfile = app.matfileEditField.Value;
       app.directory = app.DirectoryEditField.Value;
       app.DataSetName = app.DataSetNameEditField.Value;
       assignin('base','matfileDirectory',app.matfile);
       assignin('base','directory',app.directory);
       assignin('base','DataSetName',app.DataSetName);
       run('PostProcessMAIN.m');

其中所有的app.***都是公共变量。当我运行应用程序时,.m 文件正确加载三个变量。当我进入命令行窗口并测试时,字符串是正确的。我还在命令窗口中尝试了 cd(directory) 来检查以确保它有效并且确实有效(cd 将您置于正确的文件路径中)。但是,当 .m 文件自行运行时,我收到错误。我收到以下错误:

Unrecognized function or variable 'directory'.

Error in PostProcessMAIN (line 10)
cd(directory);

Error in run (line 91)
evalin('caller', strcat(script, ';'));

Error in PDFscanner/PostProcessData (line 116)
           run('PostProcessMAIN.m');

错误

matlab.apps.AppBase>@(source,event)executeCallback(appdesigner.internal.service.AppManagementService.instance(),app,callback,requiresEventData,event) (line 63)
            newCallback = @(source, event)executeCallback(appdesigner.internal.service.AppManagementService.instance(), ...
 
Error while evaluating Button PrivateButtonPushedFcn.

它无法识别我分配的变量,并且由于某种原因可以在命令行窗口中使用。有人可以帮我吗?

matlab matlab-app-designer
1个回答
0
投票

谢谢您的帮助!对于遇到同样问题的人,解决方案如下:

  1. 确保您的变量是公共的:

    属性(访问=公共) 目录=''; 数据集名称 = ''; matfile = '';
    结束

  2. 从应用程序的文本框中分配应用程序变量名称。然后将变量分配给“调用者”工作区中的 .m 文件:

    app.matfile = app.matfileEditField.Value;
    app.directory = app.DirectoryEditField.Value;
    app.DataSetName = app.DataSetNameEditField.Value;  
    
    assignin('caller','matfileDirectory',app.matfile);
    assignin('caller','directory',app.directory);
    assignin('caller','DataSetName',app.DataSetName);
    evalin('caller','PostProcessMAIN');
    

注意:.m 文件是 PostProcessMAIN.m。但是,如果您将 .m 放在脚本行中,它将无法识别该文件。

注意:确保 .m 文件开头没有“clear”。这将清除您刚刚分配的所有变量,并且您将产生一个错误,指出您尝试使用的变量未定义。

© www.soinside.com 2019 - 2024. All rights reserved.