一章文件输入输出.ppt

上传人:本田雅阁 文档编号:2657715 上传时间:2019-04-30 格式:PPT 页数:42 大小:306.01KB
返回 下载 相关 举报
一章文件输入输出.ppt_第1页
第1页 / 共42页
一章文件输入输出.ppt_第2页
第2页 / 共42页
一章文件输入输出.ppt_第3页
第3页 / 共42页
一章文件输入输出.ppt_第4页
第4页 / 共42页
一章文件输入输出.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《一章文件输入输出.ppt》由会员分享,可在线阅读,更多相关《一章文件输入输出.ppt(42页珍藏版)》请在三一文库上搜索。

1、2019年4月30日,第1页,第5章 文件I/O,高级文件的I/O操作 读写MAT文件或者ASCII 读写TXT文件 读写EXCEL文件 读写图像文件 低级文件的I/O操作 打开和关闭文件 读写二进制文件 读写格式化的文本文件 控制文件指针位置 几点重要补充,2019年4月30日,第2页,几个概念,数据输入和输出(I/O) 输入:从磁盘文件获得数据,加载到工作空间。 输出:从工作空间变量保存到文件中。 高级文件和低级文件I/O操作 高级:针对不同的数据格式文件,提供不同的I/O函数,有现成的函数供使用,仅需少量编程。 低级:使用文件标识符可访问任何类型的数据文件,更加灵活地完成相对特殊的任务,

2、需要复杂编程 二进制文件和文本文件(ASCII文件),2019年4月30日,第3页,二进制文件和文本文件,文本文件将文件看作是由字节(byte)组成的,每个字节(bit)的最高位都是0,文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了 打开方式不同,对于这些0和1的处理也就不同。按照文本方式打开时会进行转换,将每个字节转换成ASCII码,以二进制方式打开则不会进行任何的转换 在记事本中进行文本编辑的时进行编辑的最小单位是字节;而对二进制文件编辑最小单位则是位(bit),不会直接通过手工的方式对二进制文件进行编辑,2019年4月30日,第4页,1、MAT文

3、件的读写,文件的存储 数据导入 文件的打开,2019年4月30日,第5页,MAT文件的存储,保存整个工作区 点击“File”菜单中的“Save Workspace As”选项,或者点击工作区浏览器工具栏中的“Save”,可以将工作区中的变量保存为 MAT 文件。 保存工作区中的变量 在工作区浏览器中,右键单击需要保存的变量名,选择“Save As”,将该变量保存为 MAT 文件。 利用 save 命令保存 该命令可以保存工作区,或工作区中任何指定文件。,2019年4月30日,第6页,save命令,save命令的调用格式为: save,将工作区中的所有变量保存在当前工作区中的文件中,文件名为 m

4、atlab.mat,MAT 文件可以通过 load 函数再次导入工作区,MAT 函数可以被不同的机器导入,甚至可以通过其他的程序调用; save(filename),将工作区中的所有变量保存为文件,文件名由 filename 指定。如果 filename 中包含路径,则将文件保存在相应目录下,否则默认路径为当前路径; save(filename, var1, var2, .),保存指定的变量在 filename 指定的文件中; save(filename, -struct, s),保存结构体 s 中全部域作为单独的变量; save(filename, -struct, s, f1, f2, .

5、),保存结构体 s 中的指定变量; save(-regexp, expr1, expr2, .),通过正则表达式指定待保存的变量需满足的条件; save(., format),指定保存文件的格式,格式可以为 MAT 文件、ASCII 文件等。,2019年4月30日,第7页,2019年4月30日,第8页,MAT数据导入,MATLAB 中导入数据通常由函数 load 实现,该函数的用法为: load,如果 matlab.mat 文件存在,导入 matlab.mat 中的所有变量,如果不存在,则返回 error; load filename,将 filename 中的全部变量导入到工作区中; loa

6、d filename X Y Z .,将 filename 中的变量 X、Y、Z 等导入到工作区中,如果文件为 MAT 文件,在指定变量时可以使用通配符“*”; load filename -regexp expr1 expr2 .,通过正则表达式指定需要导入的变量; load -ascii filename,无论输入文件名是否包含有扩展名,将其以 ascii 格式导入,如果指定的文件不是数字文本,则返回 error; load -mat filename,无论输入文件名是否包含有扩展名,将其以 mat 格式导入,如果指定的文件不是 MAT 文件,则返回 error;,2019年4月30日,第

7、9页,Importdata 函数,MATLAB 中,另一个导入数据的常用函数为 importdata,该函数的用法为: importdata(filename),将 filename 中的数据导入到工作区中; A = importdata(filename),将 filename 中的数据导入到工作区中,并保存为变量 A; importdata(filename,delimiter),将 filename 中的数据导入到工作区中,以 delimiter 指定的符号作为分隔符; 与 load 函数不同,importdata 将文件中的数据以结构体的方式导入到工作区中。,2019年4月30日,第1

