Полевой номер из массива структур, учитывая имя поля
#include "matrix.h" int mxGetFieldNumber(const mxArray *pm, const char *fieldname);
#include "fintrf.h" integer*4 mxGetFieldNumber(pm, fieldname) mwPointer pm character*(*) fieldname
\pm
Указатель на структуру mxArray
fieldname
Имя поля в структуре mxArray
Полевое количество заданного fieldname
, на успехе. В C первое поле имеет полевое количество 0
, второе поле имеет полевое количество 1
и так далее. На Фортране первое поле имеет полевое количество 1
, второе поле имеет полевое количество 2
и так далее. Возвращает -1
в C (0
на Фортране) на отказе. Частые причины отказа включают
Определение указателя массивов pm
, который не указывает на структуру mxArray
. Вызовите 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
-by-1
структура, то вызов:
mxGetField(pa, index, "field_name");
эквивалентно вызову:
field_num = mxGetFieldNumber(pa, "field_name"); mxGetFieldByNumber(pa, index, field_num);
где index
является 0
.
На Фортране поле name
имеет полевое количество 1
; поле billing
имеет полевое количество 2
; и поле test
имеет полевое количество 3
. Если вы вызываете mxGetFieldNumber
и задаете имя поля чего-нибудь кроме name
, billing
или test
, mxGetFieldNumber
возвращает 0
.
Если у вас есть 1
-by-1
структура, то вызов:
mxGetField(pm, index, 'fieldname');
эквивалентно вызову:
fieldnum = mxGetFieldNumber(pm, 'fieldname'); mxGetFieldByNumber(pm, index, fieldnum);
где index
является 1
.
mxGetField
, mxGetFieldByNumber
, mxGetFieldNameByNumber
, mxGetNumberOfFields
, mxIsStruct
, mxSetField
, mxSetFieldByNumber