Полевой номер из массива структур, учитывая имя поля
#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