8、0页,MAT文件的打开,MATLAB 中可以使用 open 命令打开各种格式的文件,MATLAB 自动根据文件的扩展名选择相应的编辑器。 读者需要注意的是,open(filename.mat) 和 load(filename.mat) 的不同,前者将filename.mat 以结构体的方式打开在工作区中,后者将文件中的变量导入到工作区中,如果需要访问其中的内容,需要以不同的格式进行。,2019年4月30日,第11页,2、文本文件的读写,在上一节中介绍的函数和命令主要用于读写 mat 文件,在应用中,需要读写更多格式的文件,如文本文件,word 文件,xml 文件,xls 文件及图像、音视频文件

9、等。本节介绍文本文件(txt)的读写。 MATLAB 中实现文本文件读写的函数如表所示。,2019年4月30日,第12页,csvread 函数,M = csvread(filename),将文件 filename 中的数据读入,并且保存为 M,filename 中只能包含数字,并且数字之间以逗号分隔。M 是一个数组,行数与 filename 的行数相同,列数为 filename 列的最大值,对于元素不足的行,以 0 补充。 M = csvread(filename, row, col),读取文件 filename 中的数据,起始行为 row,起始列为 col,需要注意的是,此时的行列从 0 开

10、始。 M = csvread(filename, row, col, range),读取文件 filename 中的数据,起始行为 row,起始列为 col,读取的数据由数组 range 指定,range 的格式为:R1 C1 R2 C2,其中 R1、C1 为读取区域左上角的行和列,R2、C2为读取区域右下角的行和列。,2019年4月30日,第13页,dlmread 函数,M = dlmread(filename) M = dlmread(filename, delimiter) M = dlmread(filename, delimiter, R, C) M = dlmread(filena

11、me, delimiter, range) 其中参数 delimiter 用于指定文件中的分隔符,其他参数的意义与 csvread 函数中参数的意义相同,这里不再赘述。dlmread 函数与 csvread 函数的差别在于,dlmread 函数在读入数据时可以指定分隔符,不指定时默认分隔符为逗号。,2019年4月30日,第14页,dlmwrite 函数,dlmwrite(filename, M),将矩阵 M 的数据写入文件 filename 中,以逗号分隔; dlmwrite(filename, M, D),将矩阵 M 的数据写入文件 filename 中,采用指定的分隔符分隔数据,如果需要

12、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-value list),叙写文件,并指定参数。 dlmwrite 函数的可用参

13、数如表所示。,2019年4月30日,第15页,textread,textscan,当文件的格式已知时,可以利用 textread 函数和 textscan 函数读入。 a, b, c, . = textread(filename, format, n) 例如,假设文件test_input.dat包含下列数据 James Jones O+ 3.51 22 Yes Sally Smith A+ 3.28 23 NO 这些数据用下面的函数读取一系列的数组。 first, last, blood, gpa, age, answer = textread(test_input.dat,%s %s %s

14、%f %d %s),2019年4月30日,第16页,低级文件I/O,本节介绍一些基本的文件操作,这些操作如表所示:,2019年4月30日,第17页,fprintf 函数,count = fprintf(fid, format, A, .),该语句将矩阵 A 及后面其他参数中数字的实部以 format 指定的格式写入到 fid 指定的文件中,返回写入数据的字节数。 上面语句中,参数 format 由 % 开头,共可由四个部分组成,分别为: 标记(flag),为可选部分; 宽度和精度指示,为可选部分; 类型标志符,为可选部分; 转换字符,为必需部分。,2019年4月30日,第18页,标记,1标记

15、标记用于控制输出的对齐方式,可以选择的内容如表所示。,2019年4月30日,第19页,宽度和精度指示,2宽度和精度指示 用户可以通过数字指定输出数字的宽度及精度,格式为: %6f,指定数字的宽度; %6.2f,指定数字的宽度及精度; %.2f,指定数字的精度。,2019年4月30日,第20页,转换字符,3转换字符 转换字符用于指定输出的符号,可以选择的内容如表所示。,2019年4月30日,第21页,例 11-9 利用 fprintf 函数在显示器上输出字符串 fprintf(1,Its Friday.n) Its Friday. 在该例中,利用 1 表示显示器,并且用两个单引号显示单引号,使用

16、 n 进行换行。在格式化输出中,这类符号称为转义符。MATLAB 中的常用转义符如表所示。,2019年4月30日,第22页,2019年4月30日,第23页,fscanf函数,array = fscanf(fid, format) array, count = fscanf(fid, format, size) 其中fid是所要读取的文件的文件标识(fileid),format是控制如何读取的格式字符串,array是接受数据的数组,输出参数count返回从文件读取的变量的个数。参数size指定从文件读取数据的数目。这个函数有以下三个类型。 n 准确地读取n个值。执行完相应的语句后,array将是

