二、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阵列头信息 |