スタンドアロン アプリケーションおよび引数
コマンド ラインで任意のコンソール ベースのアプリケーションに入力引数を渡す場合と同じ方法で、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 を渡す方法を示します。
system、dos、または 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
pauserunmyapp.bat の最後の 2 行のコードにより、キーが押されるまで、出力を表示しているウィンドウが確実に開いたままになります。
このファイルを保存すると、runmyapp.bat アイコンをダブルクリックすることにより、上記で指定した引数を使用してコードを実行することができます。
MATLAB での入力引数の扱い
既定では、システム プロンプトからスタンドアロン アプリケーションに渡す入力引数は、文字ベクトル入力として受け取られます。文字ベクトルまたは string を入力として受け入れる MATLAB コードは、パッケージ化前に変更する必要はありません。
コードで別の形式のデータ (たとえば double) を想定している場合、次のいずれかまたは両方を行う必要があります。
処理前に文字ベクトル入力を MATLAB コードで必要な形式に変換します。たとえば、
string関数を使用してからdouble関数を使用して、文字ベクトル入力を数値データに変換きます。compiler.build.standaloneApplicationでTreatInputsAsNumericオプション、スタンドアロン アプリケーション コンパイラ アプリで [アプリへのすべての入力を 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 を使用して、関数がデプロイ モードで実行されているかどうかをテストし、そうである場合は z を double に変換します。
function [x,y]=foo(z); if isdeployed z=double(string(z)); end x=2*z y=z^2; disp(y)
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!"
参考
compiler.build.standaloneApplication | スタンドアロン アプリケーション コンパイラ | mcc