В этом разделе показано, как создать автономную программу. matimport, для копирования данных из внешнего источника в MAT-файл. Формат данных является пользовательским, то есть не является одним из форматов файлов, поддерживаемых MATLAB ®.
matimport.c пример:
Создает переменные для чтения внешних данных.
Копирование данных в mxArray переменные.
Присваивает имя переменной каждому mxArray. Используйте эти имена переменных в рабочей области MATLAB.
Пишет mxArray переменные и связанные имена переменных в MAT-файле.
Для использования данных в MATLAB:
Создание автономной программы matimport.
Управляемый matimport для создания файла MAT matimport.mat.
Откройте MATLAB.
Используйте один из методов, описанных в разделе Сохранить и загрузить переменные рабочей области.
Эти шаги подробно описаны в следующих разделах. Для просмотра кода откройте файл в редакторе MATLAB. Инструкции C в этих разделах представляют собой фрагменты кода, показанные для иллюстрации задачи. Инструкции в разделах не обязательно являются последовательными в исходном файле.
Существует два внешних значения данных: строка и массив типа double. В следующей таблице показана взаимосвязь между переменными в этом примере.
| Внешние данные | Переменная для чтения внешних данных | Переменная mxArray | Имя переменной MATLAB |
|---|---|---|---|
Массив типа double | extData | pVarNum | inputArray
|
| Последовательность | extString | pVarChar | titleString |
Следующие инструкции объявляют тип и размер переменных extString и extData.
#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 };
Функции API MAT-File используют указатели типа mxArray для ссылки на данные MATLAB. Эти заявления объявляются pVarNum и pVarChar как указатели на массив любого размера или типа.
/*Pointer to the mxArray to read variable extData */ mxArray *pVarNum; /*Pointer to the mxArray to read variable extString */ mxArray *pVarChar;
Чтобы создать переменную соответствующего размера и типа, выберите одну из следующих опций: mxCreate* функции из библиотеки матриц MX.
Размер extData является 9, который пример копирует в 3около-3 матрица. Используйте mxCreateDoubleMatrix функция для создания двумерной плавающей точки с двойной точностью mxArray инициализировано в 0.
pVarNum = mxCreateDoubleMatrix(3,3,mxREAL);
Используйте mxCreateString для создания функции mxArray переменная для extString.
pVarChar = mxCreateString(extString);
matimport.c присваивает имена переменных inputArray и titleString в mxArray данные. Используйте эти имена в рабочей области MATLAB. Дополнительные сведения см. в разделе Просмотр содержимого MAT-файла.
const char *myDouble = "inputArray"; const char *myString = "titleString";
Копирование данных из внешнего источника в каждый mxArray.
C memcpy функция копирует блоки памяти. Эта функция требует указателей на переменные extData и pVarNum. Указатель на extData является (void *)extData. Чтобы получить указатель на pVarNum, используйте один из mxGet* функции из API-интерфейса Matrix. Поскольку данные содержат только реальные значения типа double, в этом примере используется mxGetPr функция.
memcpy((void *)(mxGetPr(pVarNum)), (void *)extData, sizeof(extData));
Следующая инструкция инициализирует pVarChar переменная с содержимым extString.
pVarChar = mxCreateString(extString);
Переменные pVarNum и pVarChar теперь содержат внешние данные.
matOpen функция создает дескриптор для файла типа MATFile. Следующие инструкции создают указатель на файл pmat, назовите файл matimport.matи открыть его для написания.
MATFile *pmat; const char *myFile = "matimport.mat"; pmat = matOpen(myFile, "w");
matPutVariable функция записывает mxArray и имя переменной в файле.
status = matPutVariable(pmat, myDouble, pVarNum); status = matPutVariable(pmat, myString, pVarChar);
Чтобы закрыть файл:
matClose(pmat);
Чтобы освободить память:
mxDestroyArray(pVarNum); mxDestroyArray(pVarChar);
Для создания приложения используйте mex функции с помощью -client engine вариант.
copyfile(fullfile(matlabroot,'extern','examples','eng_mat',matimport.c'),'.','f') mex -v -client engine matimport.c
Управляемый matimport для создания файла matimport.mat. Вызовите программу из командной строки системы или в командной строке MATLAB введите:
!matimportЛюбой пользователь с совместимой версией MATLAB может прочитать matimport.mat файл. Запустите MATLAB и используйте load для импорта данных в рабочую область.
load matimport.matДля отображения переменных введите:
whos
Name Size Bytes Class inputArray 3x3 72 double titleString 1x43 86 char