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文件的读取相关推荐

  1. C语言文件操作函数fwrite导致写入文件的内容乱码的问题解决方案

    fwrite() 函数用来向文件中写入块数据,它的原型为: size_t fwrite ( void * ptr, size_t size, size_t count, FILE *fp ); 参数说 ...

  2. c语言exit头文件,exit函数在那个头文件

    c语言 exit的头文件是什么? C语言exit函数的头文件是stdlib.h. exit的声明为 void exit(int value); exit的作用是,退出程序,并将参数value的值返回给 ...

  3. php中文件操作函数,php中常用文件操作函数介绍

    小编今天来给php初学者介绍php文件操作的常用函数使用方法总结,包括:文件读写,创建,查看文件属性,文件删除等等关于文件的操作. 在对一个文件进行访问之前,一般我们都需要判断文件是否存在,以免调用了 ...

  4. linux 文件操作函数,Linux下的文件操作函数及creat用法

    编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]. ...

  5. php打开文件读写函数,php中常用文件操作读写函数介绍

    本文章介绍了下面几个常用的文件操作函数 file_get_contents 读取整个文件内容 fopen 创建和打开文件 fclose 关闭文件 fgets 读取文件一行内容 file_exists ...

  6. python文件操作函数_python基础之文件操作,集合,函数

    文件操作: 打开文件的方法: 第一种:打开文件执行完命令后,需要关闭文件,否则会一直占用内存空间 f=open('/data/1.txt','r+') #后面的r+ 表示打开文件的模式是读写 #命令 ...

  7. php文件调用函数,关于PHP操作文件的基本函数的使用

    这篇文章主要介绍了PHP操作文件的一些基本函数使用示例,本文给出了复制文件.删除文件.重命名文件.截取文件等操作代码实例,需要的朋友可以参考下 在对文件进行操作时,不仅可以对文件中的数据进行操作,还可 ...

  8. c语言 fscanf的头文件,fscanf函数在哪个头文件中

    SizeOf Pascal的一种内存容量度量函数: 用法: Var a : array[1..10000] of longint; Begin Writeln(SizeOf(a)); End. 输出: ...

  9. C语言文件指针的基本函数介绍包含了fpoen、fclose、fgetc、fputc、fscanf、fprintf、fgets、fputs、fread、fwrite函数以及文件定位函数.

    一.打开关闭文件 只打开文件   再关闭文件 #include <stdio.h> #include<stdlib.h> main() {FILE *fp;fp = fopen ...

最新文章

  1. BasicModal - 简单易用的现代 Web App 弹窗
  2. Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture
  3. irobot擦地机器人故障_iRobot怎么就那么香?用过擦地机器人之后,我服了
  4. scihub只能用doi查吗_同步带轮齿形加工只能用滚齿机吗?
  5. linux echo 怎么输出换行符到文件?(echo -e)
  6. java1002java,疯狂java学习笔记1002---抽象类及接口
  7. “温室里的花朵”也要直面困难
  8. DotNet程序员是不是最不幸福?
  9. postman跨域测试_安装使用Hoppscotch构建API请求访问与测试
  10. 7-169 龟兔赛跑 (20 分)
  11. Android 首次开机优化
  12. 基本积分表的联想记忆
  13. usb3.0速度测试软件,USB3.0传输速度测试 揭秘速度到底是多少
  14. 从 Web2 社交面临的挑战看,Web3 为何能够取而代之
  15. 如何将DVD的vob视频格式转换成mp4格式
  16. 服务器被劫持怎么修复不了,电脑DNS被劫持怎么修复?电脑dns被劫持的完美解决方法...
  17. Opencv实战 文字区域的提取
  18. 血泪史: k8s Initial timeout of 40s passed.
  19. 超级应用 - 免费应用内测托管平台|APP应用分发平台|iOS应用分发|Android应用分发|免费应用内测托管平台 源码下载
  20. 用C#调整Excel 的行高和列宽

热门文章

  1. 企业邮箱格式怎么写?
  2. LaTeX快速入门-蔡炎龙
  3. AtCoder Contest 229-C-Cheese
  4. Zedboard开发板的linux搭建
  5. 【visual studio】win11 ClangPowerTools 代码格式化
  6. 直播系统开发的语言选择
  7. AT命令与ppp协议
  8. compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion
  9. Python3教程: logging 模块用法
  10. 从估值一亿到一夜分家:一个曾经存在过的教育产品的故事