Копирование внешних данных в формат MAT-файла с автономными программами

Обзор matimport.c Примера

Эта тема показывает, как создать автономную программу, matimport, чтобы скопировать данные из внешнего источника в MAT-файл. Формат данных является пользовательским, то есть, это не одни из форматов файлов, поддержанных MATLAB®.

Пример matimport.c:

  • Создает переменные, чтобы считать внешние данные.

  • Копирует данные в переменные mxArray.

  • Присваивает имя переменной каждому mxArray. Используйте эти имена переменных в рабочем пространстве MATLAB.

  • Пишут переменные mxArray и сопоставленные имена переменных к MAT-файлу.

Использовать данные в MATLAB:

Следующие темы описывают эти шаги подробно. Чтобы видеть код, откройте файл в редакторе MATLAB. Операторы C в этих темах являются фрагментами кода, которые, как показывают, проиллюстрировали задачу. Операторы в темах не обязательно последовательны в исходном файле.

Объявление переменных для внешних данных

Существует два внешних значения данных, строка и массив типа double. Следующая таблица показывает отношение между переменными в этом примере.

Внешние данныеПеременная, чтобы считать внешние данныеПеременная mxArrayИмя переменной MATLAB
Массив типа doubleextDatapVarNuminputArray
СтрокаextStringpVarChartitleString

Следующие операторы объявляют тип и размер для переменных 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 };

Создание mxArray Переменных

Функции в 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);

Создание имен переменной MATLAB

matimport.c присваивает имена переменных inputArray и titleString к данным mxArray. Используйте эти имена в рабочем пространстве MATLAB. Для получения дополнительной информации, Содержимое вида на море MAT-файла.

const char *myDouble = "inputArray";
const char *myString = "titleString";

Чтение Внешних Данных в mxArray Данные

Скопируйте данные из внешнего источника в каждый 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 теперь содержат внешние данные.

Создание и открытие MAT-файла

Функция matOpen создает указатель на файл типа MATFile. Следующие операторы создают указатель файла pmat, называют файл matimport.mat и открывают его для записи.

	MATFile *pmat;
	const char *myFile = "matimport.mat";
	pmat = matOpen(myFile, "w");

Запись mxArray Данных в Файл

Функция 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

Создание MAT-файла

Запустите matimport, чтобы создать файл matimport.mat. Или вызовите программу от системной командной строки, или в подсказке команды MATLAB, введите:

!matimport

Импортирование данных в MATLAB

Любой пользователь с совместимой версией MATLAB может считать файл matimport.mat. Запустите MATLAB и используйте команду load, чтобы импортировать данные в рабочую область.

load matimport.mat

Чтобы отобразить переменные, введите:

whos
  Name             Size            Bytes  Class

  inputArray       3x3                72  double
  titleString      1x43               86  char  

Похожие темы