一、文件打开和关闭
在MATLAB中处理文件读写的函数有多个,像Load、Save命令能处理MATLAB本身创建的简单格式文件的读写;
而imread、imwrite命令可方便地读写一些常用图像格式文件;
但对一般化的文件读写,还是要靠Fread、Fwrite等低级文件I/O命令来处理。
1.打开文件
- fid=fopen('文件名','模式'):以指定模式打开文件,返回文件指针
- [fid,message]=fopen('文件名','模式'):同时还有信息返回
- fids=fopen('all'):打开所有文件,返回它们的文件指针作为行向量fids
- Filename=fopen(fid):根据已打开文件的指针返回文件名
2.关闭文件
- status=fclose(fid)
- status=fclose('all')
成功关闭文件将返回0,失败将返回-1
3.文件打开的常用模式
模式 | 含义 |
'r' | 打开文件读 |
'r+' | 打开文件读写 |
'w' | 删除已存在的文件的内容或新建一文件,并打开文件写 |
'w+' | 删除已存在的文件的内容或新建一文件,并打开文件读写 |
'a' | 打开一个新文件或已有文件,在文件结尾处添加内容 |
'a+' | 打开一新文件或一已有文件读写,在文件结尾处添加内容 |
文件可以按文本格式打开,只要打开模式中带上字符t,此时,行分隔符在从文件读出时自动删除,写入文件时自动添加;
文件也可按二进制方式打开,只要打开模式中带上字符b,此时进行文件读写不会对分隔符进行处理。
成功打开文件后,返回的文件指针是一个非负整数,如打开失败,返回-1。
示例:
fid=fopen('mytest.mat','r')
[fid,message]=fopen('data.txt','rt')
二、读写二进制数据(fread、fwrite)
1.读:[A,count]=fread(fid,size,precision,skip)
- 功能:将fid指示的文件中读取size个精度为precision的数据存入矩阵A中,并返回成功读取数据的个数存入count中;
- 参数skip(可省略)指定每读取一个数据要跳过skip个字节再读下一个数据;
- 参数size若省略则读到文件尾,它还能采用[m,n]形式,表示读出数据个数为m×n矩阵的元素总数,且按照列的顺序排列,若文件中数据不够,自动补零;
- 精度precision参数是一个字符串,指定所读取数据的数据类型,如‘int’、‘float’、‘char’等。
2.写:count=fwrite(fid,A,precision,skip)
- 功能:把矩阵A中数据以precision指示的数据类型写入到fid指定的文件中,并返回成功写入的数据个数给count;
- 其中各参数含义同fread。
3.示例
t=1:100;
fid1=fopen('test.mat','wb+');
count=fwrite(fid1,t,'int');
fclose(fid1);
fid2=fopen('test.mat','rb')
A1=fread(fid2,[5,4],'int')
A2=fread(fid2,5,'int',4)
status=fclose('all')
三、读写有格式文件的数据(fscanf、fprintf)
1.读:[A,count]=fscanf(fid,format,size)
- 功能:从fid指示的文件中读取size个用参数format规定格式的数据存放到矩阵A中,count为成功读取的数据个数。
- 参数size取值与fread类似。
- 参数format所取的格式字符串和C语言基本相同,都以“%”开头,以格式变换符号结尾,如:“%s”、“%f”、“%d”、“%10.3”、“%g”、“%i”、“%o”、“%u”、“%x”等等。
2.写:count=fprintf(fid,format,A,…)
- 功能:把矩阵A的数据按照format规定写到fid指定的文件中,并返回成功写入的字节数;
- 若省略参数fid,则默认输出到标准输出设备(屏幕)
3.示例
t=1:5;
s1=sin(t);
s2=cos(t);
s=[t;s1;s2];
fid1=fopen('test.dat','wt');
fprintf(fid1,'\nThis is a Formated file\n');
fprintf(fid1,'\n%4d %+12.5E %+12.5E\n',s);
fclose(fid1);
fid2=fopen('test.dat','rt');
[A1,count1]=fscanf(fid2,'%s',5);
[A2,count2]=fscanf(fid2,'%4d %e %e',[3,inf]);
A2=A2';
fclose(fid2);
四、函数fgetl和fgets
- line=fgetl(fid):调用格式。将fid中下一行以字符串形式返回给line(不包括行结束符,如遇到文件尾则返回-1)
- line=fgets(fid,nchar):调用格式。从fid指示的文件中,读出下一行不超过nchar个字符的字符串,包括行的结束符,如遇文件结尾则返回-1。另外,参数nchar可省略,即不受字符数限制。
- line=fgets(fid,nchar):移动文件的位置指针方法。功能是从fid指示的文件中,读出下一行不超过nchar个字符的字符串,包括行的结束符,如遇文件结尾则返回-1。另外,参数nchar可省略,即不受字符数限制。
- pos=ftell(fid):报告当前位置方法调用格式。功能是返回当前位置距文件头的字节数。
- frewind(fid)函数的调用可将文件位置指针放置在文件头
- feof(fid)可测试fid所指文件是否设置了文件尾指示符。
示例:
fid=fopen('d:\data.txt','r')
line1=fgetl(fid)
frewind(fid)
line2=fgets(fid)
fclose(fid)