一章文件输入输出知识分享_第1页
一章文件输入输出知识分享_第2页
一章文件输入输出知识分享_第3页
一章文件输入输出知识分享_第4页
一章文件输入输出知识分享_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章文件I/O高级文件的I/O操作读写MAT文件或者ASCII读写TXT文件读写EXCEL文件读写图像文件低级文件的I/O操作打开和关闭文件读写二进制文件读写格式化的文本文件控制文件指针位置几点重要补充3/21/20251几个概念数据输入和输出(I/O)输入:从磁盘文件获得数据,加载到工作空间。输出:从工作空间变量保存到文件中。高级文件和低级文件I/O操作高级:针对不同的数据格式文件,提供不同的I/O函数,有现成的函数供使用,仅需少量编程。低级:使用文件标识符可访问任何类型的数据文件,更加灵活地完成相对特殊的任务,需要复杂编程二进制文件和文本文件(ASCII文件)3/21/20252二进制文件和文本文件文本文件将文件看作是由字节(byte)组成的,每个字节(bit)的最高位都是0,文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了打开方式不同,对于这些0和1的处理也就不同。按照文本方式打开时会进行转换,将每个字节转换成ASCII码,以二进制方式打开则不会进行任何的转换在记事本中进行文本编辑的时进行编辑的最小单位是字节;而对二进制文件编辑最小单位则是位(bit),不会直接通过手工的方式对二进制文件进行编辑3/21/202531、MAT文件的读写文件的存储数据导入文件的打开3/21/20254save命令save命令的调用格式为:save,将工作区中的所有变量保存在当前工作区中的文件中,文件名为matlab.mat,MAT文件可以通过load函数再次导入工作区,MAT函数可以被不同的机器导入,甚至可以通过其他的程序调用;save('filename'),将工作区中的所有变量保存为文件,文件名由filename指定。如果filename中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径;save('filename','var1','var2',...),保存指定的变量在filename指定的文件中;save('filename','-struct','s'),保存结构体s中全部域作为单独的变量;save('filename','-struct','s','f1','f2',...),保存结构体s中的指定变量;save('-regexp',expr1,expr2,...),通过正则表达式指定待保存的变量需满足的条件;save('...,'format'),指定保存文件的格式,格式可以为MAT文件、ASCII文件等。3/21/20256函数调用格式函数格式说明save将工作空间所有变量保存在当前目录下文件matlab.mat内savefn或save(‘fn’)将工作空间所有变量保存在当前目录下文件fn.mat内savefnx1x2…xn将变量x1x2…xn保存到当前目录下文件fn.matsave(fn,’-struct’,’s’)保存结构体s中全部域作为单独的变量save('fn','v1','v2',...)保存指定的变量在fn指定的文件中save('fn','-struct','s','f1','f2',...)保存结构体s中的指定变量save('-regexp',expr1,expr2,...),通过正则表达式指定待保存的变量需满足的条件save('...,'format')指定保存文件的格式,格式可以为MAT文件、ASCII文件等。3/21/20257MAT数据导入 MATLAB中导入数据通常由函数load实现,该函数的用法为:load,如果matlab.mat文件存在,导入matlab.mat中的所有变量,如果不存在,则返回error;loadfilename,将filename中的全部变量导入到工作区中;loadfilenameXYZ...,将filename中的变量X、Y、Z等导入到工作区中,如果文件为MAT文件,在指定变量时可以使用通配符“*”;loadfilename-regexpexpr1expr2...,通过正则表达式指定需要导入的变量;load-asciifilename,无论输入文件名是否包含有扩展名,将其以ascii格式导入,如果指定的文件不是数字文本,则返回error;load-matfilename,无论输入文件名是否包含有扩展名,将其以mat格式导入,如果指定的文件不是MAT文件,则返回error;3/21/20258Importdata函数MATLAB中,另一个导入数据的常用函数为importdata,该函数的用法为:importdata('filename'),将filename中的数据导入到工作区中;A=importdata('filename'),将filename中的数据导入到工作区中,并保存为变量A;importdata(‘filename’,‘delimiter’),将filename中的数据导入到工作区中,以delimiter指定的符号作为分隔符;与load函数不同,importdata将文件中的数据以结构体的方式导入到工作区中。3/21/20259MAT文件的打开MATLAB中可以使用open命令打开各种格式的文件,MATLAB自动根据文件的扩展名选择相应的编辑器。读者需要注意的是,open(‘filename.mat’)和load(‘filename.mat’)的不同,前者将filename.mat以结构体的方式打开在工作区中,后者将文件中的变量导入到工作区中,如果需要访问其中的内容,需要以不同的格式进行。3/21/2025102、文本文件的读写在上一节中介绍的函数和命令主要用于读写mat文件,在应用中,需要读写更多格式的文件,如文本文件,word文件,xml文件,xls文件及图像、音视频文件等。本节介绍文本文件(txt)的读写。MATLAB中实现文本文件读写的函数如表所示。函数功能csvread读入以逗号分隔的数据csvwrite将数据写入文件,数据间以逗号分隔dlmread将以ASCII码分隔的数值数据读入到矩阵中dlmwrite将矩阵数据写入到文件中,以ASCII分隔textread从文本文件中读入数据,将结果分别保存textscan从文本文件中读入数据,将结果保存为单元数组3/21/202511csvread函数M=csvread('filename'),将文件filename中的数据读入,并且保存为M,filename中只能包含数字,并且数字之间以逗号分隔。M是一个数组,行数与filename的行数相同,列数为filename列的最大值,对于元素不足的行,以0补充。M=csvread('filename',row,col),读取文件filename中的数据,起始行为row,起始列为col,需要注意的是,此时的行列从0开始。M=csvread('filename',row,col,range),读取文件filename中的数据,起始行为row,起始列为col,读取的数据由数组range指定,range的格式为:[R1C1R2C2],其中R1、C1为读取区域左上角的行和列,R2、C2为读取区域右下角的行和列。3/21/202512dlmread函数M=dlmread('filename')M=dlmread('filename',delimiter)M=dlmread('filename',delimiter,R,C)M=dlmread('filename',delimiter,range)其中参数delimiter用于指定文件中的分隔符,其他参数的意义与csvread函数中参数的意义相同,这里不再赘述。dlmread函数与csvread函数的差别在于,dlmread函数在读入数据时可以指定分隔符,不指定时默认分隔符为逗号。3/21/202513dlmwrite函数dlmwrite('filename',M),将矩阵M的数据写入文件filename中,以逗号分隔;dlmwrite('filename',M,'D'),将矩阵M的数据写入文件filename中,采用指定的分隔符分隔数据,如果需要tab键,可以用“\t”指定;dlmwrite('filename',M,'D',R,C),指定写入数据的起始位置;dlmwrite('filename',M,attribute1,value1,attribute2,value2,...),指定任意数目的参数,可以指定的参数见下表;dlmwrite('filename',M,'-append'),如果filename指定的文件存在,在文件后面写入数据,不指定时则覆盖原文件;dlmwrite('filename',M,'-append',attribute-valuelist),叙写文件,并指定参数。dlmwrite函数的可用参数如表所示。参数名功能delimiter用于指定分隔符newline用于指定换行符,可以选择“pc”或者“unix”roffset行偏差,指定文件第一行的位置,roffset的基数为0coffset列偏差,指定文件第一列的位置,coffset的基数为0precision指定精确度,可以指定精确维数,或者采用c语言的格式,如“%10.5f”3/21/202514textread,textscan当文件的格式已知时,可以利用textread函数和textscan函数读入。[a,b,c,...]=textread(filename,format,n)例如,假设文件test_input.dat包含下列数据JamesJonesO+3.5122YesSallySmithA+3.2823NO这些数据用下面的函数读取一系列的数组。[first,last,blood,gpa,age,answer]=textread('test_input.dat','%s%s%s%f%d%s')3/21/202515低级文件I/O本节介绍一些基本的文件操作,这些操作如表所示:函数功能fclose关闭打开的文件feof判断是否为文件结尾ferror文件输入输出中的错误查找fgetl读入一行,忽略换行符fgets读入一行,直到换行符fopen打开文件,或者获取打开文件的信息fprintf格式化输入数据到文件fread从文件中读取二进制数据frewind将文件的位置指针移至文件开头位置fscanf格式化读入fseek设置文件位置指针ftell文件位置指针fwrite向文件中写入数据3/21/202516fprintf函数count=fprintf(fid,format,A,...),该语句将矩阵A及后面其他参数中数字的实部以format指定的格式写入到fid指定的文件中,返回写入数据的字节数。上面语句中,参数format由%开头,共可由四个部分组成,分别为:标记(flag),为可选部分;宽度和精度指示,为可选部分;类型标志符,为可选部分;转换字符,为必需部分。3/21/202517标记1.标记标记用于控制输出的对齐方式,可以选择的内容如表所示。函数功能示例负号(-)在参数左侧进行判别%-5.2d加号(+)在数字前添加符号%+5.2d空格在数字前插入空格%5.2d0在数字前插入0%05.2d3/21/202518宽度和精度指示2.宽度和精度指示用户可以通过数字指定输出数字的宽度及精度,格式为:%6f,指定数字的宽度;%6.2f,指定数字的宽度及精度;%.2f,指定数字的精度。3/21/202519转换字符3.转换字符转换字符用于指定输出的符号,可以选择的内容如表所示。标志符意义%c输出单个字符%d输出有符号十进制数%e采用指数格式输出,采用小写字母e,如:3.1415e+00%E采用指数格式输出,采用大写字母E,如:3.1415E+00%f以定点数的格式输出%g%e及%f的更紧凑的格式,不显示数字中无效的0%G与%g相同,但是使用大写字母E%i有符号十进制数%o无符号八进制数%s输出字符串%u无符号十进制数%x十六进制数(使用小写字母a-f)%X十六进制数(使用大写字母A-F)3/21/202520例11-9利用fprintf函数在显示器上输出字符串>>fprintf(1,'It''sFriday.\n')It'sFriday.在该例中,利用1表示显示器,并且用两个单引号显示单引号,使用\n进行换行。在格式化输出中,这类符号称为转义符。MATLAB中的常用转义符如表所示。转义符功能\b退格\f表格填充\n换行符\r回车\ttab\\\,反斜线\''或''',单引号%%%,百分号3/21/2025213/21/202522fscanf函数array=fscanf(fid,format)[array,count]=fscanf(fid,format,size)其中fid是所要读取的文件的文件标识(fileid),format是控制如何读取的格式字符串,array是接受数据的数组,输出参数count返回从文件读取的变量的个数。参数size指定从文件读取数据的数目。这个函数有以下三个类型。n准确地读取n个值。执行完相应的语句后,array将是一个包含有n个值的列向量Inf读取文件中所有值。执行完相应的语句后,array将是一个列向量,包含有从文件所有值。[n,m]从文件中精确定地读取n×m个值。Array是一个n×m的数组。3/21/202523利用界面工具导入数据选择工作区浏览器工具栏中的“ImportData”,选择待导入的文件,这里我们选择了一个文本文件,其内容为逗号分隔的数字,打开窗口如图所示。3/21/202524在该窗口中选择分隔符号,设置导入数据的起始行。在左侧窗口中显示的是文件中的内容,右侧窗口中是导入数据的预览。设置完成后,点击Next,进入下一界面。在该界面中可以设置导入方式,预览导入的变量,如图所示。3/21/2025253、Excel文件的读写xlsfinfo:检查文件是否包含Excel表格xlswrite:xlsread:3/21/2025264、图像文件的读写函数调用格式函数说明imreadA=imread(fn,fmt)[X,map]=imread(fn,fmt)[…]=imread(fn)fn,图像文件名,fmt图像文件格式,如果缺省,会根据扩展名识别图像格式imwriteimwrite(A,fn,fmt)imwrite(X,map,fn,fmt)Imwrite(…,fn)以格式fmt写图像数据A到图像文件fn。A可为m×n×3(彩色图像)数组。如fmt缺省,根据fn扩展名识别imfinfoInfo=imfinfo(fn,fmt)Info=imfinfo(fn)3/21/202527图像格式其它情况saveasprint(h,’format’,fn)imshowimage3/21/202528低级文件I/O操作1、打开和关闭文件2、读写二进制文件3、读写格式化的文本文件4、数据文件的定位3/21/2025291、文件的打开与关闭文件的打开

fopen函数的调用格式为:

fid=fopen(文件名,打开方式)

打开方式有:‘r’表示对打开的文件读数据,‘w’表示对打开的文件写数据,‘a’表示在打开的文件末尾添加数据。

fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。3/21/202530文件数据格式有两种形式,一是二进制文件,二是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。3/21/202531文件的关闭

文件在进行完读、写等操作后,应及时关闭。关闭文件用fclose函数,调用格式为:

sta=fclose(fid)

该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回–1。3/21/2025322、二进制文件的读写操作读二进制文件

fread

函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:

[A,COUNT]=fread(fid,size,precision)

其中A用于存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:3/21/202533

(1)N表示读取N个元素到一个列向量。

(2)Inf表示读取整个文件。

(3)[M,N]表示读数据到M×N的矩阵中,数据按列存放。

precision代表读写数据的类型

3/21/202534写二进制文件fwrite函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为:

COUNT=fwrite(fid,A,precision)

其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。3/21/202535

例4-1建立一数据文件magic5.dat,用于存放5阶魔方阵。

程序如下:

fid=fopen(‘magic5.dat’,‘w’);

cnt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论