mxGetFieldNumber (C および Fortran)
構造体配列内のフィールド番号 (フィールド名を指定)
C 構文
#include "matrix.h" int mxGetFieldNumber(const mxArray *pm, const char *fieldname);
Fortran 構文
#include "fintrf.h" integer*4 mxGetFieldNumber(pm, fieldname) mwPointer pm character*(*) fieldname
引数
pm構造体
mxArrayへのポインターfieldname構造体
mxArray内のフィールドの名前
戻り値
成功した場合、指定された fieldname のフィールド番号。C では、最初のフィールドは 0 のフィールド数をもち、2 番目のフィールドは 1 のフィールド数をもちます (以下同様)。Fortan では、最初のフィールドは 1 のフィールド数をもち、2 番目のフィールドは 2 のフィールド数をもちます (以下同様)。失敗した場合は C では -1 (Fortran では 0) を返します。よくある失敗の原因には、以下があります。
構造体
mxArrayを指していない配列ポインターpmを指定している。mxIsStructを呼び出して、pmが構造体mxArrayを指しているかどうかを判断します。存在しないフィールドの
fieldnameを指定している。
説明
フィールドの名前がわかっていても、そのフィールド番号がわからない場合は、mxGetFieldNumber を呼び出します。反対に、フィールド番号がわかっていても、そのフィールド名がわからない場合は、mxGetFieldNameByNumber を呼び出します。
たとえば、次のように初期化される MATLAB® 構造体を考えます。
patient.name = 'John Doe'; patient.billing = 127.00; patient.test = [79 75 73; 180 178 177.5; 220 210 205];
C では、name フィールドは 0 のフィールド番号、billing フィールドは 1 のフィールド番号、test フィールドは 2 のフィールド番号をもっています。mxGetFieldNumber を呼び出して、name、billing、または test 以外のフィールド名を指定すると、mxGetFieldNumber は -1 を返します。
1 行 1 列の構造体がある場合、以下を呼び出すことは、
mxGetField(pa, index, "field_name");
以下を呼び出すことと等価です。
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
ここで index は 0 です。
Fortan では、name フィールドは 1 のフィールド番号、billing フィールドは 2 のフィールド番号、test フィールドは 3 のフィールド番号をもっています。mxGetFieldNumber を呼び出して、name、billing、または test 以外のフィールド名を指定すると、mxGetFieldNumber は 0 を返します。
1 行 1 列の構造体がある場合、以下を呼び出すことは、
mxGetField(pm, index, 'fieldname');
以下を呼び出すことと等価です。
fieldnum = mxGetFieldNumber(pm, 'fieldname'); mxGetFieldByNumber(pm, index, fieldnum);
ここで index は 1 です。
例
例を開くには、次のように入力します。
edit([fullfile(matlabroot,"extern","examples","mx","filename")]);
ここで filename は、次のようになります。
参考
mxGetField, mxGetFieldByNumber, mxGetFieldNameByNumber, mxGetNumberOfFields, mxIsStruct, mxSetField, mxSetFieldByNumber
バージョン履歴
R2006a より前に導入