二、MATLAB混合编程中的数据交流
1、文件的打开和关闭
[f, message] = fopen(‘filename’,‘mode’);
其中,f返回文件标志,通常为非负整数;message返回无法打开文件的原因。Filename为文件名,mode为对文件处理的方式,如:
mode |
意义 |
rt |
只读方式打开 |
wt |
只写方式打开 |
at |
追加方式,原文件后面续写 |
r+t |
读写方式打开 |
w+t |
读写创建,原文件被清除 |
a+t |
读和追加方式 |
At |
读写方式打开或创建,磁带介质文件 |
Wt |
写入方式打开或创建,原文件清除磁带介质文件 |
fclose(f)或者fclose all;f为标志,如fopen。
2、文本数据(ASCII)
导入模板:
file→Import Data
分隔符:
space(空格)、comma(,)、semicolon(;)、ab或其他字符。
读取函数比较:
函数 |
数据类型 |
分隔符 |
返回值 |
csvread |
数值 |
, |
1 |
dlmread |
数值 |
任何字符 |
1 |
fscanf |
字母和数值 |
任何字符 |
1 |
load |
数值 |
Space |
1 |
textread |
字母和数值 |
任何字符 |
多返回值 |
textread调用方法:
[A,B,C,……]=textread(‘filename’,‘format’);
或[A,B,C,……]=textread(‘filename’,‘format’,N);
%s和%f:读入字母和数值;%*s和%*f:不读。
数据存写函数:
名称 |
适用数据 |
分隔符 |
csvwrite |
数值 |
, |
diary |
数值或单元阵列 |
空格 |
dlmwrite |
数值 |
任何字符 |
fprintf |
字母和数值 |
任何字符 |
save |
数值 |
制表符或空格符 |
3、二进制数据
导入模板:file→Import Data
导入或导出函数,如:
函数名称 |
文件扩展名 |
数据格式 |
load、save |
.mat |
MATLAB下的MAT数据格式 |
aviread、aviwrite |
.avi |
AVI格式的音频视频数据 |
cdfread、cdfwrite |
.cdf |
CDF格式 |
hdf、hdf |
.hdf |
HDF格式 |
imread、imwrite |
.bmp .cur .gif .ico .hdf .jpg .pbm .pgm .png .pnm .ppm .pcx .tif .xwd .ras |
图形数据 |
wavread、wavwrite |
.wav |
Windows系统的声音文件 |
xlsread、xlswrite |
.xls |
Excel电子表格数据 |
AVI格式存写MATLAB图像步骤:
用avifile函数建立一个AVI文件;
用addframe函数来捕捉图像并保存到AVI文件中;
使用close函数关闭AVI文件。
将一个已经存在的MATLAB电影文件转换为AVI格式,需要使用函数movie2avi。
4、使用文件I/O函数
读取:A=fread(fid,[m n]);fid为整数型变量,由fopen函数获得;[m n]为返回矩阵的格式和大小,可直接为m。
写入:count=fwrite(fid,A,precision);f同上面的fid;count为返回写入文件数据的大小;A表示要写入的数据矩阵;precision表示写入格式。
fscanf函数与C语言中相似,能够从一个有格式的文件中读取数据,并将它赋给一个或多个变量。其格式转换符:
格式转换符 |
意义 |
%c |
读取字符型变量,也可以指定多个字符,如%3c等 |
%s |
读取字符串变量 |
%d |
读取整数型变量 |
%f |
读取浮点数 |
%g |
读取双精度浮点数 |
Fprintf将会把数据转换成字符串,并将它们输出到屏幕或文件中。
每次打开文件时,MATLAB就会保持一个文件位置指针(File Position Indicator)。其控制函数:
名称 |
功能说明 |
fseek(fid,offset,origin) |
设定指针位置 |
ftell(fid) |
获得指针位置 |
frewind(fid) |
重设指针到文件起始位置 |
feof(fid) |
测试指针是否在文件结束位置 |
其中,fid是指定的文件标识符;offset为整数型变量,表示相对于指定位置需要的偏移字节数,正数向尾,负数向头;origin表示文件中的参考位置,如:
origin |
说明 |
‘bof’或-1 |
文件开头 |
‘cof’或0 |
文件中当前位置 |
‘eof’或1 |
文件末尾 |
而函数feof函数,当到达文件末尾时,返回值为1,否则为0。
5、MAT文件
MAT文件时MATLAB使用的一种特有的二进制数据文件。可以包含一个或者多个MATLAB变量。提供了一种更简便的机制在不同操作平台之间移动MATLAB数据。
在MATLAB环境中,通常使用load和save两个命令进行MAT文件的读和写。在使用load是,也可以使用类如load mymat.mat y*来读取以y开头的变量。而在使用save时需要保存某几个变量时,可直接在后面写上变量名,用逗号隔开就行。
在普通的C/C++程序中读写MAT文件:
法一、利用MATLAB提供的有关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阵列头信息 |