独立应用程序和参量
您可以将参量传递给使用 MATLAB® Compiler™ 创建的独立应用程序,其方式与将输入参量传递给命令行上的任何基于控制台的应用程序的方式相同。键入应用程序名称,后跟一个或多个以空格分隔的输入参量。
当您运行独立应用程序时,主程序会将任何命令行参量传递给主函数 - 即您在创建应用程序时首先列出的函数。
将命令行参量传递给应用程序
请参阅下表,获取将不同参量类型(例如文件、数字或字母、矩阵和 MATLAB 变量)传递给名为 myapp
的独立应用程序的示例。
要传递.... | 使用此语法.... | 注意 |
---|---|---|
名为 helpfile 的文件 | myapp path/to/helpfile | 如果文件路径包含空格,请用双引号将路径括起来。 |
数字或字母 | myapp 1 2 3 a b c | 传递的数字和字母之间请勿使用逗号或其他分隔符。 |
矩阵作为输入 | myapp "[1 2 3]" "[4 5 6]" | 用双引号将每个矩阵参量引起来。 |
MATLAB 变量 | 在 MATLAB 命令行窗口中输入: for k=1:10 cmd = ['myapp ',string(k)]; system(cmd); end | 要将数值 MATLAB 变量传递给程序作为输入,必须将其转换为字符向量或字符串。 |
您还可以从 MATLAB 调用独立应用程序。以下示例显示如何在 MATLAB 命令行窗口中将数字和字母 1 2 3 a b c
传递给名为 myapp
的独立应用程序。
使用 system
、dos
或 unix
使用 system
命令将整个命令指定为字符向量(包括输入参量)。
system('myapp 1 2 3 a b c')
使用!(Bang) 运算符
在 MATLAB 中使用 !
(感叹号)运算符。
!myapp 1 2 3 a b c
当使用 !
(bang) 运算符时,输入行的其余部分将被解释为 system
命令,因此无法将 MATLAB 变量用作参量。
使用 Windows 批处理文件
要通过双击来运行带有参量的独立应用程序,您可以创建一个批处理文件,使用指定的输入参量调用独立应用程序。例如,使用以下代码创建 runmyapp.bat
。
rem This is main.bat file which calls
rem myapp.exe with input parameters
myapp "[1 2 3]" "[4 5 6]"
@echo off
pause
runmyapp.bat
中的最后两行代码确保显示输出的窗口保持打开状态,直到您按下某个键。
保存此文件后,您可以通过双击 runmyapp.bat
图标,使用上面指定的参量来运行代码。
在 MATLAB 中处理输入参量
默认情况下,您从系统提示符传递给独立应用程序的输入参量将作为字符向量输入接收。接受字符向量或字符串作为输入的 MATLAB 代码在打包之前无需进行修改。
如果您的代码需要不同格式的数据(例如 double
),则必须执行以下一项或两项操作:
这里有两种方法可以在 MATLAB 代码中将输入参量转换为字符向量。
方法 1
使用 ischar
测试输入参量 z
是否是字符向量,如果是,则将其转换为 double
。
function [x,y]=foo(z); if ischar(z) z=double(string(z)); else z=z; end x=2*z y=z^2; disp(y)
方法 2
使用 isdeployed
测试函数是否在部署模式下运行,如果是,则将 z
转换为 double
。
function [x,y]=foo(z); if isdeployed z=double(string(z)); end x=2*z y=z^2; disp(y)
使用 MATLAB 文件将数据显示到屏幕上
您无法将独立应用程序的值返回给用户。从编译代码返回值的唯一方法是将其显示在屏幕上或存储在文件中。默认情况下,部署的应用程序将文本输出到标准输出和标准错误流。
为了将数据显示回屏幕,请执行以下操作之一:
例如,创建一个程序,绘制字母表中每个字母在输入字符串中出现的次数的直方图。该函数只有一个输入,没有输出。
function freq(msg) % Remove spaces msg(msg == ' ') = []; % Convert to lower case, and map the letters to numbers. % a=1, b=2, etc. msg = lower(msg) - double('a') + 1; % Map non-letter characters to zero. msg(msg < 1) = 0; msg(msg > 26) = 0; % Display a histogram of the letter frequency in the message. count = hist(msg, 27); bar(0:26, count); labels = char([double('@'), double('a'):double('z')])'; set(gca, 'XTick', 0:26+0.5, 'XTickLabel', labels); axis tight
使用 compiler.build.standaloneApplication
创建独立应用程序。
compiler.build.standaloneApplication('freq.m',Verbose=true);
在 MATLAB 命令行窗口测试该应用程序。
!freq "The quick brown fox jumps over the lazy dog!"
另请参阅
compiler.build.standaloneApplication
| 独立应用程序编译器 | mcc