ドキュメンテーション センター

  • 評価版
  • 製品アップデート

目次

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

スタンドアロン プログラムによる外部データの MAT ファイル形式へのコピー

matimport.c 例の概要

このトピックでは、外部ソースのデータを MAT ファイルにコピーするスタンドアロン プログラム、matimport の作成方法について説明します。データ形式はカスタムです。つまり、MATLAB® でサポートされているファイル形式ではありません。

matimport.c の例:

  • 外部データを読み取る変数を作成します。

  • データを mxArray 変数にコピーします。

  • mxArray に変数名を割り当てます。これは、MATLAB ワークスペースで使用する変数名です。

  • mxArray 変数および関連する変数の名前を MAT ファイルに書き込みます。

MATLAB 内のデータを使用するには、以下を実行します。

以降のトピックではこれらの手順について詳しく説明します。コードを表示するには、MATLAB エディターでファイルを開きますファイルを開きます。トピック内の C ステートメントはコードの抜粋で、タスクを示しています。トピックのステートメントは、ソース ファイル内で必ずしも連続してはいません。

外部データの変数の宣言

外部データ値には、文字列と double 型の配列の 2 つがあります。次の表は、この例における変数の関係を示しています。

外部データ外部データを読み取る変数mxArray 変数MATLAB 変数名
double 型の配列extDatapVarNuminputArray
文字列extStringpVarChartitleString

次のステートメントは、変数 extStringextData の型とサイズを宣言します。

#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 ファイル ライブラリでは、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 です。この例では、この値が 33 列の行列にコピーされます。関数 mxCreateDoubleMatrix を使用して、0 に初期化される、2 次元、倍精度、浮動小数点の mxArray を作成します。

pVarNum = mxCreateDoubleMatrix(3,3,mxREAL);

関数 mxCreateString を使用して、extStringmxArray 変数を作成します。

pVarChar = mxCreateString(extString);

MATLAB 変数名の作成

matimport.c を使用して、変数名 inputArray および titleStringmxArray データに割り当てます。これらの名前は MATLAB ワークスペースで使用します。詳細は、「MAT ファイルの内容の表示」を参照してください。

const char *myDouble = "inputArray";
const char *myString = "titleString";

mxArray データへの外部データの読み取り

外部ソースのデータを各 mxArray にコピーします。

関数 C memcpy はメモリ ブロックをコピーします。この関数には、変数 extData および pVarNum へのポインターが必要です。extData へのポインターは (void *)extData です。pVarNum へのポインターを取得するには、MX 行列ライブラリの関数 mxGet* のいずれかを使用します。データには double 型の実数値のみが含まれているので、この例では関数 mxGetPr を使用します。

memcpy((void *)(mxGetPr(pVarNum)), (void *)extData, sizeof(extData));

次のステートメントは、extString の内容を使用して変数 pVarChar を初期化します。

pVarChar = mxCreateString(extString);

これで、変数 pVarNumpVarChar に外部データが含まれました。

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);

アプリケーションのビルド

アプリケーションをビルドするには、適切な MAT オプション ファイルと共に関数 mex を使用します。詳細は、「MAT ファイル プログラムのコンパイルおよびリンク」を参照してください。

たとえば、Microsoft® Visual C++® Version 8.0 コンパイラを使用するには、「Windows プラットフォームにおけるコンパイラの選択」の説明に従って選択します。このコンパイラのオプション ファイルは、msvc80engmatopts.bat です。次の MATLAB コマンドを使用して、matimport をビルドします。

% Create full path name for options file
optionsfile = fullfile(matlabroot, ...
  'bin', 'win32', 'mexopts', 'msvc80engmatopts.bat');
mex('-v', '-f', optionsfile, 'matimport.c')

MAT ファイルの作成

matimport を実行して、ファイル matimport.mat を作成します。システム コマンド プロンプトからプログラムを呼び出すか、または MATLAB コマンド プロンプトで以下を入力します。

!matimport

MATLAB へのデータのインポート

matimport.mat ファイルは、互換性のある MATLAB バージョンで読み取り可能です。MATLAB を起動し、load コマンドを使用して、データをワークスペースにインポートします。

load matimport.mat

変数を表示するには、「whos」と入力します。MATLAB に以下のように表示されます。

  Name             Size            Bytes  Class

  inputArray       3x3                72  double
  titleString      1x43               86  char  
この情報は役に立ちましたか?