Matlab实现文件的读/写

一、文件打开和关闭

在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)

 

 

 

 

 

 

 

你可能感兴趣的:(Matlab)