1、第4章 文件操作,任课教师:王晓飞,王晓飞 遥感图像处理研究室 2,文件的打开与关闭,1,文件的读写操作,数据文件定位,2,3,Contents,王晓飞 遥感图像处理研究室 3,4.1文件的打开与关闭,开文件: fid= fopen(文件名,打开方式)文件名用字符串形式,常见的打开方式有:r表示对打开的文件读数据,r+w表示对打开的文件写数据,w+a表示在打开的文件末尾添加数据。a+t表示打开的是文本文件b表示打开的是二进制文件(默认打开方式)fid用于存储文件句柄值,,关闭文件:sta=fclose(fid)sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回1。,例:Fid=fo
2、pen(std.dat, r)Fid2=fopen(std.dat, wb+),例:Sta=fclose(fid2),王晓飞 遥感图像处理研究室 4,4.2文件的读写操作,1 二进制文件的读写操作,fread (读):A,COUNT=fread(fid,size, precision)fwrite (写):COUNT=fwrite (fid, A, precision)其中A用于存放读取(写入)的数据,COUNT返回所读取(写入)的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:(1) N表示读取 N个元素到一个列向量。(2) Inf表
3、示读取整个文件。(3) M,N表示读数据到MN的矩阵中,数据按列存放。precision代表读写数据的类型(见下表),王晓飞 遥感图像处理研究室 5,MATLAB C or Fortran Description uchar unsigned char unsigned character, 8 bits. schar signed char signed character, 8 bits. int8 integer*1 integer, 8 bits. int16 integer*2 integer, 16 bits. int32 integer*4 integer, 32 bits. i
4、nt64 integer*8 integer, 64 bits. uint8 integer*1 unsigned integer, 8 bits. uint16 integer*2 unsigned integer, 16 bits. uint32 integer*4 unsigned integer, 32 bits. uint64 integer*8 unsigned integer, 64 bits. single real*4 floating point, 32 bits. float32 real*4 floating point, 32 bits. double real*8
5、floating point, 64 bits. float64 real*8 floating point, 64 bits.,4.2文件的读写操作,1 二进制文件的读写操作,王晓飞 遥感图像处理研究室 6,例 建立一数据文件magic5.dat,用于存放5阶魔方阵。程序如下:fid=fopen(magic5.dat,w);cnt=fwrite(fid,magic(5),int32);fclose(fid);例 从数据文件magic5.dat,中读取5阶魔方阵。程序如下:fid=fopen(magic5.dat,r);b,cnt=fread(fid,5,inf,int32);fclose(f
6、id);,4.2文件的读写操作,1 二进制文件的读写操作,王晓飞 遥感图像处理研究室 7,4.2文件的读写操作,2文本文件的读写操作,fscanf(读): A,COUNT= fscanf (fid, format, size)fprintf (写)COUNT= fprintf(fid, format, A)其中A用以存放读取(写入)的数据,COUNT返回所读取(写入)的数据元素个数。fid为文件句柄。format用以控制读取(写入)的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s,和数据宽度。size为可选项,决定矩阵A中数据的排列形式fgetl和fgets 也可以读取文本文件,他
7、们是读取一行数据当字符串处理,fgetl不包含文本的结束符,fgets包含。,王晓飞 遥感图像处理研究室 8,4.2文件的读写操作,2文本文件的读写操作,例:X=fscanf(fid,%5d,100)X=fscanf(fid,%5d,10,10)x=0:0.1:1;y=x;exp(x);fid=fopen(exp.txt,w;);fprintf(fid,%6.2f %12.8f,y);fclose(fid);在命令窗口用type可以显示文本文件type exp.txt,王晓飞 遥感图像处理研究室 9,4.2文件的读写操作,2文本文件的读写操作,例:一个文本文件包含若干道是非问题,从键盘输入该文
8、件的名字,然后依次显示每一道题目并提示用户回答,保存用户的答案。,王晓飞 遥感图像处理研究室 10,4.3 数据文件定位,fseek和ftell。fseek函数用于定位文件位置指针,status=fseek(fid, offset, origin)其中fid为文件句柄,offset表示位置指针相对移动的字节数,origin表示位置指针移动的参照位置。若定位成功,status返回值为0,否则返回值为1。,ftell函数返回文件指针的当前位置,position=ftell (fid)返回值为从文件开始到指针当前位置的字节数。若返回值为1表示获取文件当前位置失败。,王晓飞 遥感图像处理研究室 11,
9、例:下列程序执行后, four position three的值是多少,a=1:5;fid=fopen(fdat.bin,w); fwrite(fid,a,int16); status=fclose(fid); fid=fopen(fdat.bin,r); status=fseek(fid,6,bof); four=fread(fid,1,int16); position=ftell(fid); status=fseek(fid,-4,cof); three=fread(fid,1,int16); status=fclose(fid);,4.3 数据文件定位,王晓飞 遥感图像处理研究室 12,
10、例:下列程序执行后, four position three的值是多少,a=1:5;fid=fopen(fdat.bin,w); %以写方式打开文件fdat.binfwrite(fid,a,int16); %将a的元素以双字节整型写入文件fdat.binstatus=fclose(fid); fid=fopen(fdat.bin,r); %以读数据方式打开文件fdat.binstatus=fseek(fid,6,bof); %将文件指针从开始位置向尾部移动6个字节four=fread(fid,1,int16); %读取第4个数据,并移动指针到下一个数据position=ftell(fid);
11、%ftell的返回值为8 status=fseek(fid,-4,cof); %将文件指针从当前位置往前移动4个字节three=fread(fid,1,int16); %读取第3个数据status=fclose(fid);,4.3 数据文件定位,练习,1、统计一个文本文件中每个英文字母出现的次数,不区分字母的大小写。2、编定M文件实现:从键盘输入若干行字符串,将其写入文件paper.txt,然后计算1-2000之间整数正弦值,将得到的数据以每行10个数,每个数之间以3个空格分隔的方式添加到文件paper.txt末尾。,王晓飞 遥感图像处理研究室 13,王晓飞 遥感图像处理研究室 14,复习,打
12、开文件: fid= fopen(文件名,打开方式)关闭文件: sta=fclose(fid)读二进制文件:A,COUNT=fread(fid,size, precision)写二进制文件:COUNT=fwrite (fid, A, precision)读文本文件:A,COUNT= fscanf (fid, format, size)写文本文件:COUNT= fprintf(fid, format, A)定位: status=fseek(fid, offset, origin)返回位置:position=ftell (fid)读取整行:fgetl fgets,matlab,电子工程学院,Thank you!,