Matlab学习笔记(9.2)MATLAB文件操作

Matlab学习笔记(9.2)MATLAB文件操作

1.文件打开与关闭

① fopen函数

用于打开文件,其调用格式为:

fid=fopen(filename,permission)

其中,fid为文件识别号,打开文件成功时,fid返回一整数,用来标识该文件;打开文件不成功时,fid值为-1。filename为待操作的文件名,permission为对文件的允许使用方式。

文件的使用方式:

'r' 以读方式打开一个文件
'w' 以写方式打开一个文件
'a' 在该文件尾添加数据
'r+' 以读和写方式打开一个文件

② fclose函数

用于关闭已打开的文件,其调用格式为:

status=fclose(fid)

fid是要关闭文件的标识号。如果fid为all,则关闭所有已打开的文件,但标准文件除外,即屏幕、键盘。返回0表示关闭成功,返回-1则表示关闭不成功。

2.文本文件的读写

fscanf函数和fprintf函数

fscanf函数用于读取文本文件的内容,fprintf函数用于将数据写入文本文件中。调用格式为:

[A,count]=fscanf(fid,fmt,size)

count=fprintf(fid,fmt,A)

其中,A用于存放读写的数据,count返回成功读写的数据元素个数;参数fid为文件标识号,fmt用以控制读取的数据格式,size用于指定A的大小。

  • fmt由%加上格式符组成,在%之后还可以加上数据宽度,如%3d,%10.3f
  • 常见的数值格式控制符如下:
'%d' 整数
'%f' 小数形式的实数
'%e' 科学计数法形式的实数
'%c' 字符
'%s' 字符串
  • size可取值:
n 指定读取n个数据
Inf 指定读取文件中的所有数据
[m,n] 指定读取m×n个数据,数据按列顺序存放到矩阵A

e.g. 文件“观测记录.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); 
fclose(fid);

3. 二进制文件的读写

fread函数和fwrite函数

fread函数用于读取二进制文件,fwrite 函数将数据写入文件。这是函数的调用格式。

[A,count]=fread(fid,size,precision,skip)

count=fwrite(fid,A,precision)

其中,A用于存放读写的数据,count返回读写成功的数据个数。fid为文件识别号,precision指定读写数据的类型,size用于指定A的大小,skip指定按比例周期性地跳过一些数据。

e.g. 计算y=exsinx,其中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);

4.数据文件定位

① fseek函数

该函数用于 改变 文件位置指针的位置,其调用格式为:

fseek(fid, offset, origin)

其中参数fid为文件识别号,offset表示位置指针相对移动的字节数(可取负值);origin表示位置指针移动的参照位置。 定位成功返回0,否则-1。

origin的可取值:

'cof '或0 文件指针的当前位置
'bof '或-1 文件的开始位置
'eof'或1 文件的结束位置
fseek(fid,0,-1)     %指针移动到文件头
fseek(fid,-5,'eof') %指针移动文件倒数第5个字节

② ftell函数

用于 查询 文件指针的当前位置,其调用格式为:

position=ftell(fid)

返回值为从文件头到指针当前位置的字节数。若返回值为-1,表示获取文件当前位置失败。

③ feof函数

用于判断当前的文件位置指针 是否到达文件尾部

status=feof(fid)

当到达文件结束位置时,返回值为1,否则为0。

e.g. 读取生成的'模拟数据.dat'文件中的后40组数据,并绘制图形。

fid=fopen('模拟数据.dat','r'); 
status=fseek(fid, -40*2*8, 'eof'); 
x=[]; y=[];