c语言读取 mat文件的函数,vc对.mat文件的读取
1、选VC的菜单Tools->Options,在弹出对话框中点选Directories标签,在右方的下拉菜单中选择Include files,然后在下方列表中添加($MATLAB$)externinclude;再在右方的
下拉菜单中选择Library files,然后在下方列表中添加($MATLAB$)externlibwin32microsoftmsvc60。
注:上面的($MATLAB$)以计算机中MATLAB的安装位置替换;如果使用的VC版本是5.0,则把列表中添加路径中的msvc60替换成msvc50即可。
2、对于需要操作.mat文件的工程,选择菜单Project->Settings,在弹出对话框中点选Link标签,在Object/library modules中加入 libmx.lib libmat.lib。下面是程序中的调用
,以例子说明用法,必要时候如用到mxArray时候还要加入sgl.lib libmatlbmx.lib。
3、一定要加入 #include "mat.h" ,如果要对mxArray进行操作,加入 #include "matlab.h" 。具体的mfc程序的例子见“e:.....StaticDraw”工程。
**VC中读取MATLAB的.MAT文件
**在VC中要读取MATLAB的.MAT文件是要费点工夫的,下面是详细步骤,以MATLAB7为例.
1. 头文件中写入
#include "mat.h"
和
#pragma comment(lib, "libmat.lib")
#pragma comment(lib,"libmx.lib")
上面这三个文件在MATLAB安装目录下的extern/include和extern/lib目录下。一般来说安装MATLAB后这两个路径会被自动添加到VC的设置中。如果没有,可以在VC的Tools-
>Options->Directories下手工添加。
2. 在MATLAB中定义两个变量
z=999
mat1=[1,2,3,4;
5,6,7,8;
9,10,11,12]
并把其保存成一个MAT文件,使用命令:
save matfile1 z mat1
就生成了一个matfile1.mat文件
3. 先把程序写下来
void CMy5Doc::OnOptmatOpen()
{
// TODO: Add your command handler code here
CFileDialog dlgFileOpen(TRUE);
MATFile *pmatFile=NULL;
mxArray *pMxArray=NULL;
TCHAR lpstrFilename[MAX_PATH]="";
dlgFileOpen.m_ofn.lpstrFile = lpstrFilename;
TCHAR fileFilter[]="MAT文件/0*.MAT/0所有的文件/0*.*/0";
dlgFileOpen.m_ofn.lpstrFilter = fileFilter;
CString msg;
double *dMat1 = new double;
int m,n;
double *dMat2;
if(dlgFileOpen.DoModal()==IDOK)
{
pmatFile = matOpen(dlgFileOpen.GetFileName(),"r");//A
pMxArray = matGetVariable(pmatFile,"z");//B
dMat1 = (double *)mxGetData(pMxArray);//C
msg.Format("%f",*dMat1);
AfxMessageBox(msg);
pMxArray = matGetVariable(pmatFile,"mat1");
m = mxGetM(pMxArray);
n = mxGetN(pMxArray);//D
msg.Format("M:%d,N:%d",m,n);
AfxMessageBox(msg);
dMat2 = new double[m*n];
dMat2 = (double *)mxGetData(pMxArray);
CString strTmp;
msg = "";
for(int i=0;i
{
for(int j=0;j
{
strTmp.Format("%f",dMat2[j*m+i]);//E
msg = msg + strTmp + " ";
}
msg = msg + "/n";
}
AfxMessageBox(msg);
matClose(pmatFile);
mxFree(pMxArray);
mxFree(pmatFile);//F
}
}
4. 下面是程序的说明
A:打开一个MAT文件使用函数matOpen(),其定义为:
MATFile *?matOpen?(const char *filename,const char *mode)
其中mode可以是以下几个:
r:以只读方式打开
u:更新模式,可读可写,但是如果要打开的数据文件不存在,也不会创建新的文件
w:以写入方式打开,只能写如入,如果要打开的数据文件不存在,则创建一个新的文件
B:获得一个MAT文件中的变量,函数matGetVariable()定义为:
mxArray *matGetVariable(MATFile *pMF,const char *name)
由于在MATLAB中所有的变量均看做矩阵,因此返回一个mxArray的指针类型。
C:mxGetData()用于得到矩阵中的具体值,定义为:
void *mxGetData(const mxArray *)
由于返回是void*类型,所以必须强制类型转换为所需要的数据类型。
D:pMxArray = matGetVariable(pmatFile,"mat1");
m = mxGetM(pMxArray);
n = mxGetN(pMxArray);
2,3句用于得到MAT文件中mat1矩阵的行和列,即mat1是一个m×n的矩阵,定义为:
int mxGetM(const mxArray*)
E:由于MATLAB中矩阵是按列存放的,而不是C语言中的按行存放,即存储方式为a[0][0],a[1][0]……a[N][0],a[0][1],a[1][1]……a[N][1],所以在按行显示矩阵的时候必须使用
dMat2[j*m+i]而不是dMat2[i*m+j]。
F:在对文件操作完后,记得要关闭文件,释放资源。使用matClose()可以关闭文件。
c语言读取 mat文件的函数,vc对.mat文件的读取相关推荐
- C语言文件操作函数fwrite导致写入文件的内容乱码的问题解决方案
fwrite() 函数用来向文件中写入块数据,它的原型为: size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp ); 参数说 ...
- c语言exit头文件,exit函数在那个头文件
c语言 exit的头文件是什么? C语言exit函数的头文件是stdlib.h. exit的声明为 void exit(int value); exit的作用是,退出程序,并将参数value的值返回给 ...
- php中文件操作函数,php中常用文件操作函数介绍
小编今天来给php初学者介绍php文件操作的常用函数使用方法总结,包括:文件读写,创建,查看文件属性,文件删除等等关于文件的操作. 在对一个文件进行访问之前,一般我们都需要判断文件是否存在,以免调用了 ...
- linux 文件操作函数,Linux下的文件操作函数及creat用法
编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...
- php打开文件读写函数,php中常用文件操作读写函数介绍
本文章介绍了下面几个常用的文件操作函数 file_get_contents 读取整个文件内容 fopen 创建和打开文件 fclose 关闭文件 fgets 读取文件一行内容 file_exists ...
- python文件操作函数_python基础之文件操作,集合,函数
文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...
- php文件调用函数,关于PHP操作文件的基本函数的使用
这篇文章主要介绍了PHP操作文件的一些基本函数使用示例,本文给出了复制文件.删除文件.重命名文件.截取文件等操作代码实例,需要的朋友可以参考下 在对文件进行操作时,不仅可以对文件中的数据进行操作,还可 ...
- c语言 fscanf的头文件,fscanf函数在哪个头文件中
SizeOf Pascal的一种内存容量度量函数: 用法: Var a : array[1..10000] of longint; Begin Writeln(SizeOf(a)); End. 输出: ...
- C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.
一.打开关闭文件 只打开文件 再关闭文件 #include <stdio.h> #include<stdlib.h> main() {FILE *fp;fp = fopen ...
最新文章
- BasicModal - 简单易用的现代 Web App 弹窗
- Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture
- irobot擦地机器人故障_iRobot怎么就那么香?用过擦地机器人之后,我服了
- scihub只能用doi查吗_同步带轮齿形加工只能用滚齿机吗?
- linux echo 怎么输出换行符到文件?(echo -e)
- java1002java,疯狂java学习笔记1002---抽象类及接口
- “温室里的花朵”也要直面困难
- DotNet程序员是不是最不幸福?
- postman跨域测试_安装使用Hoppscotch构建API请求访问与测试
- 7-169 龟兔赛跑 (20 分)
- Android 首次开机优化
- 基本积分表的联想记忆
- usb3.0速度测试软件,USB3.0传输速度测试 揭秘速度到底是多少
- 从 Web2 社交面临的挑战看,Web3 为何能够取而代之
- 如何将DVD的vob视频格式转换成mp4格式
- 服务器被劫持怎么修复不了,电脑DNS被劫持怎么修复?电脑dns被劫持的完美解决方法...
- Opencv实战 文字区域的提取
- 血泪史: k8s Initial timeout of 40s passed.
- 超级应用 - 免费应用内测托管平台|APP应用分发平台|iOS应用分发|Android应用分发|免费应用内测托管平台 源码下载
- 用C#调整Excel 的行高和列宽