mat文件格式是matlab文件的特有格式文件,mat文件存储了matlab的包含的多个矩阵的数据信息以及约定的matlab阵列头信息。由于matlab普及程度,将文件保存成mat文件格式可以极大的增加软件的适用性。
以下记录了VC++保存matlab的mat文件的方法:
matlab相关的API函数
MAT 函 数 | 功能 |
matOpen | 打开 MAT 文件 |
matClose | 关闭 MAT 文件 |
matGetDir | 从 MAT 文件中获得 MATLAB 阵列的列表 |
matGetFp | 获得一个指向MAT 文件的ANSI C 文件指针 |
matGetVariable | 从MAT文件中读取MATLAB阵列 |
matPutVariable | 写MATLAB阵列到MAT文件 |
matGetNextVariable | 从MAT文件中读取下一个MATLAB阵列 |
matDeleteVariable | 从MAT文件中删去下一个MATLAB阵列 |
matPutVariableAsGlobal | 从MATLAB阵列写入到MAT文件中 |
matGetVariableInfo | 从MAT文件中读取MATLAB阵列头信息 |
matGetNextVariableInfo | 从MAT文件中读取下一个MATLAB阵列头信息 |
表格中是所用到的主要的MATLAB 的API函数
读取MAT文件
/***************************************************************************************************************************
实现了从mat文件中读取矩阵数据,并且存储在CString变量data中 ***************************************************************************************************************************/ MATFile *pMF = NULL; //mat文件 mxArray *pA = NULL; //矩阵指针 double *A; //数据指针 const char **dir; int ndir; int i,j; int m,n; //开启CFileDialog函数进行文件选取 CFileDialog dlgFileOpen(TRUE,"matlab(*.mat)|*.mat","*.mat",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,"matlab(*.mat)"); CString lpstrFilename; if(dlgFileOpen.DoModal()==IDOK) lpstrFilename = dlgFileOpen.GetPathName(); pMF = matOpen(lpstrFilename,"r"); dir = (const char **)matGetDir(pMF,&ndir); CString str; CString data; //matlab中的矩阵式按列显示的 for (i =0 ;i <ndir;i++) { str.Format("%s",dir[i]); pA = matGetVariable(pMF,str); //从mat文件中获取数据 m = mxGetM(pA); //获取数据的行数 n = mxGetN(pA); //获取数据的列数 A = mxGetPr(pA); //获取矩阵数据地址 for (i=0;i<m;i++) { for (j=0;j<n;j++) data.Format("%f",A[j*m+i]); } } mxFree(dir); mxDestroyArray(pA); matClose(pMF);
保存mat文件
未完待续!