17、一个包含有n个值的列向量 Inf 读取文件中所有值。执行完相应的语句后,array将是一个列向量,包含有从文件所有值。 n,m 从文件中精确定地读取nm个值。Array是一个nm的数组。,2019年4月30日,第24页,利用界面工具导入数据,选择工作区浏览器工具栏中的“Import Data”,选择待导入的文件,这里我们选择了一个文本文件,其内容为逗号分隔的数字,打开窗口如图所示。,2019年4月30日,第25页,在该窗口中选择分隔符号,设置导入数据的起始行。在左侧窗口中显示的是文件中的内容,右侧窗口中是导入数据的预览。设置完成后,点击 Next,进入下一界面。在该界面中可以设置导入方式,预览

18、导入的变量,如图所示。,2019年4月30日,第26页,3、Excel文件的读写,xlsfinfo: 检查文件是否包含Excel表格 xlswrite: xlsread:,2019年4月30日,第27页,4、图像文件的读写,2019年4月30日,第28页,图像格式其它情况,saveas print(h,format,fn) imshow image,2019年4月30日,第29页,低级文件I/O操作,1、打开和关闭文件 2、读写二进制文件 3、读写格式化的文本文件 4、数据文件的定位,2019年4月30日,第30页,1、文件的打开与关闭,文件的打开 fopen函数的调用格式为: fid= fo

19、pen(文件名,打开方式) 打开方式有:r表示对打开的文件读数据,w表示对打开的文件写数据,a表示在打开的文件末尾添加数据。 fid用于存储文件句柄值,句柄值用来标识该数据文件,其他函数可以利用它对该数据文件进行操作。,2019年4月30日,第31页,文件数据格式,有两种形式,一是二进制文件,二是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。,2019年4月30日,第32页,文件的关闭,文件在进行完读、写等操作后,应及时关闭。关闭文件用fclose函数,调用格式为: sta=fclose(fid) 该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代

20、码,若关闭成功,返回0,否则返回1。,2019年4月30日,第33页,2、二进制文件的读写操作,读二进制文件 fread 函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: A,COUNT=fread(fid,size, precision) 其中A用于存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,size为可选项,若不选用则读取整个文件内容,若选用则它的值可以是下列值:,2019年4月30日,第34页,(1) N表示读取 N个元素到一个列向量。 (2) Inf表示读取整个文件。 (3) M,N表示读数据到MN的矩阵中,数据按列存放。 precision代表

21、读写数据的类型,2019年4月30日,第35页,写二进制文件,fwrite 函数按照指定的数据类型将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite (fid, A, precision) 其中COUNT返回所写的数据元素个数,fid为文件句柄,A用来存放写入文件的数据,precision用于控制所写数据的类型,其形式与fread函数相同。,2019年4月30日,第36页,例4-1 建立一数据文件magic5.dat,用于存放5阶魔方阵。 程序如下: fid=fopen(magic5.dat,w); cnt=fwrite(fid,magic(5),int32); fclose

22、(fid);,2019年4月30日,第37页,3、格式化文本文件的读写操作,读文本文件 fscanf 函数的调用格式为: A,COUNT= fscanf (fid, format, size) 其中A用以存放读取的数据,COUNT返回所读取的数据元素个数。fid为文件句柄。format用以控制读取的数据格式,由%加上格式符组成,常见的格式符有d,f,c,s。 size为可选项,决定矩阵A中数据的排列形式。,2019年4月30日,第38页,写文本文件 fprintf 函数的调用格式为: COUNT= fprintf(fid, format, A) 其中A存放要写入文件的数据。先按format指定

23、的格式将数据矩阵A格式化,然后写入到fid所指定的文件。格式符与fscanf函数相同。,2019年4月30日,第39页,4、数据文件定位,MATLAB提供了与文件定位操作有关的函数fseek和ftell。fseek函数用于定位文件位置指针,其调用格式为: status=fseek(fid, offset, origin) 其中fid为文件句柄,offset表示位置指针相对移动的字节数,origin表示位置指针移动的参照位置。若定位成功,status返回值为0,否则返回值为1。,2019年4月30日,第40页,ftell函数返回文件指针的当前位置,其调用格式为: position=ftell (fid) 返回值为从文件开始到指针当前位置的字节数。若返回值为1表示获取文件当前位置失败。,2019年4月30日,第41页,几点重要的补充,1. 连续读取多个文件的数据,并存放在一个矩阵中: (1) 首先是如何读取文件名: 方法一: filename=dir(*.jpg); 那么第i个文件的文件名就可以表示为 filename(i).name 文件数量为:length(filename),2019年4月30日,第42页,科学数据保存格式 Hdf Netcdf(nc),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1