MAT文件是二进制数据文件,在MATLAB中很常用。MATLAB中提供了很多MAT格式的数据,并利用它们进行功能演示。例如,有一个名为wind的MAT文件,它代表了某时穿过北美上空的气流数据。利用它,可以绘制矢量图形,如流线图、流锥图等。可以使用load命令导入MAT文件数据。如
load wind
即将wind数据载入工作空间中。
以二进制读取数据
除可以使用load函数外,还可以使用fread函数从文件中读取二进制数据。该函数的语法格式如下。
A = fread(fid):从fid指定的文件中将数据以二进制格式读取到矩阵A中。在调用fread函数以前用fopen函数打开文件。fid变量表示文件的标识符。MATLAB从头到尾读取文件,然后指向文件尾。
A = fread(fid, count):count用于指定读取的元素个数。在使用fread以后,MATLAB将文件指针指向下一个要读取的字节。后面的fread操作将从文件指针的位置开始。
A = fread(fid, count, precision):根据字符串precision指定的数据格式读取文件。
A = fread(fid, count, precision, skip):包含一个可选的skip变量,它指定读取每个precision值以后跳过的字节数。precision指定一个类似¹bitN¹或¹ubitN¹的位格式,skip变量表示为跳过的位数。
A = fread(fid, count, precision, skip, machineformat):指定读入的数据具有machineformat给定的格式。
[A, count] = fread(...):将从文件中读出的数据返回到A中,将成功读取出来的元素个数返回count中。
使用fread函数需要指定以什么数据格式读取fid指定的文件中的数据,然后又以什么格式将数据输出到矩阵A中。默认时以uchar类型读数据,以double型输出。
【例1-5】假设文件alphabet.txt中包含26个英文字母,都为大写。用fopen函数打开该文件,并将前5个值读到c变量中。因为没有指定精度,所示MATLAB使用默认的精度uchar,输出是数值型的。
fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5)
c =
65 66 67 68 69
fclose(fid);
下面指定以无符号8位整型读取数据,然后以字符类型输出。
fid = fopen('alphabet.txt', 'r');
c = fread(fid, 5, 'uint8=>char')
c =
ABCDE
fclose(fid);
下面打开MAT文件wind.mat,然后读取其中的数据。
fid = fopen('wind.mat', 'r');
c = fread(fid)
将二进制数据写入文件
用fwrite函数可以将二进制数据写入文件,其语法格式如下。
count = fwrite(fid,A,precision):将矩阵A的元素写入指定文件中,将MATLAB值转换为precision指定的精度。数据按列序写入,count为成功写入的元素个数。fid是fopen函数返回的文件标识符,1或者2。precision控制结果的格式和大小。
count = fwrite(fid,A,precision,skip):包含一个可选的skip变量,它指定写入每个precision值以前跳过的字节数。如果precision是类似¹bitN¹或¹ubitN¹的位格式,则skip按位指定。
注意:在用fclose函数关闭文件以前,不能查看或输入/写入的文件的内容。
【例1-6】创建一个长度为100字节的二进制文件magic5.bin,其中包含一个55的魔方矩阵,每个元素保存为4字节整数。
fid = fopen('magic5.bin','wb');
fwrite(fid,magic(5),'integer*4')
请试着用fread函数读取该文件中的数据。