mxGetFieldByNumber (C および Fortran)
構造体配列からフィールド値へのポインター (インデックスおよびフィールド番号を指定)
C 構文
#include "matrix.h" mxArray *mxGetFieldByNumber(const mxArray *pm, mwIndex index, int fieldnumber);
Fortran 構文
#include "fintrf.h" mwPointer mxGetFieldByNumber(pm, index, fieldnumber) mwPointer pm mwIndex index integer*4 fieldnumber
引数
pm構造体
mxArrayへのポインターindex目的の要素のインデックス。
C では、
mxArrayの最初の要素は0のindexをもっています。最後の要素のindexはN-1です。ここで、Nは配列内の要素の数です。Fortran では、mxArrayの最初の要素のindexは1です。最後の要素のindexはNです。ここで、Nは配列内の要素の数です。indexの計算の詳細については、mxCalcSingleSubscriptを参照してください。fieldnumber抽出する値をもつフィールドの位置。
C では、各要素内の最初のフィールドは
0のフィールド数をもち、2 番目のフィールドは1のフィールド数をもちます (以下同様)。最後のフィールドのフィールド番号はN-1になります。ここで、Nはフィールドの数です。Fortan では、各要素内の最初のフィールドは
1のフィールド数をもち、2 番目のフィールドは2のフィールド数をもちます (以下同様)。最後のフィールドのフィールド番号はNになります。ここで、Nはフィールドの数です。
戻り値
成功した場合、目的の要素に対する指定されたフィールドの mxArray へのポインター。無効な引数が渡されたか、指定されたフィールドに値が割り当てられていない場合、C では NULL (Fortran では 0) を返します。よくある失敗の原因には、以下があります。
構造体
mxArrayを指していない配列ポインターpmを指定している。mxIsStructを呼び出して、pmが構造体mxArrayを指しているかどうかを判断します。indexをmxArrayの範囲外の要素に指定している。たとえば、10 個の要素をもつ構造体mxArrayがある場合、C では9(Fortran では10) より大きいindexを指定することはできません。存在しないフィールド番号を指定している。
mxGetFieldNumberを呼び出して、任意のフィールド名に対応するフィールド番号を判断します。
説明
mxGetFieldByNumber を呼び出して、インデックスの示す要素にある、指定された fieldnumber に格納されている値を取得します。
関数 mxGetFieldByNumber によって返された mxArray では、mxDestroyArray を呼び出さないでください。
メモ
MEX ファイルへの入力値は、読み取り専用の定数 mxArray です。入力値を変更しないでください。関数 mxSetCell* または関数 mxSetField* を使用して MATLAB® 引数のセルまたはフィールドを変更すると、予期しない結果が生じます。
C では、1 行 1 列の構造体がある場合、以下を呼び出すことは、
mxGetField(pa, index, "field_name");
以下を呼び出すことと等価です。
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
ここで index は 0 です。
Fortran では、1 行 1 列の構造体がある場合、以下を呼び出すことは、
mxGetField(pm, index, 'fieldname')
以下を呼び出すことと等価です。
fieldnum = mxGetFieldNumber(pm, 'fieldname') mxGetFieldByNumber(pm, index, fieldnum)
ここで index は 1 です。
例
例を開くには、次のように入力します。
edit([fullfile(matlabroot,"extern","examples","refbook","filename")]);
ここで filename は、次のようになります。
例を開くには、次のように入力します。
edit([fullfile(matlabroot,"extern","examples","mx","filename")]);
ここで filename は、次のようになります。
例を開くには、次のように入力します。
edit([fullfile(matlabroot,"extern","examples","mex","filename")]);
ここで filename は、次のようになります。
参考
mxGetField, mxGetFieldNameByNumber, mxGetFieldNumber, mxGetNumberOfFields, mxIsStruct, mxSetField, mxSetFieldByNumber
バージョン履歴
R2006a より前に導入