メインコンテンツ

スタンドアロン アプリケーションおよび引数

コマンド ラインで任意のコンソール ベースのアプリケーションに入力引数を渡す場合と同じ方法で、MATLAB® Compiler™ を使用して作成されたスタンドアロン アプリケーションに引数を渡すことができます。アプリケーション名に続けて、スペースで区切った 1 つ以上の入力引数を入力します。

スタンドアロン アプリケーションを実行すると、メイン プログラムから "main" 関数 (アプリケーションの作成時に最初にリストした関数) にすべてのコマンド ライン引数が渡されます。

アプリケーションへのコマンド ライン引数の引き渡し

ファイル、数値または文字、行列、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 変数を入力としてプログラムに渡すには、変数を文字ベクトルまたは string に変換しなければなりません。

スタンドアロン アプリケーションは MATLAB から呼び出すこともできます。以下の例では、MATLAB コマンド ウィンドウで myapp という名前のスタンドアロン アプリケーションに数値と文字 1 2 3 a b c を渡す方法を示します。

systemdos、または unix の使用

system コマンドを使用して、コマンド全体を文字ベクトル (入力引数を含む) として指定します。

system('myapp 1 2 3 a b c')

! (感嘆符) 演算子の使用

MATLAB 内から ! (感嘆符) 演算子を使用します。

!myapp 1 2 3 a b c

! (感嘆符) 演算子を使用する場合、入力行の残りは 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 の最後の 2 行のコードにより、キーが押されるまで、出力を表示しているウィンドウが確実に開いたままになります。

このファイルを保存すると、runmyapp.bat アイコンをダブルクリックすることにより、上記で指定した引数を使用してコードを実行することができます。

MATLAB での入力引数の扱い

既定では、システム プロンプトからスタンドアロン アプリケーションに渡す入力引数は、文字ベクトル入力として受け取られます。文字ベクトルまたは string を入力として受け入れる MATLAB コードは、パッケージ化前に変更する必要はありません。

コードで別の形式のデータ (たとえば double) を想定している場合、次のいずれかまたは両方を行う必要があります。

  • 処理前に文字ベクトル入力を MATLAB コードで必要な形式に変換します。たとえば、string 関数を使用してから double 関数を使用して、文字ベクトル入力を数値データに変換きます。

  • compiler.build.standaloneApplicationTreatInputsAsNumeric オプション、スタンドアロン アプリケーション コンパイラ アプリで [アプリへのすべての入力を MATLAB の double の数値として扱います] オプション、または mcc -n フラグを使用して、数値入力を自動的に MATLAB の double として扱う動作をもつアプリケーションを作成します。パッケージ化オプションの違いの詳細については、デプロイ オプションの選択を参照してください。

MATLAB コードで入力引数を文字ベクトルに変換する 2 つの方法を次に示します。

方法 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 を使用して、関数がデプロイ モードで実行されているかどうかをテストし、そうである場合は zdouble に変換します。

function [x,y]=foo(z);

if isdeployed
    z=double(string(z));
end
x=2*z
y=z^2;
disp(y)

MATLAB ファイルを使用した画面へのデータの表示

スタンドアロン アプリケーションからユーザーに値を返すことはできません。コンパイルされたコードから値を返す唯一の方法は画面に表示するか、ファイルに保存するかのどちらかです。既定では、デプロイされたアプリケーションは、標準出力および標準エラー ストリームにテキストを出力します。

データを画面に表示するには、以下のいずれかの手順に従います。

  • セミコロンを使用しないことで、戻り値を出力するコマンドを抑制する。

  • disp 関数を使用して変数値を表示し、次に、Windows® 以外のシステムでコマンド ライン リダイレクト (> 演算子) またはパイプ (||) を使用して、出力を他のアプリケーションにリダイレクトする。

  • plot 関数など、MATLAB グラフィックスを使用してデータを視覚的に表示する。アプリケーションを実行すると新しいウィンドウにグラフィックスが表示され、すべてのグラフィックスが閉じるまでアプリケーションが実行されます。

たとえば、入力 string におけるアルファベットの各文字の出現回数のヒストグラムをプロットするプログラムを作成します。関数は単一の入力を受け取り、出力はゼロです。

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

参考

| |

トピック