主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

独立应用程序和参量

您可以将参量传递给使用 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 的独立应用程序。

使用 systemdosunix

使用 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 代码中所需的格式。例如,您可以使用 string 然后使用 double 函数将字符向量输入转换为数值数据。

  • 使用 TreatInputsAsNumeric 选项与 compiler.build.standaloneApplication将 App 的所有输入都视为 MATLAB 双精度数值选项(在独立应用程序编译器应用程序中)或 mcc -n 标志,创建应用程序,使其自动将数字输入视为 MATLAB 双精度数字。有关封装选项之间差异的详细信息,请参阅选择部署选项

这里有两种方法可以在 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 文件将数据显示到屏幕上

您无法将独立应用程序的值返回给用户。从编译代码返回值的唯一方法是将其显示在屏幕上或存储在文件中。默认情况下,部署的应用程序将文本输出到标准输出和标准错误流。

为了将数据显示回屏幕,请执行以下操作之一:

  • 不要使用分号来抑制产生返回数据的命令。

  • 使用 disp 函数显示变量值,然后在非 Windows® 系统上使用命令行重定向(> 运算符)或管道 (||) 将输出重定向到其他应用程序。

  • 使用 MATLAB 图形(例如 plot 函数)以直观的方式显示数据。运行应用程序时,图形会显示在新窗口中,应用程序将一直运行,直到所有图形都关闭为止。

例如,创建一个程序,绘制字母表中每个字母在输入字符串中出现的次数的直方图。该函数只有一个输入,没有输出。

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!"

A histogram showing the frequency of letters in the string "The quick brown fox jumps over the lazy dog!"

另请参阅

| |

主题