В этой теме показано, как создать автономную программу, matimport
, для копирования данных из внешнего источника в MAT-файл. Формат данных пользовательский, то есть он не является одним из форматов файлов, поддерживаемых MATLAB®.
The 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 };
Функции в MAT-File API используют указатели типа 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 Matrix Library.
Размер extData
является 9
, который пример копирует в 3
-by- 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
* функции из Matrix API. Поскольку данные содержат только вещественные значения типа 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