📄 matdgns.c
字号:
//matdgns.c
#include <stdio.h>
#include <stdlib.h>
#include "mat.h" //MAT API的头文件
int diagnose(const char *file)
{
MATFile *pmat;
char **dir;
const char *name;
int ndir;
int i;
mxArray *pa;
printf("Reading file %s...\n\n", file);
//打开MAT文件
pmat = matOpen(file, "r");
if (pmat == NULL)
{
printf("Error opening file %s\n", file);
return(1);
}
//得到当前MAT文件的变量目录并显示
dir = matGetDir(pmat, &ndir);
if (dir == NULL)
{
printf("Error reading directory of file %s\n", file);
return(1);
}
else
{
printf("Directory of %s:\n", file);
for (i=0; i < ndir; i++)
printf("%s\n",dir[i]);
}
mxFree(dir);
if (matClose(pmat) != 0)
{
printf("Error closing file %s\n",file);
return(1);
}
//重新打开MAT文件
pmat = matOpen(file, "r");
if (pmat == NULL)
{
printf("Error reopening file %s\n", file);
return(1);
}
//获取每个变量的变量头信息
printf("\nExamining the header for each variable:\n");
for (i=0; i < ndir; i++)
{
pa = matGetNextVariableInfo(pmat, &name);
if (pa == NULL)
{
printf("Error reading in file %s\n", file);
return(1);
}
//分析变量头,获得矩阵的维数
printf("According to its header, array %s has %d dimensions\n",
name, mxGetNumberOfDimensions(pa));
//分析变量是否存在于Matlab的全局工作区间
if (mxIsFromGlobalWS(pa))
printf(" and was a global variable when saved\n");
else
printf(" and was a local variable when saved\n");
mxDestroyArray(pa);
}
// 打开后重新关闭MAT文件
if (matClose(pmat) != 0)
{
printf("Error closing file %s\n",file);
return(1);
}
pmat = matOpen(file, "r");
if (pmat == NULL)
{
printf("Error reopening file %s\n", file);
return(1);
}
//通过matGetNextVariable获得矩阵变量的值
printf("\nReading in the actual array contents:\n");
for (i=0; i<ndir; i++)
{
pa = matGetNextVariable(pmat, &name);
if (pa == NULL) {
printf("Error reading in file %s\n", file);
return(1);
}
//分析矩阵数据,判断矩阵的维数以及变量类型
printf("According to its contents, array %s has %d dimensions\n",
name, mxGetNumberOfDimensions(pa));
if (mxIsFromGlobalWS(pa))
printf(" and was a global variable when saved\n");
else
printf(" and was a local variable when saved\n");
mxDestroyArray(pa);
}
if (matClose(pmat) != 0)
{
printf("Error closing file %s\n",file);
return(1);
}
printf("Done\n");
return(0);
}
int main(int argc, char **argv)
{
int result;
//假设要打开的MAT文件名为mattest.mat,并已在当前工作区目录中
const char*file="mattest.mat";
result=diagnose(file);
return (result==0)?EXIT_SUCCESS:EXIT_FAILURE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -