exponenta event banner

Копирование внешних данных в формат 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-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);

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

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

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

Считывание внешних данных в данные mxArray

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

Создание и открытие 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  

Связанные темы