Эта тема показывает, как создать автономную программу, matimport
, чтобы скопировать данные с внешнего источника в MAT-файл. Формат данных является пользовательским, то есть, это не одни из форматов файлов, поддержанных MATLAB®.
matimport.c
c пример:
Создает переменные, чтобы считать внешние данные.
Копирует данные в переменные mxArray
.
Присваивает имя переменной каждому mxArray
. Используйте эти имена переменных в MATLAB workspace.
Пишут переменные 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-файла используют указатели типа 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 workspace. Для получения дополнительной информации смотрите Содержимое Представления MAT-файла.
const char *myDouble = "inputArray"; const char *myString = "titleString";
Скопируйте данные с внешнего источника в каждый mxArray
.
Функция memcpy
C копирует блоки памяти. Эта функция требует указателей на переменные extData
и pVarNum
. Указателем на extData
является (void *)extData
. Чтобы получить указатель на pVarNum
, используйте один из mxGet
* функции из MX Matrix Library. Поскольку данные содержат только действительные значения типа 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
matfile. Запустите MATLAB и используйте команду load
, чтобы импортировать данные в рабочую область.
load matimport.mat
Чтобы отобразить переменные, введите:
whos
Name Size Bytes Class inputArray 3x3 72 double titleString 1x43 86 char