目录
一、文件打开与关闭
1、fopen函数
用于打开文件,其调用格式为:
fid = fopen(filename,permission);
其中, fid为文件识别号,打开文件成功时,fid返回一整数,用来标识该文件;打开文件不成功时,fid值为-1。
filename:待操作的文件名;
permission:对文件的允许使用方式。
文件的使用方式如下:
• ‘r’: 以读方式打开一个文件;
• ‘w’: 以写方式打开一个文件;
• ‘a’: 在该文件尾添加数据;
• ‘r+’: 以读和写方式打开一个文件;
• ‘w+’:打开或创建用于读写的文件,覆盖已有的内容;
• ‘a+’: 以追加的方式读写文件。
2、fclose函数
用于关闭已打开的文件,其调用格式为:
status = fclose(fid);
fid是要关闭文件的标识号。如果fid为all,则关闭所有已打开的文件,但标准文件除外,即屏幕、键盘。返回 0 表示关闭成功,返回-1则表示关闭不成功。
注意:fopen与fclose要同时出现在一个程序中,即打开一个文件,操作完毕后需要关闭该文件。
二、文本文件的读写
1、fscanf函数和fprintf函数
fscanf函数用于读取文本文件的内容,fprintf函数用于将数据写入文本文件中。
调用格式为:
[A, count] = fscanf(fid, fmt, size);
count = fprintf(fid, fmt, A);
其中,A用于存放读写的数据,count返回成功读写的数据元素个数;参数fid为文件标识号,fmt用以控制读取的数据格式,size用于指定A的大小。
fmt由%加上格式符组成,常见的数值格式控制符如下:
• ‘%d’: 整数;
• ‘%f’:小数形式的实数;
• ‘%e’:科学计数法形式的实数;
• ‘%c’:字符;
• ‘%s’: 字符串;
在%之后还可以加上数据宽度。
size可取值:
• n: 指定读取n个数据;
• Inf:指定读取文件中的所有数据;
• [m,n]:指定读取m× n个数据,数据按列顺序存放到矩阵A。
2、案例1
例1 文件“观测记录.txt”的内容如图所示,读取文件前10行的数据。
fid=fopen('观测记录.txt','r');
title=fscanf(fid,'%s',6);
qxsj=[];
for i=1:10
qxsj{i,1}=fscanf(fid,'%s',1);
qxsj{i,2}=fscanf(fid,'%s',1);
qxsj{i,3}=fscanf(fid,'%f',1);
qxsj{i,4}=fscanf(fid,'%f',1);
qxsj{i,5}=fscanf(fid,'%f',1);
qxsj{i,6}=fscanf(fid,'%s',1);
end
fclose(fid);
三、二进制文件的读写
1、fread函数和fwrite函数
fread函数用于读取二进制文件,fwrite函数将数据写入文件。
调用格式为:
[A, count] = fread(fid, size, precision, skip);
count = fwrite(fid,A,precision);
其中,A用于存放读写的数据,count返回读写成功的数据个数。fid为文件识别号,precision指定读写数据的类型,size用于指定A的大小,skip指定按比例周期性地跳过一些数据。
2、案例2
例2 计算y=exp(x)sinx,其中x∈[0,2π]。将x、y写入二进制文件“模拟数据.dat”。
fid=fopen('模拟数据.dat','w');
x=linspace(0,2*pi,100);
y=exp(x).*sin(x);
count=fwrite(fid, [x; y], 'double');
fclose(fid);
四、数据文件定位
1、fseek函数
该函数用于改变文件位置指针的位置,其调用格式为:
fseek(fid, offset, origin);
其中参数fid为文件识别号,offset表示位置指针相对移动的字节数;origin表示位置指针移动的参照位置。
origin的可取值:
• 'cof '或0:表示文件指针的当前位置;
• 'bof '或-1:表示文件的开始位置;
• 'eof’或1:表示文件的结束位置。
2、ftell函数
用于查询文件指针的当前位置,其调用格式为:
position = ftell(fid);
返回值为从文件头到指针当前位置的字节数。若返回值为-1,表示获取文件当前位置失败。
3、feof函数
用于判断当前的文件位置指针是否到达文件尾部,其调用格式为:
status = feof(fid);
当到达文件结束位置时,返回值为1,否则为0。
4、案例3
例3 读取例2生成的文件中的后40组数据,并绘制图形。
fid=fopen('模拟数据.dat','r');
status=fseek(fid, -40*2*8, 'eof');
x=[]; y=[];
while ~feof(fid)
x=[x; fread(fid,1,'double')];
y=[y; fread(fid,1,'double')];
end
plot(x,y);
fclose(fid);