1、数学软件数学软件 Matlab 文件操作1第1页内容提要内容提要n 文件打开与关闭文件打开与关闭n 文本文件写与读文本文件写与读n 二进制文件写与读(选学)二进制文件写与读(选学)2第2页q 文文件件操操作作是是一一个个主主要要输输入入输输出出方方式式,Matlab 提提供供了一系列输入输出函数,专门用于文件操作。了一系列输入输出函数,专门用于文件操作。q Matlab文件操作三步骤:文件操作三步骤:q Matlab中中输输入入输输出出函函数数是是以以 C 语语言言标标准准库库函函数数中中输输入入输输出出函函数数为为基基础础开开发发,所所以以这这些些函函数数与与 C 语语言输入输出函数相类似。
2、言输入输出函数相类似。Matlab 文件操作介绍文件操作介绍(1)打开打开文件文件(2)对文件进行对文件进行读写读写操作操作(3)关闭关闭文件文件3第3页l 打开方式有(若不指定打开方式,则表示只读)打开方式有(若不指定打开方式,则表示只读):fid=fopen(文件名,打开方式文件名,打开方式)rn只读,文件必须存在(缺省打开方式)只读,文件必须存在(缺省打开方式)w写文件,若文件已存在则原内容将被覆盖;若文写文件,若文件已存在则原内容将被覆盖;若文件不存在则新建一个件不存在则新建一个a在文件末尾添加,文件若不存在则新建一个在文件末尾添加,文件若不存在则新建一个r+可读可写,文件必须存在可读
3、可写,文件必须存在w+可读可写,若文件已存在则原内容将被覆盖;若可读可写,若文件已存在则原内容将被覆盖;若文件不存在则新建一个文件不存在则新建一个a+可读可写可添加,文件若不存在则新建一个可读可写可添加,文件若不存在则新建一个文件打开文件打开l 其汉字件名用字符串形式表示(能够带路径名)其汉字件名用字符串形式表示(能够带路径名)l 文件打开文件打开4第4页l fid 为文件句柄,经过它才能对该文件进行操作为文件句柄,经过它才能对该文件进行操作l 假如句柄值大于假如句柄值大于 0,则表示文件打开成功;,则表示文件打开成功;l 若文件打开失败,若文件打开失败,fid 返回值为返回值为-1。l 有两
4、个标准代码文件,不需打开就能够直接使用,分别为:有两个标准代码文件,不需打开就能够直接使用,分别为:fid=1 标准输出文件,标准输出文件,fid=2 标准错误文件。标准错误文件。文件打开文件打开fid=fopen(output.txt,wt+);fprintf(fid,Hello world!n);fclose(fid);fprintf(1,Hello world!n);fprintf(2,Hello world!n);fid=fopen(文件名,打开方式文件名,打开方式)5第5页文件关闭文件关闭l 其中其中 fid 为所要关闭文件句柄为所要关闭文件句柄l status 为关闭文件返回代码,
5、若成功则为为关闭文件返回代码,若成功则为 0,不然为,不然为-1l 文件操作结束后一定要关闭文件操作结束后一定要关闭status=fclose(fid);l 文件关闭文件关闭6第6页内容提要内容提要n 文件打开与关闭文件打开与关闭n 文本文件写与读文本文件写与读n 二进制文件写与读(选读)二进制文件写与读(选读)7第7页l 将将指定变量指定变量按指定格式写入文本文件中按指定格式写入文本文件中l 若省略若省略 fid,则表示在屏幕上输出则表示在屏幕上输出l count 返回所写入数据个数(可省)返回所写入数据个数(可省)l format 用来指定写数据时采取格式,通常由三部分组成用来指定写数据时
6、采取格式,通常由三部分组成 普通字符串、格式字符串、转义字符普通字符串、格式字符串、转义字符count=fprintf(fid,format,输出变量列表输出变量列表)文本文件写入文本文件写入l 向文本文件中写数据向文本文件中写数据x=3.14;str=math;fid=fopen(output.txt,wt);fprintf(fid,x=%f,str=%sn,x,str);status=fclose(fid);8第8页l 数据输出时采取格式(数据输出时采取格式(format)文本文件写入文本文件写入n flags(可选可选)n width and precision(可选可选)n conve
7、rsion character(格式说明符,必须格式说明符,必须)(1)普通字符串普通字符串:按原样输出:按原样输出(2)格式字符串格式字符串:指定变量输出格式,以:指定变量输出格式,以%开头,包含开头,包含(3)转义字符转义字符:输出特殊符号,如换行等,常见有:输出特殊符号,如换行等,常见有:b退后一格退后一格t水平制表符水平制表符f换页换页反斜杠反斜杠n换行换行单引号单引号r回车回车%百分号百分号9第9页格式字符串格式字符串fprintf(x=%-12.5f n,x)以以%开头开头flagfield widthprecision格式说明符格式说明符-:左对齐:左对齐+:输出符号:输出符号0
8、 :空白处添:空白处添 0空格空格:前面加一空格:前面加一空格字段宽度字段宽度指定小数指定小数点后位数点后位数l 格式字符串示例格式字符串示例10第10页格式说明符格式说明符l 常见格式说明符常见格式说明符c字符型字符型g浮点数(自动)浮点数(自动)d十进制整数十进制整数o八进制八进制e浮点数(科学计数法)浮点数(科学计数法)s字符串字符串f浮点数(小数形式)浮点数(小数形式)x/X十六进制十六进制x=sqrt(2);fid=fopen(out2.txt,wt);fprintf(fid,x=%12.5f,n,x);fprintf(fid,x=%-12.5f,n,x);status=fclose
9、(fid);例:例:11第11页x=0:0.1:1;y=exp(x);fid=fopen(output.txt,wt);fprintf(fid,x exp(x)n);for k=1:length(x)fprintf(fid,%6.2f%12.8fn,x(k),y(k);endstatus=fclose(fid);例:例:文本文件写入举例文本文件写入举例l 注:格式重复使用注:格式重复使用x=0:0.1:1;y=exp(x);z=x;y;.fprintf(fid,%6.2f%12.8fn,z);.12第12页l A 用来存放读取数据用来存放读取数据l count 返回读取数据个数,为可选项返回读
10、取数据个数,为可选项l fid 为文件句柄为文件句柄l size 为可选项,若缺省,则读取整个文件,为可选项,若缺省,则读取整个文件,若给出,则取值能够是:若给出,则取值能够是:A,count=fscanf(fid,format,size)文本文件读取文本文件读取N读取读取 N 个数据,组成一个列向量个数据,组成一个列向量Inf读取整个文件,组成一个列向量读取整个文件,组成一个列向量m,n 读取读取 m n 个数据,组成到一个个数据,组成到一个 m n 矩阵,矩阵,按列存放按列存放l 从文本文件中读取数据从文本文件中读取数据13第13页文本文件读取举例文本文件读取举例x=0:0.1:1;y=e
11、xp(x);z=x;y;%文本文件读取文本文件读取fid=fopen(output.txt,wt);fprintf(fid,%6.2f%12.8fn,z);status=fclose(fid);%文本文件读取文本文件读取fid=fopen(output.txt,rt);A=fscanf(fid,%f);%注意格式字符串注意格式字符串%A=fscanf(fid,%f,2,11);status=fclose(fid);例:例:14第14页内容提要(选学部分)内容提要(选学部分)n 文件打开与关闭文件打开与关闭n 文本文件写与读文本文件写与读n 二进制文件写与读(选学)二进制文件写与读(选学)15第
12、15页l 按指定数据类型将矩阵按指定数据类型将矩阵 A 中元素写入到文件中。中元素写入到文件中。其中其中 count 返回所写入数据元素个数(可省)。返回所写入数据元素个数(可省)。count=fwrite(fid,A,precision)A=magic(5);fid=fopen(magic5.dat,wb);fwrite(fid,A,int8);fclose(fid);fid=fopen(magic5.dat,rb);B,count=fread(fid,5,inf,int8);fclose(fid);二进制文件写入(选学)二进制文件写入(选学)例:例:l 向二进制文件中写入数据向二进制文件中
13、写入数据16第16页l precision 代表写入数据类型,缺省为代表写入数据类型,缺省为 ucharuchar无符号字符无符号字符uint1616位无符号整数位无符号整数schar带符号字符带符号字符uint3232位无符号整数位无符号整数int88位带符号整数位带符号整数uint6464位无符号整数位无符号整数int1616位带符号整数位带符号整数float3232位浮点数位浮点数int3232位带符号整数位带符号整数float6464位浮点数位浮点数int6464位带符号整数位带符号整数double64位双精度数位双精度数uint88位无符号整数位无符号整数二进制文件(选学)二进制文件
14、(选学)17第17页char带符号字符带符号字符short16位带符号整数位带符号整数int32位带符号整数位带符号整数long32或或64位带符号整数位带符号整数ushort16位无符号整数位无符号整数uint32位无符号整数位无符号整数ulong32或或64位无符号整数位无符号整数float32位浮点数位浮点数l 以下数据类型与使用平台相关:以下数据类型与使用平台相关:二进制文件(选学)二进制文件(选学)18第18页A,count=fread(fid,size,precision)A=fread(fid,size,precision)N读取读取 N 个数据,组成一个列向量个数据,组成一个列
15、向量Inf读取整个文件,组成一个列向量读取整个文件,组成一个列向量m,n 读取读取 m n 个数据到一个个数据到一个 m n 矩阵中,矩阵中,按列存放按列存放二进制文件读(选学)二进制文件读(选学)l A 用来存放读取数据用来存放读取数据l count 返回读取数据个数,可选项返回读取数据个数,可选项l fid 为文件句柄为文件句柄l size 为可选项,缺省为读取整个文件。取值能够是:为可选项,缺省为读取整个文件。取值能够是:l 从二进制文件中读取数据从二进制文件中读取数据19第19页fid=fopen(output.dat,rb);A=fread(fid,100,double);statu
16、s=fclose(fid);fid=fopen(output.dat,rb);A,count=fread(fid,100,100,double);status=fclose(fid);例:例:二进制文件读写举例(选学)二进制文件读写举例(选学)20第20页l 打开文件读写数据时,需要判断和控制文件打开文件读写数据时,需要判断和控制文件读写位置读写位置,如,如数据是否读完,或者需要读写指定位置上数据等。数据是否读完,或者需要读写指定位置上数据等。l 在读写文件时,在读写文件时,Matlab 自动创建一个自动创建一个文件位置指针文件位置指针来管理来管理和维护文件读写数据起始位置。和维护文件读写数据
17、起始位置。l Matlab 提供了几个文件位置指针定位操作函数:提供了几个文件位置指针定位操作函数:fseek、ftell、frewind 和和 feof读写定位(选学)读写定位(选学)l 读写定位读写定位21第21页status=fseek(fid,offset,origin)l fid 为文件句柄为文件句柄l offset 表表示示位位置置指指针针相相对对偏偏移移字字节节数数,若若为为正正表表示示向向文文件尾方偏移,若为负表示向文件头方向偏移件尾方偏移,若为负表示向文件头方向偏移fseek(选学)(选学)n cof 表示当前位置,表示当前位置,n bof 表示文件开始位置,表示文件开始位置
18、,n eof 表示文件末尾;表示文件末尾;l 若定位成功,若定位成功,status 返回值为返回值为 0,不然返回,不然返回-1l origin 表示位置指针移动参考位置,有三种取值:表示位置指针移动参考位置,有三种取值:l 读写定位读写定位22第22页frewind(fid)eofstat=ftell(fid)l 判判断断文文件件位位置置指指针针是是否否到到达达文文件件结结束束位位置置,若若文文件件位位置指针已在文件末尾,则返回置指针已在文件末尾,则返回 1,不然返回,不然返回 0position=ftell(fid)l 返回值为从文件开始到指针当前位置字节数返回值为从文件开始到指针当前位置
19、字节数l 将位置指针返回到文件起始位置将位置指针返回到文件起始位置ftell、frewind 和和 feof(选学)(选学)l 读写定位读写定位23第23页上机作业上机作业1、编写程序,计算、编写程序,计算 1 到到 225 之间全部整数平方根,要求将之间全部整数平方根,要求将计算结果既在屏幕上输出,也同时将计算结果自动存入文计算结果既在屏幕上输出,也同时将计算结果自动存入文本文件:本文件:data07_1.txt 中。中。(程序取名(程序取名 m07_1.m)2、完成试验二(定积分近似计算试验,、完成试验二(定积分近似计算试验,P47-54)习题)习题4,文件,文件名见题目标要求。名见题目标
20、要求。24第24页上机作业(选做)上机作业(选做)4、从课程主页上下载、从课程主页上下载二进制二进制数据文件数据文件 data07.dat,从文件中读,从文件中读取取100个元素(双精度),组成一个个元素(双精度),组成一个 50 X 2 矩阵。然后将其写矩阵。然后将其写入到一个入到一个文本文件文本文件(data07_4.txt)中,按两列排放。)中,按两列排放。3、编写程序,计算、编写程序,计算 1 到到 10000 之间全部既是完全平方数又是之间全部既是完全平方数又是完全立方数那些整数,要求将计算结果既在屏幕上输出,也同完全立方数那些整数,要求将计算结果既在屏幕上输出,也同时将计算结果自动存入文本文件:时将计算结果自动存入文本文件:data07_3.txt 中。中。(程序取名(程序取名 m07_3.m)(程序取名(程序取名 m07_4.m)25第25页