スタンドアロン プログラムによる外部データの MAT ファイル形式へのコピー
matimport.c 例の概要
このトピックでは、外部ソースのデータを MAT ファイルにコピーするスタンドアロン プログラム、matimport
の作成方法について説明します。データ形式はカスタムです。つまり、MATLAB® でサポートされているファイル形式ではありません。
matimport.c
の例:
外部データを読み取る変数を作成します。
データを
mxArray
変数にコピーします。各
mxArray
に変数名を代入します。これらの変数名は MATLAB ワークスペースで使用します。mxArray
変数および関連する変数の名前を MAT ファイルに書き込みます。
MATLAB 内のデータを使用するには、以下を実行します。
スタンドアロン プログラム
matimport
をビルドします。matimport
を実行して、MAT ファイルmatimport.mat
を作成します。MATLAB を開きます。
ワークスペース変数の保存と読み込みに記載されている手法の 1 つを使用します。
以降のトピックではこれらの手順について詳しく説明します。コードを表示するには、MATLAB エディターでファイルを開きます。トピック内の C ステートメントはコード スニペットで、タスクを示しています。トピックのステートメントは、ソース ファイル内で必ずしも連続してはいません。
外部データの変数の宣言
外部データ値には、文字列と double
型の配列の 2 つがあります。次の表は、この例における変数の関係を示しています。
外部データ | 外部データを読み取る変数 | mxArray 変数 | MATLAB 変数名 |
---|---|---|---|
double 型の配列 | extData | pVarNum | inputArray |
文字列 | extString | pVarChar | titleString |
次のステートメントは、変数 extString
と extData
の型とサイズを宣言します。
#define BUFSIZE 256 char extString[BUFSIZE]; double extData[9];
これらの変数を使用して、製品で使用可能なファイルやサブルーチンから値を読み取ります。この例では、初期化を使用して外部データを作成します。
const char *extString = "Data from External Device"; double extData[9] = { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 };
mxArray 変数の作成
MAT ファイル API の関数は、mxArray
型のポインターを使用して MATLAB データを参照します。次のステートメントは、任意のサイズまたは型の配列へのポインターとして pVarNum
および pVarChar
を宣言します。
/*Pointer to the mxArray to read variable extData */ mxArray *pVarNum; /*Pointer to the mxArray to read variable extString */ mxArray *pVarChar;
適切なサイズおよび型の変数を作成するには、MX 行列ライブラリから関数 mxCreate
* のいずれかを選択します。
extData
のサイズは 9
です。この例では、この値が 3
行 3
列の行列にコピーされます。関数 mxCreateDoubleMatrix
を使用して、0 に初期化される、2 次元、倍精度、浮動小数点の mxArray
を作成します。
pVarNum = mxCreateDoubleMatrix(3,3,mxREAL);
関数 mxCreateString
を使用して、extString
の変数 mxArray
を作成します。
pVarChar = mxCreateString(extString);
MATLAB 変数名の作成
matimport.c
を使用して、変数名 inputArray
および titleString
を mxArray
データに割り当てます。これらの名前は MATLAB ワークスペースで使用します。詳細については、MAT ファイルの内容の表示を参照してください。
const char *myDouble = "inputArray"; const char *myString = "titleString";
mxArray データへの外部データの読み取り
外部ソースのデータを各 mxArray
にコピーします。
関数 C memcpy
はメモリ ブロックをコピーします。この関数には、変数 extData
および pVarNum
へのポインターが必要です。extData
へのポインターは (void *)extData
です。pVarNum
へのポインターを取得するには、行列 API の関数 mxGet
* のいずれかを使用します。データには double
型の実数値のみが含まれているので、この例では関数 mxGetPr
を使用します。
memcpy((void *)(mxGetPr(pVarNum)), (void *)extData, sizeof(extData));
次のステートメントは、extString
の内容を使用して変数 pVarChar
を初期化します。
pVarChar = mxCreateString(extString);
これで、変数 pVarNum
と pVarChar
に外部データが含まれました。
MAT ファイルの作成とオープン
関数 matOpen
を使用して、MATFile
型のファイルへのハンドルを作成します。次のステートメントでは、ファイル ポインター pmat
を作成し、ファイルに matimport.mat
という名前を付け、開いて次のように記述します。
MATFile *pmat; const char *myFile = "matimport.mat"; pmat = matOpen(myFile, "w");
ファイルへの mxArray データの書き込み
関数 matPutVariable
を使用して、mxArray
と変数名をファイルに書き込みます。
status = matPutVariable(pmat, myDouble, pVarNum); status = matPutVariable(pmat, myString, pVarChar);
クリーン アップ
ファイルを閉じるには、次を実行します。
matClose(pmat);
メモリを解放するには、次を実行します。
mxDestroyArray(pVarNum); mxDestroyArray(pVarChar);
アプリケーションのビルド
アプリケーションをビルドするには、-client engine
オプションを指定して mex
関数を使用します。
copyfile(fullfile(matlabroot,'extern','examples','eng_mat','matimport.c'),'.','f') mex -v -client engine matimport.c
MAT ファイルの作成
matimport
を実行して、ファイル matimport.mat
を作成します。システム コマンド プロンプトからプログラムを呼び出すか、または MATLAB コマンド プロンプトで以下を入力します。
!matimport
MATLAB へのデータのインポート
matimport.mat
ファイルは、互換性のある MATLAB バージョンで読み取り可能です。MATLAB を起動し、load
コマンドを使用して、データをワークスペースにインポートします。
load matimport.mat
変数を表示するには、以下を入力します。
whos
Name Size Bytes Class inputArray 3x3 72 double titleString 1x43 86 char