MAT文件格式如图4-1所示,包括文件头和数据。其中文件头(VariableInfo)部分主要包括文件描述、版本号及标识等,共占128字节;文件数据(Variable)包括数据类型、数据长度和数据三部分。因此,对MAT文件读取,可相应地分为两种,一是读取mxArray变量的头部信息和变量数据;二是仅读取mxArray变量的头部信息(表4-1)。
图4-1 MAT文件存储格式
表4-1 C-MAT函数
| 序号 | MAT函数 | 功 能 |
|---|---|---|
| 1 | matOpen | 打开一个MAT文件 |
| 2 | matClose | 关闭一个MAT文件 |
| 3 | matGetDir | 从MAT文件中获取mxArray矩阵列表 |
| 4 | matGetFp | 获取一个ANSI C文件指针给MAT文件 |
| 5 | matGetVariable | 从MAT文件中装载mxArray矩阵 |
| 6 | matGetVariableInfo | 从MAT文件中仅装载mxArray矩阵的头部信息 |
| 7 | matDeleteVariable | 从MAT文件中删除一个mxArray矩阵 |
| 8 | matGetNextVariable | 从MAT文件中装载下一个mxArray矩阵 |
| 9 | matGetNextVariableInfo | 从MAT文件中仅装载下一个mxArray矩阵的头部信息 |
| 10 | matPutVariable | 将一个mxArray矩阵写入MAT文件 |
| 11 | matPutVariableAsGlobal | 将mxArray矩阵作为全局空间的变量写入MAT文件 |
(1) matOpen
MATFile *matOpen(const char *filename, const char *mode);
参数:filename 欲打开的MAT文件名;
mode 欲打开MAT文件的读写模式(表4-2)
表4-2 MAT文件主要打开模式
| 参数(mode) | 说 明 |
|---|---|
| R | Read模式,即只读模式 |
| W | Write模式,即只写模式 |
| U | Update模式,即可读取、写入模式 |
| WZ | Write&Zip模式,即压缩数据格式写入模式 |
返回:操作成功返回一个指向MAT文件的指针,否则,返回NULL。
(2) matClose
int matClose(MATFile *mfp);
参数:mfp 指向MATFile文件的指针。
返回:操作成功返回0,否则,返回EOF。
(3) matGetDir
char **matGetDir(MATFile *mfp, int *num);
参数:mfp 指向MATFile文件的指针;
num mxArray矩阵在MAT文件中的地址。
返回:操作成功,返回mxArray在MAT文件中的地址,并将mxArray长度值赋给num;若MAT文件中无mxArray,返回0;操作失败,返回NULL,num被赋为负值。
(4) matGetFp
FILE *matGetFp(MATFile *mfp);
参数:mfp 指向MATFile文件的指针。
返回:操作成功,返回一个FILE类型的指向MAT文件的指针;否则,返回NULL。
(5) matGetVariable
mxArray *matGetVariable(MATFile *mfp, const char *name);
参数:mfp 指向MATFile文件的指针;
name 从MAT文件中取出的mxArray变量名。
返回:操作成功,将MAT文件中的mxArray变量拷贝出并赋给分配地址的变量,该变量地址指针即为函数返回值;否则,返回NULL。
(6) matGetVariableInfo
mxArray *matGetVariableInfo(MATFile *mfp, const char *name);
参数:mfp 指向MATFile文件的指针;
name 从MAT文件中取出的mxArray变量名。
说明:仅读取MAT文件中mxArray变量的头部信息。
(7) matDeleteVariable
int matDeleteVariable(MATFile *mfp, const char *name);
参数:mfp 指向MATFile文件的指针;
name 从MAT文件中删除的mxArray变量名。
返回:操作成功,返回0;否则,返回非0值。
(8) matGetNextVariable
mxArray *matGetNextVariable(MATFile *mfp, const char *name);
参数:mfp 指向MATFile文件的指针;
name 从MAT文件中取出的mxArray变量名。
返回:操作成功,将MAT文件中的mxArray变量拷贝出并赋给分配地址的变量,该变量地址指针即为函数返回值;否则,返回NULL。
说明:与matGetVariable()函数不一样的是,matGetNextVariable允许用户将MAT文件中的mxArray变量逐个读出。
(9) matGetNextVariableInfo
mxArray *matGetNextVariableInfo(MATFile *mfp, const char *name);
参数:mfp 指向MATFile文件的指针;
name 从MAT文件中取出的mxArray变量名。
说明:将MAT文件中mxArray变量的头部信息逐个读出。
(10) matPutVariable
int matPutVariable(MATFile *mfp, const char *name, const mxArray *mp);
参数:mfp 指向MATFile文件的指针;
name 写入MAT文件的mxArray变量名;
mp 写入MAT文件的mxArray变量指针。
返回:操作成功,返回0;否则,返回非0值。
说明:若MAT文件中不存在name,将mp追加于mat文件尾;若name已存在于MAT文件中,则将其覆盖。
(11) matPutVariableAsGlobal
int matPutVariableAsGlobal(MATFile *mfp, const char *name, const mxArray *mp);
参数:mfp 指向MATFile文件的指针;
name 写入MAT文件的mxArray变量名;
mp 写入MAT文件的mxArray变量指针。
返回:操作成功,返回0;否则,返回非0值。
说明:与matPutVariable()函数不同的时,matPutVariableAsGlobal()将mxArray变量作为全局空间的变量写入MAT文件,当加载该变量时,也被当作全局空间中的变量加载。